CommonLibraries/实施记录.md

79 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 目标测光曝光控制模块实施记录
## 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 步长/全局中央区和状态隔离。安装消费工程直接调用新接口。
当前验证命令由交付辅助脚本执行并记录:
```powershell
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` 包,中文说明和可运行模拟调用示例。
## 验证结果
实际执行命令(也由交付门禁执行并记录):
```powershell
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 将库接入指定业务工程,为实际工况设置曝光范围、经验曝光和预测模型前提;真实相机验证属于后续单独授权的接入工作。