基于 YOLO11-OBB 与 LPRNet ONNX 的车牌定位识别桌面系统实践
在车牌识别项目中,常见方案通常分为两个阶段:车牌定位和车牌字符识别。传统水平框检测模型在面对倾斜车牌、旋转车牌、摄像头角度偏移等情况时,容易出现裁剪区域不准的问题,进而影响后续 OCR 识别效果。为了解决这一问题,本工程 lpr_onnx_gui_project_fixed.zip 采用 YOLO11-OBB 旋转框检测模型进行车牌定位,再结合 LPRNet/CRNN ONNX 识别模型完成车牌字符识别,最终通过 PyQt5 构建一个完整的桌面可视化系统。
一、项目整体介绍
这是一个面向实际部署的车牌定位识别工程。系统不再依赖 PyTorch 模型结构,而是统一使用 ONNX 模型进行推理。这样做的好处是部署更轻量、环境更简单,也更方便后续封装成独立程序。
工程主要包含两个模型:
plate_obb.onnx# YOLO11-OBB 车牌定位模型lprnet.onnx# LPRNet/CRNN 车牌识别模型系统运行流程如下:
输入图片 ↓ YOLO11-OBB 检测车牌旋转框 ↓ 解析旋转框四点坐标 ↓ 透视矫正车牌区域 ↓ LPRNet/CRNN ONNX 识别字符 ↓ CTC 解码输出车牌号 ↓ 界面显示检测框、裁剪图、识别结果和置信度相比普通 YOLO 水平框检测,OBB 旋转框可以更准确地贴合车牌区域,特别适合车牌存在倾斜、旋转、透视变形的场景。
二、为什么使用 YOLO11-OBB 做车牌定位
车牌在实际图像中很少是完全水平的。尤其是在道路监控、停车场、出入口闸机、移动设备拍摄等场景中,车牌经常会出现明显倾斜。如果仍然使用普通水平矩形框进行裁剪,往往会把大量背景区域一起裁进去,甚至裁掉车牌边缘。
YOLO11-OBB 的优势在于它输出的是旋转框,也就是:
中心点 x 中心点 y 宽度 w 高度 h 旋转角 angle或者最终恢复成四个角点:
左上角 右上角 右下角 左下角这样系统就可以根据四点坐标准确进行透视变换,将倾斜车牌矫正成水平车牌图,再送入识别模型。这个步骤对于提高 OCR 识别率非常关键。
三、车牌识别模型的 ONNX 后处理
本工程中的识别模型采用 LPRNet/CRNN 结构,模型输出一般是类似下面的张量:
[B,C,T]其中:
B=batch size C=字符类别数 T=时间步长度模型本身并不会直接输出最终字符串,而是输出每个时间步对应不同字符的概率分布。因此工程中实现了完整的 CTC 解码流程:
1.对 logits 做 softmax2.每个时间步取概率最大的字符索引3.去掉 blank4.去掉连续重复字符5.根据字符表映射成车牌字符串例如模型原始预测序列可能是:
京 京-A A112-3经过 CTC 解码后得到:
京A123这也是车牌识别模型中非常常见的后处理方式。
四、与 CCPD 数据处理流程保持一致
在训练阶段,CCPD 数据集通常通过文件名解析出车牌四点坐标和车牌号码。训练检测模型时,会将四点坐标转换为 YOLO OBB 标签;训练 OCR 模型时,会根据四点坐标对车牌进行透视矫正,生成单独的车牌小图。
本工程的推理流程与训练流程保持一致:
训练阶段: 原图四点标注 → 透视矫正 → OCR 训练图 推理阶段: YOLO OBB 检测四点 → 透视矫正 → OCR 识别这种一致性非常重要。如果训练时识别模型看到的是矫正后的车牌图,而推理时直接送入倾斜裁剪图,那么识别效果往往会明显下降。本工程通过 crop_plate_by_points() 函数完成四点透视矫正,保证推理输入尽量接近训练输入。
五、专业化 PyQt5 界面设计
除了算法流程,工程还提供了一个完整的桌面界面。界面主要包含以下模块:
界面使用后台线程执行推理,避免模型运行时界面卡死。用户可以加载图片后直接点击“开始识别”,系统会自动完成定位、裁剪、识别和结果绘制。
识别完成后,系统会在原图上绘制:
旋转框 四个角点 车牌识别结果 检测置信度 识别置信度这对于调试模型效果非常直观。
调用显示如图:
六、ONNXRuntime 部署优势
工程使用 ONNXRuntime 作为统一推理后端,带来了几个明显优势:
第一,部署环境更轻量。运行时不再需要安装完整 PyTorch,也不需要保留训练模型结构代码。
第二,跨平台能力更好。ONNXRuntime 支持 Windows、Linux 等平台,也支持 CPU 和 GPU 推理。
第三,工程集成更方便。后续如果要封装成 exe,或者集成到其他桌面软件、服务端系统中,ONNX 模型都比 PyTorch .pth 文件更适合部署。
第四,模型接口更稳定。只要输入输出保持一致,就可以替换不同版本的检测模型或识别模型。
七、双方向识别提升鲁棒性
在实际检测中,即使 OBB 定位正确,透视矫正后的车牌也可能出现 180 度倒置的问题。为了解决这个问题,工程中加入了双方向识别策略:
原始裁剪图识别一次 旋转180度后再识别一次 比较两个结果置信度 选择更可靠的识别结果这种方式实现简单,但对实际场景很有效,尤其是在角度不稳定或四点顺序存在波动时,可以提升整体识别鲁棒性。
八、适用场景
该工程适用于多种车牌识别场景,例如:
停车场出入口车牌识别 道路监控图像分析 车牌识别算法演示 CCPD 数据集训练模型验证 ONNX 模型部署测试 车牌识别产品原型开发同时,由于工程已经将检测、识别、后处理、界面展示进行了完整串联,因此也可以作为后续项目二次开发的基础版本。
总结
这是一个比较完整的车牌定位识别桌面工程。它不仅完成了 YOLO11-OBB 与 LPRNet/CRNN 两个 ONNX 模型的串联,还实现了旋转框后处理、透视矫正、CTC 解码、结果绘制、置信度显示和专业化 PyQt5 界面。
相比简单的模型推理脚本,这个工程更接近真实项目中的部署形态。它解决了从模型输出到最终业务结果之间的一整套问题,包括坐标还原、旋转框解析、车牌裁剪、字符解码、中文显示、界面交互和异常提示。对于希望将车牌识别模型落地到实际软件中的开发者来说,这个工程具有较强的参考价值和二次开发价值。
工程链接:https://download.csdn.net/download/weixin_45776000/92868991?spm=1011.2124.3001.6210
