回放按声明的 30 帧加权空载窗口取基线并逐帧保存外推质量,field 模型单独进缓存键,实时入口拒绝。 新增测试覆盖窗口、质量与拒绝路径。全量门禁的 scene3d 两项失败与 studio 访问冲突为既有问题, 已归因并另立 studio-gate-hang。
4.2 KiB
Studio 回放:场加权实验模型
用途:reference。范围:Studio 回放分析对 SDK field_gain/1(输入 profile
hhd_normal_l1_field/1)的接线、缓存身份、逐帧质量诊断与实时拒绝边界。
格式、完整性、失效键与播放语义分别由replay-analysis.md与
replay-analysis-part-b.md负责;模型语义见
场模型契约,任务范围见
实施计划。
缓存身份
场加权模型是新的分析行为,但不是新的二进制格式。result_key 的 sensor_config 分量在
标定文件实际为 field_gain/1 时追加 ;field-weighted=1;spatial/global 模型与旧结果的键
不变,因此旧回放结果仍能命中。标定内容身份仍来自 schema 3 指纹(含 pipeline.field、
几何与坐标附件),算法版本不因本功能整体升级。
provenance 另存 field 块:profile、strategy、实验来源、baseline_N、
reference_id、参与统计帧数、extrapolated_mean/max 与运行时实际的
hhd.downsample、hhd.grid_shape。缓存键只用标定指纹与配置内容哈希,不用声明值假装实际值;
实际网格只进 provenance。
回放 pass
- 打开链后读
sensor.calibration.input_profile判定模型;field 模型只在显式cal_path下使用,profile 默认文件不假定为实验模型。 - 新模型要求单 segment 录像:加权基线无法在段边界重建,多 segment 直接
ValueError并留下原因,不静默丢基线。 - 空载窗口仍需操作员在分析设置里声明(30 帧);每个 pass 在参考帧
reset之后、该帧process_chain之前调用一次declare_unloaded_reference(reference_id="video-unloaded-<id>")。 SDK 累计连续 30 个有效加权P并取中位数;前 30 帧状态zero_unavailable, 没有牛顿值但保留 raw 读数。不得调用set_calibration_reference传旧 raw 标量零点, 也不得把centroid_found当门槛。 - 第 30 个有效帧后确认
baseline_N已就绪;视频结束仍未就绪沿用现有ValueError语义。 - 逐帧质量取自
sensor.calibration_result.diagnostics:extrapolated_fraction、coverage_fraction、pending_reference_frames、baseline_N、reference_id、model_fingerprint。质量是估计证据,不参与calibration_status,不得因此丢弃牛顿值。
逐帧存储与读取
场加权质量追加在帧记录最后:FRAME_FLAG_FIELD 后接 extrapolated_fraction 与
coverage_fraction 两个 float32,沿用 FRAME_FLAG_FORCE 的追加先例,格式版本不变。
AnalysisReader.frame().field_quality 返回二元组;旧结果没有该 flag 时返回 None,
上层显示“未知”,不得补零或拒绝结果。counts.field_quality_frames 记录带质量帧数。
ForceSample.from_reading 继续只凭 raw 有限性判断 valid;质量缺失或外推比例高低都不改变
有效性。out_of_range 与负的基线差保留数值。
显示与实时拒绝
replay_controller在曲线来源与提示中使用 provenance 的field块:实验模型标签、 加权基线、平均外推比例;缺字段显示未知。中英 locales 成对新增键。- 实时入口未接入该模型:
SdkAcquisitionWorker.start()/FingerAcquisitionWorker.start()与热切换_consume_pending_calibration()在打开设备前检查显式cal_path,遇 schema 3field_gain/1抛可诊断的RuntimeError;由现有运行错误处理显示。calibration_service/实时 UI 若继续重构,保留同一检查函数供调用。
验收与限制
回归见 shared/tests/test_field_calibration_app.py、apps/studio/tests/test_field_experiment_display.py
及扩展现有四件套:窗口只声明一次、前 30 帧无牛顿值、第 30 帧后就绪、无接触仍有效、
多 segment 拒绝、质量 round-trip 与旧结果未知、field 键与 spatial 键不同、实时入口拒绝。
本次不宣称物理精度或在先模型的精度改善;基线窗口是否平稳、外推比例大小都必须随结果如实报告。