feat: add mask tool

This commit is contained in:
zmv
2026-09-30 17:04:29 +08:00
parent f87e5aad40
commit 4eff3825be
30 changed files with 895 additions and 226 deletions
+22 -2
View File
@@ -24,6 +24,26 @@ sha256sum -c SHA256SUMS
bin/drivers 中 GMSL 模块对应内核 5.10.120-tegra。初始化脚本检查内核版本;加载模块需要 root 或现有 sudo 权限。
门区保留当前室内联调设置,door.calibration_verified=false。
## Door mask 标注工具
停止正在占用摄像头的推理程序后运行:
```bash
./annotate_door_mask.sh --camera --output config/door_masks/driver-side.json
```
左键添加多边形顶点,右键或 `U` 撤销,`R` 清空,`S` 或 Enter 保存,Esc 或 `Q` 取消。工具输出 x-anylabeling JSON 及同目录参考 JPEG。
已有图像和视频模式不会打开摄像头:
```bash
./annotate_door_mask.sh --image /path/to/frame.jpg --output config/door_masks/driver-side.json
./annotate_door_mask.sh --video /path/to/video.mp4 --output config/door_masks/driver-side.json
./annotate_door_mask.sh --video /path/to/video.mp4 --frame 244 --output config/door_masks/driver-side.json
```
视频未指定 `--frame` 时先通过滑块或 `A/D`、`J/L` 选择参考帧;帧号从 0 开始。
## 可选保存(默认全部关闭)
三个独立参数可以单独使用,也可以组合:
@@ -54,10 +74,10 @@ bin/drivers 中 GMSL 模块对应内核 5.10.120-tegra。初始化脚本检查
## CAN 状态与发送接口
实时运行默认仅接收 USBCANFD CH0(500 kbps / 2 Mbps)。预览新增 `0x391` 的 LF/RF/LR/RR 四门实际位置反馈原始值,仅显示 CH0,并标记新鲜度和收发计数。`--no-can` 可关闭;设备缺失不停止推理。`config/camera.json` 的 `can.termination` 控制终端电阻,默认沿用参考工程的开启设置。
实时运行默认从 USBCANFD CH0 接收、从 CH1 发送(两个通道均为 500 kbps / 2 Mbps)。预览显示 `0x391` 的 LF/RF/LR/RR 四门实际位置反馈原始值,仅显示 CH0,并标记新鲜度和收发计数。`--no-can` 可关闭;设备缺失不停止推理。`config/camera.json` 的 `can.termination` 同时控制两个通道的终端电阻,默认沿用参考工程的开启设置。
`lib/` 包含 SDK 与 libusb 及其 SONAME 链接。回灌使用录制的 CAN 快照,不访问总线;旧会话显示 NOT_RECORDED。按需发送通过 C++ `CameraPipeline::sendCan()`,参数与完整示例见工程 README。
每个新的实时推理结果提交到后台 CAN 发送线程,仅在 CH0 发送一帧标准 CAN `0x1F6`,长度 8 字节:首字节高、低四位同时填写相同风险值,`clear` 时各为 0,其余状态(包括 `unavailable`)各为 1,即首字节为 `0x00` 或 `0x11`,后七字节清零。CH1 不初始化、不收发。发送等待不阻塞推理,最多保留一个待发结果,忙时由最新结果替换;发送失败计入 TX 错误。无新结果时不重发,`--no-can` 和视频回灌禁用发送。停止时清空待发结果,等待正在执行的 SDK 调用结束后释放设备。
首个实时推理风险状态发送一次,此后仅在二值风险变化时,由后台线程在 CH1 发送一帧标准 CAN `0x1F6`,长度 8 字节:首字节高、低四位同时填写相同风险值,`clear`、`watch` 和 `unavailable` 时各为 0,`warning`、`danger` 及未知状态各为 1,即首字节为 `0x00` 或 `0x11`,后七字节清零。CH0 仅接收,CH1 仅发送。发送等待不阻塞推理,最多保留一个待发结果,忙时由最新结果替换;发送失败计入 TX 错误。仅在报文编码 0 与 1 之间变化时触发发送,相同编码的等级切换不重发。状态不变及发送失败时均不自动重试,等待新的二值变化。等待期间回到正在发送的状态会取消冗余待发报文。`--no-can` 和视频回灌禁用发送。停止时清空待发结果,等待正在执行的 SDK 调用结束后释放设备。
USB-CAN 首次接入如出现权限不足,运行 `./scripts/enable_can_access.sh`(需要 sudo,运行用户属于 plugdev),仅为 `3068:0009` 适配器安装设备访问规则。