编辑 | blame | 历史 | 原始文档

vehicle behaviour analysis

使用VideoPipe做车辆行为分析(交通事件检测,计数/停车)。

提前准备

  1. 已准备好 VideoPipe 编译/运行环境(参见视频教程)
  2. 已准备好本案例所需的测试模型和测试数据(即 vp_data,具体参见视频教程)
  3. 已安装好本案例中 Python3 所需的依赖库(主要是numpy,pandas,opencv,flask,faiss等,其余按需安装即可)

主要文件

  1. vehicle_ba_pipeline.cpp 运行VideoPipe管道,读取视频文件,并进行车辆检测、跟踪、行为分析(跨线/停止),最后将结果通过Socket/UDP发送给后台服务。
  2. vehicle_ba_server.py 接收行为分析结果并写入数据库,并提供一个基于 flask 的Web UI供数据查询。
  3. clean.sh 帮助清空当前workspace下面的所有缓存数据。

![](./docs/1.png)

如何使用

  1. CMake编译 vehicle_ba_pipeline.cpp 生成二进制文件并运行, 它会生成行为分析结果。 (编译之前请先修改代码中 des_ip 的值)
  2. 运行 python3 vehicle_ba_server.py 接收行为分析结果,然后打开浏览器访问 http://server-ip:7878 浏览行为分析结果. (运行前,请先修改 bind_ip , live_stream_0 以及 live_stream_1 的值)

数据流向

  1. [pipeline -> BA results and other related data -> send via socket]
  2. [receive BA data -> display BA results from web]
please run `sh clean.sh` if you want to restart sample from scratch.

VideoPipe管道介绍

![](./vp_analysis_board.png)

  1. layer_1 模拟获取车辆监控视频,实际可以换成rtsp/rtmp/udp/视频监控平台,或者直接从摄像机Sensor抓图。注意这里同时接入2个通道(channel_index 从0开始)。
  2. layer_2 完成车辆检测,从大图中定位车辆位置,创建 vp_frame_target 对象,初始化它们的primary_class_id/primary_label/primary_score。
  3. layer_3 完成车辆颜色分类,基于前面检测结果完成车辆颜色分类(二级推理),更新 vp_frame_target 的 secondary_labels/secondary_class_ids/secondary_scores。
  4. layer_4 完成车辆车型分类,基于前面检测结果完成车辆车型分类(二级推理),更新 vp_frame_target 的 secondary_labels/secondary_class_ids/secondary_scores。
  5. layer_5 完成车辆目标跟踪,基于SORT算法完成车辆目标跟踪,更新 vp_frame_target 的track_id、tracks。
  6. layer_6 完成跨线/计数判断,基于tracks和BA配置参数,完成跨线逻辑判断,创建 vp_ba_result 对象。
  7. layer_7 完成停止/停车判断,基于tracks和BA配置参数,完成停止逻辑判断,创建 vp_ba_result 对象。
  8. layer_8 完成数据代理,将管道中的BA行为分析结果(vp_ba_result)按自定义格式,以Socket/UDP方式转发给Python后台服务。
  9. layer_9 完成跨线结果绘制,将计数判断结果(vp_ba_result)绘制到帧上。
  10. layer_10 完成停止结果绘制,将停车判断结果(vp_ba_result)绘制到帧上。
  11. layer_11 完成录制工作,接收前面BA节点发出的录制指令(vp_image_record_control_meta/vp_video_record_control_meta),完成截图和录像功能。
  12. layer_12 完成管道拆分工作,基于channel_index拆分管道,通道index相同的帧数据流向同一个分支。
  13. layer_13 占位节点。
  14. layer_14
    • screen_des_0 负责第1通道的GUI输出显示,显示基本无延时。
    • rtmp_des_0 负责第1通道rtmp编码推流,Web UI通过rtmp地址可以实时播放,有若干秒延时。
    • screen_des_1 负责第2通道的GUI输出显示,显示基本无延时。
    • rtmp_des_1 负责第2通道rtmp编码推流,Web UI通过rtmp地址可以实时播放,有若干秒延时。

重要知识点

  1. 通道合并的工作原理。
  2. 跨线、停止判断逻辑。
  3. 截图、录像工作原理。
  4. vp_split_node 类型工作原理。

Sample运行截图

计数(跨线) && 停车(停止)

![](../../doc/p48.png)