5.8 KiB
目标测光曝光控制模块实施记录
2026-09-22 独立测光扩展(1.1.0)
批次 stateless-metering-20260922 配合 MatchVerify 的“采集存档 → 离线灰度统计”接入。库内只增加独立测光能力,没有相机、采图循环、文件读写或曝光控制策略变更;历史 v1 记录保留在下方。
- 新公开
measureImage(image, roi, hasUsableRegion, config),输入为 Gray8/BGR8、最终区域、区域有效标志和可选测光配置。无需控制实例、曝光值、时间戳或拍前检查。 - 新增
Brightness::arithmetic_gray;保留gray为目标截尾均值。普通均值来自截尾前同一直方图,不二次扫描图像。配置校验与控制配置共用,非法配置返回InvalidConfiguration。 - 控制的
processFrame()调用公共测光实现。原控制、预测、历史、恢复逻辑未改动;新测试对照执行控制轨迹,确认插入重复独立测光不改变状态和曝光建议。 - 增加 7 个公开 API 逻辑用例,覆盖已知均值、混合 ROI 并集、无区域/黑图/饱和图、非法输入、非法配置、BGR 步长/全局中央区和状态隔离。安装消费工程直接调用新接口。
当前验证命令由交付辅助脚本执行并记录:
pwsh -NoProfile -File tools/verify.ps1 -BuildRoot E:/05_Temp/TargetExposureControl/capture-metering -OpenCVDir E:/06_EnvConfig/opencv/build/x64/vc16/lib -OpenCVRuntimeDir E:/06_EnvConfig/opencv/build/x64/vc16/bin
验证产物在 E:/05_Temp/TargetExposureControl/capture-metering,其 verification.log 为完整构建/测试/安装消费日志。最终实测结果与当前文件指纹以 .codex/delivery-integrity.json 为准。本批验收仅覆盖离线图像、确定性控制回归及安装接入,不包含实机采集、曝光生效或现场识别率。
原 v1 交付记录
批次:target-exposure-control-v1。实现与自动测试已完成;最终验收状态、实际退出码及当前文件指纹以 .codex/delivery-integrity.json 为准。
用户已批准需求审查稿 A~E。范围为独立 C++17/OpenCV 库、配置、最小示例、中文说明和实际自动测试。三个现有业务库不纳入改动。
本目录原只有需求审查稿,没有 Git 仓库;本批建立独立本地 Git 工作区用于交付指纹,不包含提交或发布动作。
实际验证环境:Windows x64、Visual Studio 2022 Enterprise、MSVC 19.44.35222.0、Windows SDK 10.0.26100.0、OpenCV 4.7.0。构建与安装验证目录为 E:/05_Temp/TargetExposureControl/v1,源码目录不存放编译产物。
验收项及精确验证命令冻结在 .codex/delivery-integrity.json。验证脚本将完成配置、Release 构建、分组 CTest、最小示例、安装,以及只通过安装包引用的独立消费工程构建和测试。
完成交付
- 独立 C++17 静态库,公开三个生命周期接口、强类型配置、ROI 与输出诊断类型。
- Gray8/BGR8 测光,矩形/旋转矩形/mask 并集及截尾统计。
- 基于真实时间、真实曝光及已知黑电平的 3/5 点预测;不足或不适用时回退当前帧反馈。
- 原比例/PI/死区控制器,滞回、连续确认、积分抗饱和及两级限幅。
- 三态状态机、拍照前一次初始化、跨状态的单次恢复预算、重复/乱序反馈拒绝。
- 源码 CMake target 与可安装的
TargetExposureControl::Control包,中文说明和可运行模拟调用示例。
验证结果
实际执行命令(也由交付门禁执行并记录):
pwsh -NoProfile -File tools/verify.ps1 -BuildRoot E:/05_Temp/TargetExposureControl/v1 -OpenCVDir D:/programfile/opencv4.7.0/opencv/build
| 验证项 | 已观测结果 |
|---|---|
| MSVC x64 Release 库、测试与示例构建 | 成功 |
| 测光 | 9/9 用例通过 |
| 历史 | 4/4 用例通过 |
| 预测与参与控制 | 5/5 用例通过 |
| 控制器 | 6/6 用例通过 |
| 三态 | 4/4 用例通过 |
| 单次恢复 | 5/5 用例通过 |
| 时间与初始化 | 6/6 用例通过 |
| 新反馈及幂等 | 5/5 用例通过 |
| 配置与实例隔离 | 2/2 用例通过 |
| 分组 CTest 与最小示例 | 10/10 通过,包含上述 46 个逻辑用例及 1 个示例 |
| 安装包独立消费工程 | 配置、构建成功,运行测试 1/1 通过 |
预测参与控制的直接证据:当前灰度均为 100、实际曝光均为 1000 us,前两帧趋势分别为 80→90 和 120→110。在相同控制参数(Kp=0.4、Ki=0、连续确认=1)下,下一拍预测分别为 110 和 90;曝光建议分别为 1000 us 和约 1094.915254 us。关闭预测后,两组均为约 1061.016949 us。自动测试校验了这些具体数值,而不只检查预测字段存在。
最初配置失败的原因是 OpenCV 4.7 Windows 包顶层分发脚本不识别本机较新 MSVC;验证脚本改为使用已存在的 x64/vc16/lib/OpenCVConfig.cmake 后成功。未修改或重装依赖。首次编译的测试角度隐式转换警告已通过显式浮点常量修正。
输出位置
- 当前完整验证日志:
E:/05_Temp/TargetExposureControl/v1/verification.log。 - 库与示例:
E:/05_Temp/TargetExposureControl/v1/library/Release/。 - 可复用安装包:
E:/05_Temp/TargetExposureControl/v1/install/。 - 独立消费工程:
E:/05_Temp/TargetExposureControl/v1/consumer/。 - 源码接入说明:
README.md;控制数学及状态语义:docs/控制与状态说明.md。
本批没有连接真实相机,未验证实际曝光设置、真实成像变化或现场识别率;未宣称完成现场验收。示例曝光范围与参数仅为可运行演示值。
本批没有剩余代码验收项。使用方下一步可按 README 将库接入指定业务工程,为实际工况设置曝光范围、经验曝光和预测模型前提;真实相机验证属于后续单独授权的接入工作。