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

lpr camera

使用VideoPipe做车牌识别相机(LPR Camera).

提前准备

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

主要文件

  1. plate_recognize_pipeline.cpp 运行VideoPipe管道读取车牌视频,检测+识别车牌(一级推理),并将牌识结果以Socket/UDP的方式发送给车牌识别后台服务。
  2. plate_recognize_server.py 后台服务接收车牌识别结果,存入数据库,并提供一个基于 flask 的Web UI界面供数据查询。
  3. clean.sh 帮助清空当前workspace下面的所有缓存数据。

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

如何使用

  1. CMake编译 plate_recognize_pipeline.cpp 生成二进制可执行文件并运行,它会检测并识别车牌。 (编译之前请先修改代码中 des_iprtmp推流地址)
  2. 运行 python3 plate_recognize_server.py 脚本, 然后打开浏览器访问 http://server-ip:9696 查看牌识记录。 (运行前,请先修改脚本中 bind_iplive_stream_0的值)

数据流向

  1. [pipeline -> license plate results -> send via socket]
  2. [receive license plate results -> display 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/udp或者直接从摄像机Sensor抓图。
  2. layer_2 完成车牌检测&识别,创建 vp_frame_target 对象,利用 vp_frame_target.primary_label 存储车牌颜色和车牌号码。注意这里用的是一级推理模式,直接从大图中检测车牌,不是先检测车辆、再抠图去检测车牌的二级推理方式。
  3. layer_3 完成车牌跟踪,更新 vp_frame_targettrack_idtracks,避免重复提交的问题。
  4. layer_4 完成数据转发,将管道中的车牌识别结果(vp_frame_target.primary_label 存储车牌颜色和车牌号码)按自定义格式,以Socket/UDP的方式发送给Python后台服务。
  5. layer_5 完成结果绘制,主要是将当前画面中的车牌结果(vp_frame_target.primary_label)绘制出来。
  6. layer_6
    • screen_des_0 负责GUI输出显示,显示基本无延时。
    • rtmp_des_0 负责rtmp编码推流,Web UI通过rtmp地址可以实时播放,有若干秒延时。

重要知识点

  1. 如何避免车牌数据重复提交?
  2. 认识VideoPipe一级推理二级推理的区别?VideoPipe仓库中包含2种车牌检测的节点,可用于不同场景。
  3. vp_frame_target 一般用来表示目标检测算法的输出结果,如何适用于车牌检测&识别这种先检测、后识别于一体的场景?
  4. 浏览器如何播放 VideoPipe 管道推送的rtmp实时流?
  5. 直接从摄像机Sensor抓图有哪些优势?

Sample运行截图

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