算法更新: delivery v1.2.1、平整度v1.5、测距v2.2、整车配准v1.3 适配器: vehicle-registration 新增、各算法 manifest 和 adapter 更新 后端: taskCadFiles/source 字段迁移、derivedPointClouds 注册、取消任务联动 前端: ElapsedTime 时长显示、两步算法流程、canRun 逻辑修复 文档: 新增5份算法性能分析报告
21 KiB
USAGE
本文档面向后续开发人员,说明本项目的运行环境、数据约定、命令输入输出、常用工作流和排错方法。
项目根目录下的 main.py 是统一命令行入口。除非特别说明,所有命令都建议在项目根目录执行。
python main.py --help
当前公开命令:
translate-align
cad2mesh
denoise
registration
contour
curvature
plane
full
1. 环境准备
推荐使用独立 conda 环境。当前项目建议使用 High-Speed 环境运行;不要直接在 base 环境中安装,尤其不要在 Python 3.12 的 base 环境里安装 pythonocc-core。
conda env create -n High-Speed -f environment.yml
conda activate High-Speed
pip install -r requirements.txt
pip install git+https://github.com/AutodeskAILab/occwl
如果环境已经存在:
conda env update -n High-Speed -f environment.yml
conda activate High-Speed
pip install -r requirements.txt
pip install git+https://github.com/AutodeskAILab/occwl
验证依赖:
python -c "import open3d, trimesh, torch, yaml, OCC.Core.STEPControl; print('env ok')"
如果 torch 提示 CUDA driver 版本过旧,程序会退回 CPU。功能不受影响,但点云到三角面的距离计算会慢。
2. 数据目录约定
默认示例数据放在 datasets/:
datasets/
CAD/ # STEP CAD,例如 11.step
Mesh/ # STL/OBJ/PLY Mesh,例如 11.stl
PointCloud/ # 原始/干净点云 PLY,例如 11.ply
Noise_PointCloud/ # 加噪或待配准点云 PLY,例如 11_noisy.ply
shift_test_output/ # translate-align 测试输出,默认读取 shifted_whole_pointcloud.ply
同一编号的数据通常应成组存在:
datasets/CAD/11.step
datasets/Mesh/11.stl
datasets/PointCloud/11.ply
datasets/Noise_PointCloud/11_noisy.ply
translate-align 默认使用下面这组输入:
datasets/CAD/M02.stp
datasets/shift_test_output/shifted_whole_pointcloud.ply
数据要求:
- CAD 使用 STEP,扩展名通常是
.step或.stp。 - Mesh 使用
trimesh可读取的格式,例如.stl、.obj、.ply。 - PointCloud 推荐 PLY,必须包含三维点坐标。
- CAD、Mesh、PointCloud 必须处于同一坐标系和同一单位。
- 示例数据按毫米量级处理。
contour假设点云已与 CAD/Mesh 对齐。registration会模拟旋转后做配准。
3. 输出目录约定
建议保留以下输出目录:
vis/ # 日志、热力图点云、曲率点云、中间结果
excel/ # contour 输出的 Excel 表
results/ # translate-align 默认输出目录
可以手动创建:
mkdir -p vis excel results
常见输出:
*.stl # CAD 转 Mesh 结果
*.ply # 彩色点云、热力图点云
*.xlsx # 轮廓/平整度/平面度 Excel 汇总
*.log # shell 重定向保存的终端输出
results/T_translation_only.txt
results/aligned_pointcloud_translation_only.ply
4. 方法输入输出总览
| 方法 | 用途 | 输入 | 输出 |
|---|---|---|---|
translate-align |
点云到标准CAD的配准 | 默认 --cad datasets/CAD/M02.stp --pointcloud datasets/shift_test_output/;可调头尾截取和采样参数 |
默认写入 results/,输出对齐后点云、4x4 平移矩阵和头尾采样检查文件 |
cad2mesh |
STEP CAD 转 STL Mesh | --cad STEP 文件 |
--mesh STL 文件 |
denoise |
给干净点云加噪,并运行滤波方法 | --pointcloud 干净 PLY;--noise-std 噪声标准差 |
终端输出点数、平均噪声偏移、滤波保留比例、Chamfer Distance |
registration |
点云到 Mesh 配准与距离评估 | --pointcloud 待配准 PLY;--mesh 参考 Mesh |
终端输出 fitness、RMSE、变换矩阵、配准后距离统计 |
contour |
轮廓/平整度/平面度评估 | 单任务:--pointcloud 和 --cad;批量:--tasks 或 --all,并指定 --data-root、--pointcloud-kind |
终端输出 Mean、Max、RMSE、Min、Std;可保存热力图 PLY 和 Excel |
curvature |
点云曲率估计 | --pointcloud PLY;--radius 邻域半径;--max-nn 最大邻居数 |
终端输出曲率 mean/max;可保存彩色曲率 PLY |
plane |
RANSAC 平面拟合 | 可选 --pointcloud PLY;不传则生成模拟带噪平面 |
终端输出平面模型、内点比例、法向角度误差、RMSE |
full |
配置驱动的完整流程 | --config YAML 配置;默认 config.yaml |
串联输出加噪/滤波、配准和距离评估结果 |
5. 命令详解
5.1 轮廓/平整度/平面度评估:contour
功能:统一的轮廓/平整度/平面度评估入口。默认读取 STEP CAD,三角化后计算点云到 CAD 三角面的最近距离。
输入:
--pointcloud:待评估 PLY 点云。--cad:参考 STEP CAD。--mesh:可传参考 STL/OBJ/PLY Mesh。传了--mesh时会走点云到 Mesh 距离计算。--tasks:批量执行指定任务编号,用英文逗号分隔,例如11,31,40。--all:批量执行--data-root下CAD/中的全部 STEP 数据。--data-root:批量数据根目录,默认datasets。--pointcloud-kind:批量点云来源,noise读取Noise_PointCloud/{id}_noisy.ply,clean读取PointCloud/{id}.ply。--mesh-deflection:STEP 三角化精度,越小越精细,但三角面更多、计算更慢。--point-chunk-size:点云分块大小。--triangle-chunk-size:三角面分块大小。--save:保存距离热力图 PLY。--excel-output:保存 Excel。--result-template:Excel 参考模板,默认excel/测量结果.xlsx。--combined-context-pointcloud:合并热力图时一起加入的完整点云,默认datasets/train/train_2_10M.ply。可指定datasets/train/train_2_1T_配准.ply;保存合并 PLY 时会按块流式写入,避免整体加载完整点云。--no-visualize:禁用 Open3D 窗口。使用train_2_1T_配准.ply时必须加该参数,否则窗口展示仍会尝试加载超大点云。
输出:
- 终端距离统计:Mean、Max、RMSE、Min、Std。
- 如果传
--save:保存彩色热力图 PLY。 - 如果传
--excel-output:保存 Excel。 - 批量模式:所有成功执行的热力图会按原始坐标额外保存成一个合并 PLY;保存阶段支持对
datasets/train/train_2_1T_配准.ply进行流式合并。未传--no-visualize时也会按原始坐标合并到一个 Open3D 窗口展示,但超大背景点云不适合窗口展示。 - 批量模式会在终端最后打印总执行时间
Contour batch total execution time,该时间包含任务计算、Excel 保存和合并 PLY 保存。
Excel 格式:
任务号 | 项点名称 | 公差要求 | 理论尺寸 | 测量结果 | 误差结果 | 测量结论
默认读取 excel/测量结果.xlsx 作为模板,按 任务号 迁移对应行到新 Excel。程序只填本次的 测量结果 和 测量结论:测量结果为本次测量均值;测量成功填 成功,否则填 失败。如果需要使用其它模板,传 --result-template path/to/template.xlsx。
任务号从 CAD 文件名提取。例如:
datasets/CAD/11.step -> 11
Excel 路径规则:
--excel-output不带值:保存到excel/contour.xlsx--excel-output 11_contour.xlsx:保存到excel/11_contour.xlsx--excel-output reports/11.xlsx:保存到reports/11.xlsx--result-template不传:默认读取excel/测量结果.xlsx
批量模式路径规则:
- CAD:
{data_root}/CAD/{任务号}.step - 加噪点云:
{data_root}/Noise_PointCloud/{任务号}_noisy.ply - 干净点云:
{data_root}/PointCloud/{任务号}.ply - 如果
--save是目录,例如--save vis/contour,每个任务会保存为vis/contour/{任务号}_contour.ply - 如果
--save是带{task_id}的文件模板,例如--save vis/{task_id}_contour.ply,会替换任务号 - 如果
--save是普通 PLY 文件,例如--save vis/contour.ply,批量模式会保存为vis/contour_{任务号}.ply - 合并点云保存规则:未传
--save时保存为vis/combined_contour.ply;--save vis/contour时保存为vis/contour/combined_contour.ply;--save vis/{task_id}_contour.ply时保存为vis/combined_contour.ply;--save vis/contour.ply时保存为vis/contour_combined.ply - 合并点云默认会加入
datasets/train/train_2_10M.ply;可用--combined-context-pointcloud datasets/train/train_2_100M.ply或datasets/train/train_2_1T_配准.ply切换。保存合并 PLY 时,大背景点云按块从输入文件写入输出文件,不再用 Open3D 整体读入内存;输出文件会比原始背景点云更大,因为会额外写入 RGB 颜色。注意:由于train_2_100M.ply或train_2_1T_配准.ply太大,通常需要使用者自行导入或修改地址。 - 如果没有传
--no-visualize,批量模式会把所有成功热力图合并显示在一个窗口里。使用train_2_1T_配准.ply时不要打开窗口,必须保留--no-visualize。
快速查看统计结果:
python main.py contour \
--pointcloud datasets/PointCloud/11.ply \
--cad datasets/CAD/11.step \
--no-visualize
保存热力图和 Excel:
python main.py contour \
--cad datasets/CAD/11.step \
--pointcloud datasets/Noise_PointCloud/11_noisy.ply \
--save vis/11_contour.ply \
--excel-output 11_contour.xlsx \
--no-visualize
指定多个任务:
python main.py contour \
--tasks 11,31,40 \
--data-root datasets \
--pointcloud-kind noise \
--save vis/contour \
--excel-output selected_contour.xlsx \
--no-visualize
执行全部任务:
conda activate High-Speed
python main.py contour \
--all \
--data-root datasets \
--pointcloud-kind noise \
--save vis/contour \
--excel-output all_contour.xlsx \
--combined-context-pointcloud datasets/train/train_2_1T_配准.ply \
--no-visualize
注意:使用时,利用combined-context-pointcloud指定配准后的点云路径
该模式只保存合并 PLY,不打开 Open3D 展示窗口。train_2_1T_配准.ply 会被流式读取,适合用于生成最终大文件;不要去掉 --no-visualize。
显存或内存不足时调小分块:
python main.py contour \
--cad datasets/CAD/11.step \
--pointcloud datasets/Noise_PointCloud/11_noisy.ply \
--mesh-deflection 0.5 \
--point-chunk-size 512 \
--triangle-chunk-size 1024 \
--excel-output \
--no-visualize
5.2 CAD 转 Mesh:cad2mesh
功能:读取 STEP CAD,离散成 STL 三角网格。
输入:
--cad:输入 STEP 文件。--mesh:输出 STL 文件。--precision:离散精度,单位为 mm。值越小通常越精细,生成文件也可能越大。
输出:
- 一个 STL 文件。
- 终端输出 STEP 读取、网格化和 STL 写入进度。
示例:
python main.py cad2mesh \
--cad datasets/CAD/11.step \
--mesh vis/11_cad2mesh.stl \
--precision 1.0
5.3 加噪与滤波:denoise
功能:读取干净点云,加高斯噪声,并按配置运行滤波方法。
输入:
--pointcloud:干净 PLY 点云。--noise-std:高斯噪声标准差。--no-visualize:禁用 Open3D 窗口。
输出:
- 终端输出干净点数、加噪点数、平均噪声偏移。
- 对每个滤波方法输出保留比例和 Chamfer Distance。
- 当前主流程不会自动保存滤波后的点云文件。
示例:
python main.py denoise \
--pointcloud datasets/PointCloud/11.ply \
--noise-std 4 \
--no-visualize
5.4 配准:registration
功能:对输入点云模拟旋转,然后通过 RANSAC + ICP 配准到 Mesh,并计算配准后距离。
输入:
--pointcloud:待配准 PLY 点云,通常使用datasets/Noise_PointCloud/*_noisy.ply。--mesh:参考 STL/OBJ/PLY Mesh。--voxel-size:配准下采样体素大小。--roll、--pitch、--yaw:模拟旋转角度,单位为 degree。--trans-range:随机平移范围。--no-visualize:禁用 Open3D 窗口。
输出:
FitnessRMSE- 4x4 transformation matrix
- 配准后点云到 Mesh 的距离统计:Mean、Max、RMSE、Min、Std
示例:
python main.py registration \
--pointcloud datasets/Noise_PointCloud/11_noisy.ply \
--mesh datasets/Mesh/11.stl \
--voxel-size 10 \
--roll 10 \
--pitch 10 \
--yaw 10 \
--no-visualize
5.5 曲率估计:curvature
功能:计算点云局部曲率,并按曲率着色。
输入:
--pointcloud:PLY 点云。--radius:邻域搜索半径。--max-nn:最大邻居数。--color-scale:颜色缩放系数。--save:保存彩色曲率点云。--no-visualize:禁用 Open3D 窗口。
输出:
- 终端输出曲率 mean 和 max。
- 如果传
--save:保存彩色曲率 PLY。
示例:
python main.py curvature \
--pointcloud datasets/PointCloud/11.ply \
--radius 2 \
--max-nn 30 \
--save vis/11_curvature.ply \
--no-visualize
5.6 平面拟合:plane
功能:使用 RANSAC 拟合平面。
输入:
--pointcloud:可选 PLY 点云。不传时会根据config.yaml生成模拟带噪平面。--threshold-mm:RANSAC 距离阈值,单位 mm。--max-iterations:RANSAC 最大迭代次数。--no-visualize:禁用 Open3D 窗口。
输出:
- 平面模型参数。
- 内点比例。
- 法向角度误差。
- 平面 RMSE。
示例:
python main.py plane --no-visualize
带输入点云:
python main.py plane \
--pointcloud datasets/PointCloud/11.ply \
--threshold-mm 0.5 \
--max-iterations 2000 \
--no-visualize
5.7 完整流程:full
功能:按 config.yaml 串联运行流程。
当前默认行为:
- 如果
cad.enabled: false,不会自动执行 CAD 转 Mesh。 - 如果
noise.enabled: true,会先运行denoise,再对加噪点云做配准。 - 最后运行
contour。
输入:
--config:配置文件路径。不传时使用内置默认配置。--no-visualize:禁用 Open3D 窗口。
输出:
- 每个阶段的终端指标。
- Python 调用时会返回一个结果字典。
示例:
python main.py --config config.yaml full --no-visualize
6. 配置文件
默认配置在 config.yaml。
常用字段:
paths:
cad: datasets/CAD/11.step
mesh: datasets/Mesh/11.stl
pointcloud: datasets/PointCloud/11.ply
noisy_pointcloud: datasets/Noise_PointCloud/11_noisy.ply
output_mesh: datasets/Mesh/11.stl
curvature_output:
cad:
enabled: false
precision: 1.0
noise:
enabled: true
std: 4.0
registration:
voxel_size: 10.0
roll: 10.0
pitch: 10.0
yaw: 10.0
trans_range: 0.0
evaluation:
chunk_size: 2048
triangle_chunk_size: 4096
cad_mesh_deflection: 0.1
visualization:
enabled: true
命令行参数优先级高于配置文件。例如:
python main.py --config config.yaml contour \
--cad datasets/CAD/40.step \
--pointcloud datasets/Noise_PointCloud/40_noisy.ply \
--excel-output 40_contour.xlsx \
--no-visualize
7. Python API 用法
除了命令行,也可以在 Python 中调用:
from pipeline import MeasurementPipeline
pipeline = MeasurementPipeline(config_path="config.yaml")
result = pipeline.run_contour(
cad_path="datasets/CAD/11.step",
pointcloud_path="datasets/Noise_PointCloud/11_noisy.ply",
save_path="vis/11_contour.ply",
excel_output_path="11_contour.xlsx",
result_template_path="excel/测量结果.xlsx",
no_visualize=True,
)
print(result["distance_stats"])
常用返回字段:
run_contour:pointcloud、distances、distance_stats、cad_vertices、cad_faces、excel_outputrun_translate_align_pointcloud_to_cad:translation、T_final、aligned_path、matrix_pathrun_registration:source、registration、distance_statsrun_curvature:pointcloud、curvaturesrun_plane:plane_result
8. 打包使用
生成可安装包源码:
python packaging/build_package.py
本地开发安装:
pip install -e packaging/build
geometry-measure --help
安装后命令与 main.py 对应:
geometry-measure contour \
--cad datasets/CAD/11.step \
--pointcloud datasets/Noise_PointCloud/11_noisy.ply \
--save vis/11_contour.ply \
--excel-output 11_contour.xlsx \
--no-visualize
每次修改根目录源码后,如果需要同步到打包目录,重新运行:
python packaging/build_package.py
9. 辅助脚本说明
辅助脚本放在 archive/。常用流程推荐优先使用 main.py 统一入口。
archive/Contour_Flatness.py 可用于批量轮廓/平整度/平面度评估:
python archive/Contour_Flatness.py \
--tasks "11,31,40" \
--data_root High_Speed_Data \
--pointcloud_kind noise \
--excel_output vis/flatness.xlsx
单任务模式:
python archive/Contour_Flatness.py \
--single \
-c High_Speed_Data/CAD/11.step \
-p High_Speed_Data/Noise_PointCloud/11_noisy.ply \
--visualize
archive/translate_align_pointcloud_to_cad.py 已接入统一入口,推荐用 main.py translate-align 调用;需要单独运行脚本时也可以直接执行:
python archive/translate_align_pointcloud_to_cad.py \
-c datasets/CAD/M02.stp \
-p datasets/shift_test_output/ \
-o results \
--axis x \
--crop_ratio 0.01 \
--no_visualize
10. 常见开发任务
添加一个新数据编号
例如添加编号 45:
datasets/CAD/45.step
datasets/Mesh/45.stl
datasets/PointCloud/45.ply
datasets/Noise_PointCloud/45_noisy.ply
运行评估:
python main.py contour \
--tasks 45 \
--data-root datasets \
--pointcloud-kind noise \
--save vis/contour \
--excel-output 45_contour.xlsx \
--no-visualize
保存命令日志
python main.py contour \
--cad datasets/CAD/11.step \
--pointcloud datasets/Noise_PointCloud/11_noisy.ply \
--excel-output 11_contour.xlsx \
--no-visualize > vis/11_contour.log 2>&1
内存不足或显存不足
优先调小:
--point-chunk-size 512
--triangle-chunk-size 1024
如果 CAD 三角面过多,也可以增大:
--mesh-deflection 0.5
注意:mesh_deflection 越大,CAD 三角化越粗,速度更快但几何近似更粗。
如果内存错误发生在批量合并完整背景点云阶段,并且使用的是 datasets/train/train_2_1T_配准.ply,请确认命令包含 --no-visualize。保存合并 PLY 已支持流式写入;Open3D 窗口展示仍不适合 10 亿点背景点云。
11. 排错
No module named OCC
说明 CAD 依赖未安装或当前 Python 环境不对。
conda activate High-Speed
conda env update -n High-Speed -f environment.yml
pythonocc-core 无法通过 pip 安装
这是正常情况。pythonocc-core 应通过 conda 安装,不要放进纯 pip 安装流程里。
找不到文件
检查当前工作目录是否为项目根目录。相对路径都按当前运行目录解析。
推荐:
pwd
python main.py --help
Windows PowerShell 下可以使用:
Get-Location
python main.py --help
Open3D 可视化窗口影响自动化运行
加 --no-visualize。
python main.py contour --cad datasets/CAD/11.step --pointcloud datasets/PointCloud/11.ply --no-visualize
结果距离明显不合理
重点检查:
- CAD 和点云是否同单位。
- CAD 和点云是否已经对齐。
- 是否把干净点云和加噪点云用错目录。
mesh_deflection是否过大导致 CAD 近似过粗。
Excel 没有生成
contour 只有传了 --excel-output 才会生成 Excel:
python main.py contour \
--cad datasets/CAD/11.step \
--pointcloud datasets/Noise_PointCloud/11_noisy.ply \
--excel-output \
--no-visualize
默认输出:
excel/contour.xlsx
默认模板:
excel/测量结果.xlsx
输出表头保持模板一致,程序只更新 测量结果 和 测量结论。
registration 或 contour 很慢
原因通常是点云超过百万点,且距离计算要遍历大量三角面。可以:
- 调小点云规模。
- 调小
--point-chunk-size和--triangle-chunk-size以降低内存压力。 - 增大
--mesh-deflection减少 CAD 三角面数量。 - 对配准增加
--voxel-size做更强下采样。
12. 开发约定
- 面向用户的新功能优先接入
main.py和MeasurementPipeline。 contour是轮廓/平整度/平面度评估的唯一公开入口,不再新增其它容易混淆的同类命令。- 新增输出文件时优先放入已有输出目录:通用可视化和日志放
vis/,表格放excel/,对齐结果放results/。 - 修改根目录源码后,如果需要打包版本同步,运行
python packaging/build_package.py。 - 不要在文档中引入其它同类距离评估命令名,避免和
contour产生歧义。