限定 Autocal 首版为 finger 并验证视频采集路径
明确视频与相机共用采集接口、事件和时间基准;补充针对性回归测试。
This commit is contained in:
@@ -1,15 +1,17 @@
|
||||
# Autocal 标定操作与数据格式草稿
|
||||
|
||||
状态:待评审,2026-10-10。用途:方案及操作指南。近期目标是跑通多测点法向采集、保存和离线重算;下列操作是首版目标流程,尚非全部可执行的软件说明。
|
||||
状态:待评审,2026-10-11。用途:方案及操作指南。近期目标只针对 finger 传感器跑通多测点法向采集、保存和离线重算;下列操作是首版目标流程,尚非全部可执行的软件说明。
|
||||
|
||||
## 范围与软件现状
|
||||
|
||||
| 项目 | 当前约定 |
|
||||
|---|---|
|
||||
| 标定范围 | 多测点法向力,暂定 0–30 N;剪切及组合载荷后续再做 |
|
||||
| 传感器 | 首版固定为 finger;其余类型须另行验证几何、采集和处理契约 |
|
||||
| 压头 | 直径 6 mm、球面半径 3 mm 的半球压头 |
|
||||
| 参考 | 砝码或 50 N/2 N·m FT sensor,首版先接通一种 |
|
||||
| 图像 | 一个完整测试事件一个连续视频,档位间不切段 |
|
||||
| 调试输入 | 先用已有视频接通 finger 采集链;实时相机随后复用同一个 worker 和 `SdkPacket` 消费路径 |
|
||||
| 交付 | 单个 session 能重新打开、追溯参考载荷并离线重算 |
|
||||
|
||||
[LF606 规格书](references/lf606-d40-h18-4x-spec.pdf)量程表包含 50 N/2 N·m 档位,但图签为 200 N/8 N·m;实机以铭牌及标定证书核对。
|
||||
@@ -57,7 +59,7 @@
|
||||
|
||||
| 文件 | 主要字段/数据 | 写入时机 |
|
||||
|---|---|---|
|
||||
| `session.json` | `format_version`、`session_id`、身份、配置快照、坐标定义、文件清单、sites、trials、状态 | 会话建立、事件完成及结束时 |
|
||||
| `session.json` | `format_version`、`session_id`、`sensor_type`、`input_source`、身份、配置快照、坐标定义、文件清单、sites、trials、状态 | 会话建立、事件完成及结束时 |
|
||||
| `sequence.oryseq` | 实际使用的测点计划;遵循现有格式 | 开始采集前保存快照 |
|
||||
| `video/<trial_id>.<ext>` | 算法入口图像、完整循环及恢复 | 每 trial 开始至结束 |
|
||||
| `frames.csv` | `session_id`、`trial_id`、`frame_id`、`t_rel_s`、视频路径、段内帧号、丢帧标记 | 每帧 |
|
||||
@@ -71,6 +73,7 @@
|
||||
|---|---|---|
|
||||
| session 身份 | `sensor_sn`、`gel_id`、`bench_id`、`indenter_id`、`reference_source` | 操作员填写或设备读取 |
|
||||
| session 采集 | 分辨率、像素格式、编码、版本、滤波与归零配置 | 软件快照;编码待实测确认 |
|
||||
| 输入来源 | `input_source.kind` 为 `video` 或 `camera`;`value` 分别为视频路径或相机整数编号;视频另存文件哈希 | 传给同一 `FingerAcquisitionWorker.start`;来源文件与 trial 输出视频不可混淆 |
|
||||
| session 时间 | 各流 `clock_id`、时间戳含义、偏移及同步误差 | 软件记录;不能按行号配对 |
|
||||
| site | `site_id`、UV、三维位置、几何关联 | pixel/mm;软件映射 |
|
||||
| trial | `trial_id`、`site_id`、重复编号、姿态、`baseline_id`、视频、起止时间、状态 | 软件分配并记录实际执行 |
|
||||
@@ -79,6 +82,54 @@
|
||||
| step 砝码参考 | 质量、重力加速度、传力方向、有效时段及 `reference_load_n` | kg/m/s²/N;仅在传力条件成立时使用 m×g |
|
||||
| 质量 | `valid`、`invalid_reason`、丢帧/中断状态 | 未知不补零;算法失败不等于图像不可用 |
|
||||
|
||||
视频输入的现有 `SdkPacket.mono_t` 由帧号和配置帧率推算;相机输入使用采集期间的单调时钟。已检查的 DD02 示例视频约 20 fps,而配置为 30 fps;因此现有视频时间不能直接用于物理保持时长或 FT 对齐。P1 须读取来源视频的实际时间基准,核对配置帧率,并在不一致时拒绝时间对齐或明确标记失效。
|
||||
|
||||
两种输入都输出 `frame_id` 和 `raw_frame`,但不能把不同来源的时间戳当成同一物理时钟。离线视频若无同步的 FT/运动记录,只能验证图像链和文件关联。manifest 须保留来源路径、哈希、配置身份、配置/实际帧率及时间基准;正式会话还应保存现场取得的设备身份。
|
||||
|
||||
P0 事件边界如下。`events.csv` 每行至少保存 `event_id`、`trial_id`、可为空的 `step_id`、`event_type`、`t_rel_s`、`clock_id` 和 `reason`。事件只记录已发生的事实,不以 UI 按钮时间冒充到档或写盘完成。P1/P2 用同一 `trial_id` 将视频帧、参考值和事件相连。
|
||||
|
||||
| 事件 | 触发与状态 |
|
||||
|---|---|
|
||||
| `trial_started` | 首帧可用且输出已打开后,trial 进入 `recording` |
|
||||
| `step_reached` | 操作员确认到档或有效反馈确认;记录实际时刻和参考有效性 |
|
||||
| `step_ended` | 本档保持及分析窗口结束,保留实际持续时间 |
|
||||
| `trial_finished` | 视频与索引排空并通过完整性检查后,trial 进入 `complete` |
|
||||
| `trial_aborted` | 输入、写入或操作异常;trial 进入 `incomplete`,保留已写数据及原因 |
|
||||
|
||||
`session` 在所有 trial 完成并检查文件后才进入 `complete`;任何缺失必须保留 `incomplete` 与原因。每次重试使用新的 `trial_id`,不覆盖旧视频。
|
||||
|
||||
以下是目标 `session.json` 的最小示意,供 P1/P2 共用字段;`video/` 是本次 trial 的输出,不是 `input_source` 原文件。例子不代表写入器已经实现。
|
||||
|
||||
```json
|
||||
{
|
||||
"format_version": "0.1-draft",
|
||||
"session_id": "session-001",
|
||||
"sensor_type": "finger",
|
||||
"input_source": {
|
||||
"kind": "video",
|
||||
"value": "D:/samples/finger-input.mp4",
|
||||
"sha256": "<待采集时计算>",
|
||||
"clock_id": "video_frame_rate",
|
||||
"configured_fps": 30.0,
|
||||
"source_fps": 30.0
|
||||
},
|
||||
"config_ref": "config/sensors/finger/sensor.json",
|
||||
"status": "incomplete",
|
||||
"sites": [{"site_id": "site-001", "uv_xy": [120.5, -4.0], "position_sensor_mm": [1.2, 0.8, 3.4]}],
|
||||
"trials": [{
|
||||
"trial_id": "trial-001",
|
||||
"site_id": "site-001",
|
||||
"baseline_id": "baseline-001",
|
||||
"video": "video/trial-001.mp4",
|
||||
"status": "incomplete",
|
||||
"steps": [
|
||||
{"step_id": "step-001", "branch": "load", "target_load_n": 5.0},
|
||||
{"step_id": "step-002", "branch": "unload", "target_load_n": 0.0}
|
||||
]
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
## 软件数据流与责任
|
||||
|
||||
### 当前实际链路
|
||||
@@ -96,7 +147,7 @@
|
||||
|---|---|---|
|
||||
| 1 | 操作员设置 + `.oryseq` → sites/载荷路径 → session 快照 | Autocal 会话与事件控制 |
|
||||
| 2 | UV + 固定映射 → mesh 位置 + 平台姿态 → site/trial | 几何及现有姿态计算能力 |
|
||||
| 3 | 相机 → SDK 采集包 → 视频、帧索引 | 复用 shared 采集与记录能力 |
|
||||
| 3 | 视频路径优先、相机编号随后 → 同一 `FingerAcquisitionWorker` → `SdkPacket` → trial 视频、帧索引 | 复用 shared 采集能力;Autocal 不导入 Studio 的 UI 或控制器 |
|
||||
| 4 | FT/砝码 + 平台反馈 + 档位事件 → 带时间的数据流 | Autocal 参考输入及事件控制;与图像并行 |
|
||||
| 5 | 事件结束 → 完成写入 + 完整性检查 → trial 状态 | 文件记录器及会话控制 |
|
||||
| 6 | 视频解码 + 基准/配置 → SDK 特征重算;时间对齐参考 → 拟合/验证 | 离线处理,结果存 derived |
|
||||
|
||||
Reference in New Issue
Block a user