算法更新: delivery v1.2.1、平整度v1.5、测距v2.2、整车配准v1.3 适配器: vehicle-registration 新增、各算法 manifest 和 adapter 更新 后端: taskCadFiles/source 字段迁移、derivedPointClouds 注册、取消任务联动 前端: ElapsedTime 时长显示、两步算法流程、canRun 逻辑修复 文档: 新增5份算法性能分析报告
65 lines
2.7 KiB
Python
65 lines
2.7 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
|
|
from translate_align_pointcloud_to_cad import translate_align_by_front_tail
|
|
|
|
|
|
def build_parser() -> argparse.ArgumentParser:
|
|
parser = argparse.ArgumentParser(
|
|
description="Standalone train point-cloud translation alignment tool"
|
|
)
|
|
subparsers = parser.add_subparsers(dest="command", required=True)
|
|
|
|
translate_align = subparsers.add_parser(
|
|
"translate-align",
|
|
help="Align a whole point cloud to a standard STEP CAD by front/tail centroids",
|
|
)
|
|
translate_align.add_argument("--cad", "-c", default="datasets/CAD/M02.stp", help="Reference STEP CAD file")
|
|
translate_align.add_argument(
|
|
"--pointcloud",
|
|
"-p",
|
|
default="datasets/shift_test_output/",
|
|
help="Input PLY point cloud or a directory containing shifted_whole_pointcloud.ply",
|
|
)
|
|
translate_align.add_argument("--output-dir", "-o", default="results", help="Output directory")
|
|
translate_align.add_argument("--axis", choices=["x", "y", "z"], default="x", help="Train length axis")
|
|
translate_align.add_argument("--crop-ratio", type=float, default=0.01, help="Front/tail crop ratio")
|
|
translate_align.add_argument("--mesh-deflection", type=float, default=0.1, help="CAD meshing deflection")
|
|
translate_align.add_argument("--cad-sample-points", type=int, default=30000, help="Points sampled from CAD mesh")
|
|
translate_align.add_argument("--local-sample-points", type=int, default=1000, help="Points sampled from each end")
|
|
translate_align.add_argument("--scale-pointcloud", type=float, default=1.0, help="Scale factor applied to point cloud")
|
|
translate_align.add_argument("--no-visualize", action="store_true", help="Disable Open3D windows")
|
|
return parser
|
|
|
|
|
|
def main() -> None:
|
|
parser = build_parser()
|
|
args = parser.parse_args()
|
|
|
|
if args.command == "translate-align":
|
|
result = translate_align_by_front_tail(
|
|
cad_path=args.cad,
|
|
pointcloud_path=args.pointcloud,
|
|
output_dir=args.output_dir,
|
|
axis=args.axis,
|
|
crop_ratio=args.crop_ratio,
|
|
mesh_deflection=args.mesh_deflection,
|
|
cad_sample_points=args.cad_sample_points,
|
|
local_sample_points=args.local_sample_points,
|
|
scale_pointcloud=args.scale_pointcloud,
|
|
visualize=not args.no_visualize,
|
|
)
|
|
|
|
print("\n========== Result ==========")
|
|
print("translation:", result["translation"])
|
|
print("front-tail translation difference:", result["front_tail_translation_difference"])
|
|
print("aligned path:", result["aligned_path"])
|
|
print("matrix path:", result["matrix_path"])
|
|
else:
|
|
parser.error(f"Unsupported command: {args.command}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|