Skip to content

Latest commit

 

History

History
89 lines (55 loc) · 7.15 KB

VALIDATION.md

File metadata and controls

89 lines (55 loc) · 7.15 KB

验证记录 — 0.1.0

记录日期:2026-10-08。本页保留首版验证记录,区分真实执行的检查、合成几何测试与未执行项目;下述发布状态描述的是验证当时的状态,仓库当前提交和 CI 状态请查看 GitHub。结构化证据见 validation-summary.json。

执行环境与总体结果

实际环境为 Linux x86_64 / Python 3.13.5。主要依赖:NumPy 2.3.5、SciPy 1.17.0、OpenCV 4.13.0(opencv-python-headless 4.13.0.92)、Pillow 12.3.0、filelock 3.29.0;pytest 9.0.2。

最终自动化测试:57 passed, 2 skipped。两个跳过项均为需要 PyCOLMAP 的可选测试;本机没有安装该依赖。实际执行命令:

python -m pytest -q --junitxml=pytest.xml
python -m compileall -q src scripts
node --check src/recontrail/web/app.js
node --check src/recontrail/web/viewer.js
python scripts/publish.py --dry-run

Python 编译、两个 JavaScript 文件的语法检查和发布 dry-run 均通过。未运行 Ruff,不把编译检查等同于 lint、类型检查或安全审计。测试统计会随着后续平台、编解码器和可选依赖变化,应以实际运行结果为准。

合成照片端到端重建

场景由 demo.py 在本地生成,使用三个不同深度的有纹理平面和 8 个相机位置,图像为 720 × 540。所有纹理和场景均为项目自建,没有复用外部照片或模型。重建读取照片和标定内参,不读取 ground_truth.json 的位姿或表面真值;真值只供测试断言独立核对。

记录配置:最多 2,000 个 SIFT 特征/图,最终优化点预算 1,200,最多 15 次函数评估,CPU lite 后端。

指标 独立保存的一次实际运行
注册照片 8 / 8
优化前候选点 3,203
最终稀疏点 1,199
中位重投影误差 0.173775 像素
95 分位重投影误差 0.498318 像素
优化损失 259.772237 → 102.475768
优化状态 接受,收敛,13 次函数评估
输出尺度 任意尺度

最终 1,199 点来自长轨迹预算子集再次过滤,不是“所有候选点都成功重建”。上述像素误差是缩放/去畸变图像上的观测重投影误差。测试还用已知基线和第一相机位置消除尺度/原点自由度,检查所有相机中心的最大误差小于 0.03 个场景单位,点到最近真值深度平面的中位误差小于 0.03 个场景单位。该简化场景不能证明复杂真实几何精度。

标定双目

取同一合成场景的前两帧,输入正确的双目标定,基线约 0.235666 米,深度上限 15 米,点采样步长为 2。实际结果为 53,735 个彩色点、104,790 个三角面,有效视差像素占比约 55.25%。

测试验证:深度为正且有限、左右一致性过滤有效、点到最近真值深度平面的中位误差小于 0.02 米、OBJ 面索引合法、反向双目输入被拒绝。输出为可见表面的开放网格,不闭合、不补洞、不带 UV 贴图,也不保证测量精度。有效像素占比不是几何准确率。

输入、导出和状态保护

已执行测试覆盖无效配置、损坏/空白图片、EXIF 定向、完全相同像素去重、源文件符号链接、已存在输出拒绝、项目锁、输入内容变化、完成清单被篡改、报告文本转义、PLY/OBJ 结构,以及 COLMAP 文本中所有轨迹和观测的双向一致性。

COLMAP 导出通过项目内独立格式解析器校验;第三方 PyCOLMAP 读取测试在未安装该依赖时跳过,因此不声称已经通过独立 COLMAP 软件导入验证。实际 MJPG 视频帧提取测试通过;其他视频编解码器和可变帧率时间精度未验证。

HTTP 与浏览器的不同验证范围

实际 HTTP / 工作进程链路:通过。 使用本机 HTTP 请求完成创建任务、上传 8 张图、传入内参、启动真实重建子进程、轮询完成和下载报告。另测试取消真实子进程、拒绝无令牌/错误令牌/跨源/错误 Host、拒绝越界路径、无效文件名、损坏与不完整上传、只允许下载明确列出的产物。

报告浏览器交互:通过。 Chromium / Playwright 将真实生成的单文件 HTML 报告作为文档内容打开,检查 8/8 相机显示、实际点云拖动旋转、视角复位、390 像素宽布局无横向溢出,无 JavaScript 页面错误。浏览器仅运行内联报告内容,没有访问外部资产。

完整浏览器上传流程:未完成。 当前运行环境的浏览器策略拒绝导航到 loopback 地址,返回 ERR_BLOCKED_BY_ADMINISTRATOR。未绕过该策略。首页截图只验证静态版式,不代表上传和按钮的浏览器端完整验收;服务器端链路测试与离线报告测试不能替代这项缺失覆盖。

在允许本机网页访问的环境可执行:

python -m pip install -e ".[browser]"
python -m playwright install chromium
python scripts/browser_smoke.py --output ../fresh-browser-check
# 已安装系统 Chromium 时可以追加 --chromium /usr/bin/chromium

脚本使用全新输出目录、自建合成输入和真实服务器,不修改用户照片。运行结果应独立记入维护记录,不能把“脚本已提供”当成“测试已通过”。

安装包验证

已通过 setuptools 的 PEP 517 本地后端成功构建 recontrail-0.1.0-py3-none-any.whl。当前环境的 pip wheel 前端一次执行超时,因此改用同一 setuptools 后端直接构建;不将该次前端超时记为通过。

对生成的 wheel 执行 pip install --no-index --no-deps --target <独立目录>,随后切换到源码目录之外运行,确认导入来自安装目标。再次验证了打包网页资源、HTTP 上传、安装包中的子进程重建和离线报告下载;8/8 张照片注册,输出 1,199 点。

该验证复用了本机已有运行依赖,不是全新无依赖操作系统上的联网安装验证。首次安装所需依赖没有打包进 wheel。Linux/macOS/Windows 启动脚本、可选后端安装、其他 Python 版本的安装和性能,仍应通过实际目标环境验证。

尚未覆盖与计时说明

未完成:真实公开数据集、生产规模、Windows/macOS 实机、GPU、PyCOLMAP 后端与独立读取、完整网页上传交互、第三方安全审计、pip 从空环境联网安装。最初记录时 CI 尚未在远端运行;当前运行结果请查看 GitHub Actions,不要将工作流配置等同于已通过验证。

metrics.json 中 elapsed_seconds 在几何处理后、全部导出完成前记录,不是完整端到端墙钟耗时。单次合成数据处理记录不能作为性能排行。本页不声称普遍成功率、真实物体尺寸精度或相对上游项目的速度优势。

发布脚本只执行过无网络 dry-run 与预检测试,没有创建、修改或推送远端仓库;它不是已完成发布的证据。

上传前复核

2026-10-08 在上传准备目录复跑 python -m pytest -q:57 passed, 2 skipped,耗时 21.05 秒。该复核不改变上文的合成示例数值和浏览器覆盖范围。英文主 README 与中文 README 分别为根目录 README.md 和 README.zh-CN.md。