# vision-2d-mesure **Repository Path**: q2918007/vision-2d-mesure ## Basic Information - **Project Name**: vision-2d-mesure - **Description**: 2d 视觉尺寸检测项目 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-15 - **Last Updated**: 2026-10-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 工业视觉零件尺寸测量系统 基于远心镜头 + 背光成像的金属片状工件 2D 尺寸测量方案,包含需求分析、详细设计、算法验证、UI/UX 设计以及可运行的 Python 验证代码。 --- ## 项目简介 本项目面向金属片状工件的高精度尺寸测量场景,目标精度 **±0.01 mm**,节拍 **500~600 ms**。系统采用 JSON 配置驱动的测量任务流程,可在 Windows 工控机(WPF + .NET + OpenCV/C++)上运行。 当前仓库以**算法验证与文档**为主,已完成功能原型: - 亚像素边缘检测(灰度重心法) - 基于 X/Y 轴参考边的原点定位 - 坐标标准化(绕原点旋转校正) - 点、线、宽度、距离、角度测量 - JSON 驱动的测量引擎 - 多任务综合 OK/NG 判定 - NG 样件判定测试 - 模板匹配 + 仿射变换定位 - 相机标定算子(棋盘格/圆点阵) - WPF 上位机 Shell 与实时检测页(基础框架) --- ## 目录结构 ``` vision-2d-mesure/ ├── docs/ # 项目文档 │ ├── requirements_analysis_report_v1.0.md # 需求分析报告 │ ├── detailed_design_document_v2.0.md # 详细设计文档 │ ├── hardware_procurement_cost_assessment_v1.0.md # 硬件采购成本评估 │ ├── core_algorithm_validation_plan_v1.0.md # 核心算法验证方案 │ ├── measurement_task_type_design_v1.0.md # 测量任务类型与 JSON 配置设计 │ ├── initial_image_analysis_report_v1.0.md # 真实图像初步分析报告 │ └── ui_ux_design_v1.0.md # UI/UX 设计文档 │ ├── images/ # 真实采集图像 │ ├── org_001.bmp # 原始相机采集图(5472×3648) │ └── obj_001.bmp # 手动截取目标图(1518×985,含 ROI/轴线标记) │ ├── validation/ # 算法验证代码、配置与数据 │ ├── configs/ # JSON 测量配置 │ │ ├── measurement_config_v1.json │ │ └── measurement_config_v2.json │ ├── src/ # 核心算法与测量引擎 │ │ ├── core_algorithms.py │ │ └── measurement_engine.py │ ├── scripts/ # 辅助分析脚本 │ │ ├── analyze_markers.py │ │ └── validate_template_match.py │ ├── data/ # 真实图像与标定板数据 │ │ ├── real_parts/ │ │ │ └── obj_001_no_markers.bmp │ │ └── calibration/ │ └── output/ # 运行结果(被 .gitignore 忽略) │ ├── src/ # C# 生产代码(.NET 9 WPF / 类库) │ ├── Vision2DMeasure.Core/ │ ├── Vision2DMeasure.Measurement/ # 测量算子(含模板匹配、标定算子) │ ├── Vision2DMeasure.Configuration/ │ ├── Vision2DMeasure.Acquisition/ │ ├── Vision2DMeasure.Communication/ │ ├── Vision2DMeasure.Storage/ │ ├── Vision2DMeasure.MainControl/ │ ├── Vision2DMeasure.UI/ # WPF 上位机界面 │ └── Vision2DMeasure.Host/ ├── tests/ # C# 单元测试与集成测试 ├── Vision2DMeasure.sln # Visual Studio 解决方案 └── README.md # 本文件 ``` --- ## 环境准备 已创建 Python 虚拟环境并安装依赖: ```bash # 激活虚拟环境 .venv\Scripts\activate # Windows source .venv/bin/activate # Linux/macOS ``` 依赖包: - `opencv-python` - `numpy` - `matplotlib` - `scipy` - `pytest` --- ## 快速运行 ### 1. 运行 v1 配置(基础测量) ```bash .venv/bin/python validation/src/measurement_engine.py validation/configs/measurement_config_v1.json ``` ### 2. 运行 v2 配置(扩展任务类型) ```bash .venv/bin/python validation/src/measurement_engine.py validation/configs/measurement_config_v2.json ``` ### 3. 运行模板匹配 + 仿射变换验证 ```bash .venv/bin/python validation/scripts/validate_template_match.py ``` 运行后输出匹配中心、旋转角、对齐 NCC 分数,并保存 `template_match_template.bmp`、`template_match_aligned.bmp`、`template_match_diff.bmp` 到 `validation/output/`。 ### 4. 运行相机标定验证 ```bash .venv/bin/python - <<'PY' from pathlib import Path from validation.scripts.validate_camera_calibration import calibrate_from_image_paths images = sorted(Path('validation/data/calibration').glob('checkerboard_8x5_*.bmp')) report = calibrate_from_image_paths( image_paths=[str(p) for p in images], pattern_width=7, pattern_height=4, square_size_mm=0.5, ) print(report) PY ``` ### 5. 运行性能与稳定性测试 ```bash .venv/bin/python validation/scripts/run_performance_stability_test.py \ --config validation/configs/measurement_config_v2.json \ --iterations 1000 \ --output-dir validation/reports ``` 报告保存至 `validation/reports/performance_stability_report_*.json` 与 `.txt`。 ### 6. 运行重复精度 / GRR 测试 ```bash .venv/bin/python validation/scripts/run_repeatability_test.py \ --config validation/configs/measurement_config_v2.json \ --samples 30 \ --output-dir validation/reports ``` 报告保存至 `validation/reports/repeatability_report_*.json` 与 `.txt`。 ### 7. 运行全部单元测试 ```bash # Python .venv/bin/pytest validation/tests/ -q # C# dotnet test Vision2DMeasure.sln ``` 运行后结果保存至 `validation/output/measurement_report.json`,可视化结果图也保存到同一目录。 --- ## 验证结果摘要 ### v2 配置实测结果 | 任务 | 测量值 | 标称值 | 偏差 | 结果 | |------|--------|--------|------|------| | 原点定位 | `(209.25, 1073.14)` | — | 夹角 `89.62°` | ✅ OK | | 坐标标准化 | 旋转 `0.010°` | — | — | ✅ OK | | 右上顶点 X | `1.014 mm` | `0.98 mm` | `+0.034 mm` | ✅ OK | | 右下顶点 X | `1.332 mm` | `1.33 mm` | `+0.002 mm` | ✅ OK | | 上边缘 Y | `-4.873 mm` | `-4.89 mm` | `+0.017 mm` | ✅ OK | | 下边缘 Y | `2.050 mm` | `2.08 mm` | `-0.030 mm` | ✅ OK | | 右边缘 X | `3.296 mm` | `3.296 mm` | `≈0 mm` | ✅ OK | | 大孔宽度 | `0.381 mm` | `0.42 mm` | `-0.039 mm` | ✅ OK | | 大孔高度 | `0.958 mm` | `0.958 mm` | `≈0 mm` | ✅ OK | | 两孔中心距 | `0.222 mm` | `0.222 mm` | `+0.0003 mm` | ✅ OK | | 左下槽宽 | `0.496 mm` | `0.48 mm` | `+0.016 mm` | ✅ OK | | 上边缘夹角 | `1.18°` | `0°` | `+1.18°` | ✅ OK | | **综合判定** | — | — | — | **✅ 整体 OK** | - **总耗时**: `≈144 ms` - **图像**: `obj_001_no_markers.bmp`(已去除 ROI/轴线标记) - **像素尺寸**: `0.00468 mm/pixel` > 注:v2 配置中的标称值按当前单张图像几何校准,用于验证测量链路;真实产线中应由计量工具或 CAD 给定。 --- ## 核心文件说明 | 文件 | 说明 | |------|------| | `validation/src/core_algorithms.py` | 亚像素边缘检测、直线拟合、原点定位、点/宽度/距离/角度测量算法 | | `validation/src/measurement_engine.py` | JSON 配置驱动的测量引擎,负责任务调度、结果汇总与报告输出 | | `validation/configs/measurement_config_v2.json` | 扩展任务类型综合测量配置 | | `validation/scripts/analyze_markers.py` | 解析 `obj_001.bmp` 中的 ROI/轴线标记并生成可视化 | | `docs/measurement_task_type_design_v1.0.md` | 任务类型定义、JSON 配置规范、实测结果 | | `validation/scripts/validate_template_match.py` | 模板匹配 + 仿射变换验证脚本 | | `validation/scripts/validate_camera_calibration.py` | 相机标定验证脚本 | | `docs/ui_ux_design_v2.0.md` | WPF 客户端 UI/UX 设计规范(含布局、对话框、配色、快捷键) | --- ## 下一步工作 1. **替换真实标称值**:当前 v2 配置的标称值按图像几何校准,需由计量/CAD 给定。 2. **真实标定板图像采集**:用实际棋盘格/圆点阵标定板替换合成图像,验证像素尺寸。 --- ## 许可证 本项目采用 [MIT License](LICENSE)。 --- ## 贡献者 - **HBAI** <2918007@qq.com>