Files
vision-anti-pinch/orin

Orin 惰性推理运行包(C++)

相机每次等待默认 2 秒,连续 6 次超时才退出(约 12 秒);有效帧恢复后重新计数。Ctrl+C / SIGTERM 主动停止不需要等待 6 次超时。

在 JetPack 5.1.2 / TensorRT 8.5 / CUDA 11.4 / OpenCV 4.5 环境执行:

./scripts/initialize_camera.sh  # 摄像头未初始化时
./run.sh
./run.sh --visualize           # 可选窗口

build/camera_risk 为 ARM64 ELF 程序,无 Python 运行依赖。

CAN 0x391 的 data[0..3] 为左前、右前、左后、右后百分比。左前或左后开度 <15% 且正在增加或减小时推理;其余有效 CAN 状态暂停。CAN 缺失或超时 1000 ms 时推理,恢复后重新判断。

模型只加载预热一次并常驻;相机和 CAN 始终运行。重复相同开度保留运动方向 300 ms,之后视为静止。参数见 config/camera.json 的 lazy_inference。默认结果保存在 C++ 内存,不写逐帧文件;暂停时 latest() 为空。标准输出记录启停状态与累计模型运行次数。

文件完整性:sha256sum -c SHA256SUMS。

可选保存(默认全部关闭)

三个独立参数可以单独使用,也可以组合:

./run.sh --save-original --save-annotated --save-results

开启任一项时,程序自动创建可执行文件所属工程的 output/ 及三个子目录:

  • original/:--save-original 保存未叠加的原图,JPEG 质量 95。
  • annotated/:--save-annotated 保存带框、关键点及风险文字的 JPEG,无需开启可视化窗口。
  • results/:--save-results 每个完成推理的帧保存一个 JSON,包含帧号、检测框、跟踪 ID、关键点及置信度、风险和耗时;有 CAN 的分支还包含相应状态。

同一帧三类文件同名(扩展名不同),文件名包含运行标识和帧号,多次运行不覆盖。JSON 的 images 提供相对于 output/ 的图片路径,未选择保存的图片为 null。源码入口写入工程 output/;独立包入口写入 orin/output/。默认不创建目录、不保存文件。

保存对象是完成推理的帧;惰性分支暂停时不新增文件。开启保存会增加编码和磁盘 I/O 开销。写入失败时报告错误并停止,不静默丢失文件。