From b7a9cf522716f3236d4077c75d7ed147a67200b4 Mon Sep 17 00:00:00 2001
From: wu_xinjun <bent20140204@outlook.com>
Date: 星期六, 02 四月 2022 22:30:23 +0800
Subject: [PATCH] speed up for reading and writing ply files

---
 src/utils/tools.py |   57 ++++++++++++++++++---------------------------------------
 1 files changed, 18 insertions(+), 39 deletions(-)

diff --git a/src/utils/tools.py b/src/utils/tools.py
index 80b55d1..ee2806a 100644
--- a/src/utils/tools.py
+++ b/src/utils/tools.py
@@ -1,3 +1,4 @@
+from email import header
 import os, sys
 import numpy as np
 import time
@@ -20,50 +21,28 @@
     return target_files
 
 def read_ply(path:str,start_line:int = 10):
-    count = 0
-    ply_list = []
-    with open(path,"r") as ply_file:
-        # read the line
-        for line in ply_file.readlines():
-            # strip the str of the header
-            if count < start_line:
-                pass
-            else:
-                line_str_list = line.strip().split(' ')
-                # convert the str type to float type
-                line_float_list = []
-                for value in line_str_list:
-                    line_float_list.append(float(value))
-
-                ply_list.append(line_float_list)
-            count += 1
-    ply_array = np.array(ply_list,dtype=np.float16)
-
+    ply_array = np.load(path,skiprows=start_line)
     return ply_array
 
 
 def write_ply(data:np.array,folder:str,name:str):
     file = os.path.join(folder,name+".ply")
-    with open (file,'w') as f:
-        f.write("ply\n")
-        f.write("format ascii 1.0\n")
-        f.write("comment write_ply generated\n")
-        f.write("element vertex %d\n" % data.shape[0])
-        f.write("property float x\n")
-        f.write("property float y\n")
-        f.write("property float z\n")
-        f.write("element face 0\n")
-        f.write("property list uchar int vertex_indices\n")
-        f.write("end_header\n")
-        n_p = 0
-
-        for p in tqdm(data):
-            x = p[0]
-            y = p[1]
-            z = p[2]
-            f.write("{:.5f} {:.5f} {:.5f}\n".format(x, y, z))
-            n_p += 1
-        print(time.asctime(),f"Frame {name}.ply have been saved with {n_p} points!")
+    n_p = data.shape[0]
+    header = ["ply\nformat ascii 1.0\n",
+        "comment write_ply generated\n",
+        f"element vertex {n_p}\n",
+        "property float x\n",
+        "property float y\n",
+        "property float z\n",
+        "element face 0\n",
+        "property list uchar int vertex_indices\n",
+        "end_header"]
+    np.savetxt(file,data,
+                delimiter=" ",
+                header="".join(header),
+                comments="",
+                fmt='%.6f')
+    print(f"{time.asctime()} {name}.ply have been saved with {n_p} points!")
 
 
 

--
Gitblit v1.9.1