| | |
| | | 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 |
| | |
| | | |
| | | 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): |