import os
|
import sys
|
import time
|
|
# add python path of src to sys.path
|
src_path = os.path.join(__file__, *(['..'] * 2))
|
src_path = os.path.abspath(src_path)
|
sys.path.insert(0, src_path)
|
|
from microwave.parsers import MicroWaveParser
|
from tools import file_fliter
|
|
if __name__ == "__main__":
|
def help():
|
print("Usage: bin2ply.py [BINfolder]")
|
print("EXAMPLE: BIN2ply.py ./manual_ply/pod1-2012-12-12-12-12-12/")
|
exit(1)
|
|
if len(sys.argv) != 2:
|
help()
|
try:
|
BINfolder = str(sys.argv[1])
|
# example pod1-2022-02-21-13-25-03_packet125.udp --> 125
|
sort_lambda = lambda x:int(x.split('.')[0])
|
bin_files = file_fliter(BINfolder,'bin', sort_lambda)
|
|
except Exception as e:
|
print(e)
|
help()
|
|
for file in bin_files:
|
|
filename = file
|
(fn, ext) = os.path.splitext(filename)
|
with open(os.path.join(BINfolder,file), "rb") as bin_file:
|
buf = bin_file.read()
|
point_cloud = MicroWaveParser.ParserFrame(buf)
|
with open(os.path.join(BINfolder,fn +".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"Frame {fn}.ply have been saved with {n_p} points!")
|