开源基于jetson NX的流式车牌识别系统 C++方案 yolo26n+CRNN
·
项目地址:
https://gitee.com/ff94315/jetson_nx_lpr_framework
演示视频:
https://www.bilibili.com/video/BV1EF3E6LEux/
车牌识别服务 开发说明书
适配平台:Jetson NX / RK3576
核心算法:YOLO26n-OBB(旋转车牌检测)+ CRNN(字符识别)
数据流框架:GStreamer 硬解码 + 两级环形缓冲池
关键特性:原始帧不覆盖、camera_id 全链路透传、低延迟、高可用、双平台通用
目录
文档概述
整体架构
模块功能说明
数据结构定义
核心机制说明
双平台适配方案
输出标准格式
服务特性
术语说明
- 文档概述
本说明书定义面向嵌入式平台的车牌识别服务整体设计方案。 服务支持多路摄像头接入,采用 RTSP+HTTP 双链路冗余、两级环形缓冲池异步解耦、YOLO26n-OBB 旋转框检测+CRNN 识别,可 7×24 小时稳定运行。
核心目标:
保证原始帧不被环形缓冲池覆盖
摄像头 ID 全链路透传,可精准溯源
双平台一套架构,无业务侵入
低延迟、零拷贝、高稳定性
- 整体架构
┌───────────────────────────────────────────────────────────┐
└─────────────────────────────┬─────────────────────────────┘IPC 摄像头集群复制
┌───────────────────────┴───────────────────────┐│复制
│ │
┌─────▼─────────────┐ ┌─────────▼───────────┐
│ RTSP 视频流(主) │ │ HTTP 抓图(备) │
└─────┬─────────────┘ └─────────┬───────────┘
│ │
┌─────▼─────────────┐ ┌─────────▼───────────┐
│ GStreamer 硬解码 │ │ 图像采集服务 │
│ Jetson:NVDEC │ │ (兜底补流) │
│ RK3576:RKMPP │ └─────────┬───────────┘
└─────┬─────────────┘ │
│ 【帧携带标签】 │
│ camera_id + 时间戳 + 帧序号 + 原始帧 │
└──────────────────┬─────────────────────────────┘
┌────────────────────────▼────────────────────────┐│复制
│ 一级环形缓冲池(帧缓冲池) │
│ 作用:解耦解码与检测,共享指针,原始帧不覆盖 │
└──────────────────┬────────────────────────────────┘
┌──────────────────▼────────────────────────┐│复制
│ YOLO26n-OBB 旋转车牌检测 │
│ 输出:四点旋转坐标 (x1,y1,x2,y2,x3,y3,x4,y4) │
└──────────────────┬────────────────────────┘
┌──────────────────▼────────────────────────┐│复制
│ 二级环形缓冲池(车牌缓冲池) │
│ 携带:原始帧 + camera_id + 旋转坐标 + 时间戳 │
└──────────────────┬────────────────────────┘
┌──────────────────▼────────────────────────┐│复制
│ CRNN 车牌识别(带透视矫正) │
└──────────────────┬────────────────────────┘
┌──────────────────▼────────────────────────┐│复制
│ 统一结果输出模块 │
│ 原始帧 + 摄像头ID + 旋转坐标 + 识别结果 │
└───────────────────────────────────────────┘ - 模块功能说明
3.1 摄像头接入模块
支持多路 IPC 摄像头同时接入
主链路:RTSP 实时视频流(低延迟、硬解码)
备链路:HTTP 定时抓图(主链路断流时兜底)
每帧强制绑定:camera_id、时间戳、帧序号
3.2 GStreamer 硬解码模块
双平台原生硬件解码
Jetson NX:nvv4l2decoder + NVMM 零拷贝
RK3576:rkvpudec + RGA 硬件加速
输出格式:BGRx / NV12
解码后直接送入一级缓冲池,无内存拷贝
3.3 一级环形缓冲池(帧缓冲池)
生产者:GStreamer 解码线程、HTTP 采集线程
消费者:YOLO26n-OBB 检测线程
存储单元:std::shared_ptr<帧对象>
核心职责:
解耦解码与检测速度
削峰填谷,防止阻塞
保证原始帧不被覆盖
透传信息:原始帧、camera_id、时间戳、帧序号
3.4 YOLO26n-OBB 检测模块
功能:旋转/倾斜车牌检测
输出:四点旋转坐标(x1,y1,x2,y2,x3,y3,x4,y4)
不修改原始帧,仅附加检测结果
输出至二级环形缓冲池
3.5 二级环形缓冲池(车牌缓冲池)
生产者:YOLO 检测线程
消费者:CRNN 识别线程
作用:解耦检测与识别速度,避免丢帧
携带信息:原始帧、camera_id、旋转坐标、置信度
3.6 CRNN 识别模块
输入:原始帧 + 四点旋转框
流程:透视变换 → 车牌矫正 → 字符识别
输出:车牌号 + 识别置信度
3.7 统一输出模块
输出标准化结构
支持日志、上报、存储、显示
保证原始帧独立、可溯源、不被覆盖 - 数据结构定义
4.1 帧结构(缓冲池单元)
帧对象
├─ 原始图像数据指针(共享内存)
├─ 图像宽度 / 高度 / 行步长
├─ camera_id:摄像头唯一标识
├─ timestamp:时间戳
├─ frame_id:帧序号
└─ 引用计数:生命周期管理
4.2 检测结果结构(YOLO26n-OBB)
车牌检测结果
├─ 四点旋转坐标:x1,y1,x2,y2,x3,y3,x4,y4
├─ 检测置信度
├─ 所属帧 camera_id
└─ 所属帧时间戳
4.3 最终输出结构
识别结果
├─ 原始图像帧(独立生命周期,不覆盖)
├─ camera_id
├─ 四点旋转坐标
├─ 车牌号码
├─ 检测置信度
├─ 识别置信度
├─ 时间戳
└─ 帧序号 - 核心机制说明
5.1 原始帧不被覆盖机制
环形缓冲池只存储智能指针,不存储裸内存
帧生命周期由 std::shared_ptr 统一管理
缓冲池覆写 = 替换槽位指针,不修改帧数据
只要检测/识别/输出模块持有指针,帧数据永久安全
全链路零拷贝,原始帧从解码到输出永不改变
5.2 camera_id 全链路透传
生成时机:采集/解码阶段绑定
透传路径: 解码 → 一级缓冲池 → 检测 → 二级缓冲池 → 识别 → 输出
作用:多路摄像头数据不乱序、可精准溯源
5.3 双平台通用机制
上层业务架构 100% 通用
仅底层硬件解码器不同
推理引擎自动适配:TensorRT / RKNN
数据结构、缓冲池、输出格式完全一致 - 双平台适配方案
Jetson NX
解码:GStreamer + nvv4l2decoder
内存:NVMM 硬件显存
推理:YOLO26n-OBB + CRNN → TensorRT
RK3576
解码:GStreamer + rkvpudec
内存:RGA 硬件内存
推理:YOLO26n-OBB + CRNN → RKNN - 输出标准格式
每帧最终输出必须包含:
原始图像帧(未修改、不覆盖)
来源摄像头 camera_id
车牌四点旋转坐标 x1,y1,x2,y2,x3,y3,x4,y4
车牌识别字符串
检测置信度 + 识别置信度
时间戳、帧序号
- 服务特性
低延迟:硬解码 + 零拷贝 + 异步缓冲
高可用:RTSP 主链路 + HTTP 备链路
防覆盖:共享指针 + 环形池安全机制
高精度:OBB 旋转框检测 + 矫正识别
可扩展:支持多路摄像头、多线程推理
跨平台:一套代码兼容 Jetson/RK3576 - 术语说明
OBB:Oriented Bounding Box,旋转包围盒
GStreamer:跨平台硬件编解码框架
环形缓冲池:固定长度异步队列,用于模块解耦
零拷贝:帧数据不做内存复制,直接传递指针
透传:数据从源头到输出不修改、不丢失
更多推荐



所有评论(0)