From 33224139e89b8c971b8b2442a2aae9dbd92063f5 Mon Sep 17 00:00:00 2001
From: wu_xinjun <bent20140204@outlook.com>
Date: 星期五, 13 五月 2022 14:10:39 +0800
Subject: [PATCH] Merge commit '13530d0ad2c32608d0b46a5c16ad4ac0c25b59f1' into dev

---
 src/microwave/deviceTools.py |   53 ++++++++++++++++++++++++-----------------------------
 1 files changed, 24 insertions(+), 29 deletions(-)

diff --git a/src/microwave/deviceTools.py b/src/microwave/deviceTools.py
index b26422e..7031f4f 100644
--- a/src/microwave/deviceTools.py
+++ b/src/microwave/deviceTools.py
@@ -3,6 +3,8 @@
 import time
 import os, sys
 import open3d as o3d
+from multiprocessing import  Pool
+import numpy as np
 
 from ..utils import file_fliter, write_ply
 from .servers import MicroWaveReceiver
@@ -109,41 +111,34 @@
 
     return bin_list
 
+def bin2ply_f(folder,file):
+
+    with open(os.path.join(folder,file), "rb") as bin_file:
+        print(f"Extracting the data in {file} ...")
+        buf = bin_file.read()
+        buf_data = MicroWaveParser.ParserFrame(buf)
+        for frame in buf_data:
+            
+            Frame_id = frame[0]
+            FrameNumber = frame[1]
+            point_cloud = np.array(frame[2])
+            if len(point_cloud) == 0 :
+                print(f"Notice: Frame {FrameNumber} is empty!")
+            else:
+                write_ply(point_cloud,folder,str(FrameNumber))
+
 # bin2ply
-def bin2ply_tool(folder):
+def bin2ply_tool(folder,nums_worker = 4):
+    pool = Pool(processes = nums_worker)
+
     bin_files = file_fliter(folder,'bin')
 
     for file in bin_files:
+        pool.apply_async(func=bin2ply_f,args=(folder,file,))
 
-        filename = file
-        # (fn, ext) = os.path.splitext(filename)
-        with open(os.path.join(folder,file), "rb") as bin_file:
-            buf = bin_file.read()
-            buf_data = MicroWaveParser.ParserFrame(buf)
+    pool.close()
+    pool.join()
 
-
-            for frame in buf_data:
-                Frame_id = frame[0]
-                FrameNumber = frame[1]
-                point_cloud = frame[2]
-                if len(point_cloud) != 0 :
-                    with open(os.path.join(folder,str(FrameNumber) +".ply"), "w") as f:
-                        f.write("ply\n")
-                        f.write("format ascii 1.0\n")
-                        f.write("comment MicroWave2Ply generated\n")
-                        f.write("element vertex %d\n" % len(point_cloud))
-                        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 point_cloud:
-                            x, y, z = p
-                            f.write("{:.5f} {:.5f} {:.5f}\n".format(x, y, z))
-                            n_p += 1
-                        print(time.asctime(),f"File {file} Frame {FrameNumber}.ply have been saved with {n_p} points!")
 
 def plot_ply(path):
     if isinstance(path,str):

--
Gitblit v1.9.1