74 lines
2.9 KiB
Markdown
74 lines
2.9 KiB
Markdown
# Vision Anti-Pinch
|
||
|
||
C++ / TensorRT 实时摄像头风险推理,算法来自最新 run_risk.py。
|
||
持续取图、推理并更新内存中的 FrameResult;可视化可选。
|
||
|
||
## Orin 直接运行
|
||
|
||
适用环境:Jetson AGX Orin、JetPack 5.1.2 / L4T R35.4.1、CUDA 11.4、TensorRT 8.5.2、OpenCV 4.5.4。
|
||
仓库已包含该板端编译的程序和重新构建的 TensorRT 引擎。
|
||
|
||
```bash
|
||
git clone https://git.kendeji.fun/zmv/vision-anti-pinch.git
|
||
cd vision-anti-pinch/orin
|
||
./scripts/initialize_camera.sh # 开机后初始化 /dev/video5 摄像头链路
|
||
./run.sh # 持续推理,结果只保存在内存
|
||
```
|
||
|
||
可选板端本地可视化:
|
||
|
||
```bash
|
||
./run.sh --visualize
|
||
```
|
||
|
||
Ctrl+C / SIGTERM 停止程序。
|
||
关闭预览窗口或按 q/Esc 只关闭预览,推理继续。
|
||
|
||
摄像头为 /dev/video5,1920×1536 UYVY,30 FPS。
|
||
当前 door mask 是指定的 constant_door_mask.json 副本,标定状态为 false;装车后应更换与实际画面匹配的门区并更新标定状态。
|
||
|
||
## 下游获取结果
|
||
|
||
main.cpp 注释中也包含以下示例。下游通过自己的调用位置或线程读取:
|
||
|
||
```cpp
|
||
auto result = pipeline.latest();
|
||
if (result) {
|
||
const auto& risk = result->risk;
|
||
const auto& people = result->persons;
|
||
// result->frame_index / track_ids / boxes
|
||
// result->image / door_mask_pixels / capture / timing
|
||
// people[i].selected / smoothed / temporal:各 133 个关键点
|
||
}
|
||
```
|
||
|
||
latest() 返回 shared_ptr<const FrameResult>;首帧尚未完成时为空。
|
||
公共定义位于 include/camera_pipeline.hpp 和 include/frame_result.hpp。
|
||
|
||
## 从源码构建
|
||
|
||
```bash
|
||
./scripts/build.sh
|
||
./scripts/initialize_camera.sh
|
||
./run_camera.sh
|
||
```
|
||
|
||
源码构建要求 CMake 3.24+、CUDA/NPP、TensorRT 和 OpenCV 开发依赖。
|
||
构建脚本会优先使用 Orin 上已有的 ~/miniconda3/envs/yolo/bin/cmake。
|
||
源码配置直接使用 orin/engines/ 中的板端引擎。该引擎仅适用于上述 Orin 环境;仓库不包含 ONNX 或模型转换脚本。
|
||
独立库目标为 camera_risk_core;可视化在 camera_risk_visualizer。
|
||
|
||
## 目录
|
||
|
||
- src/、include/:采集、推理、结果变量及可选绘制。
|
||
- config/:源码构建程序的配置和固定门区。
|
||
- scripts/:构建和摄像头初始化脚本。
|
||
- orin/:已编译程序、TensorRT 引擎、配置、当前 GMSL 驱动及启动脚本。
|
||
- third_party/:nlohmann JSON 及其许可证。
|
||
|
||
NPP 用于 UYVY 转换、YOLO 缩放填充、RTMW 仿射裁剪;CUDA 用于通道转换与归一化。
|
||
风险几何计算仍包含 CPU/OpenCV 操作;算法内部的临时 JSON 对象只在内存中使用。
|
||
|
||
当前摄像头驱动启动时偶发首帧 ERROR,应用会丢弃并计数;持续错误、采集超时或推理错误会明确报错并退出。
|
||
现有 GMSL 驱动停止采集时可产生 videobuf2 缓冲区告警,v4l2-ctl 同样复现;需在驱动侧完成量产修复和验证。
|