基于 YOLO11-OBB 与 LPRNet ONNX 的车牌定位识别桌面系统实践

在车牌识别项目中,常见方案通常分为两个阶段:车牌定位和车牌字符识别。传统水平框检测模型在面对倾斜车牌、旋转车牌、摄像头角度偏移等情况时,容易出现裁剪区域不准的问题,进而影响后续 OCR 识别效果。为了解决这一问题,本工程 lpr_onnx_gui_project_fixed.zip 采用 YOLO11-OBB 旋转框检测模型进行车牌定位,再结合 LPRNet/CRNN ONNX 识别模型完成车牌字符识别,最终通过 PyQt5 构建一个完整的桌面可视化系统。

一、项目整体介绍

这是一个面向实际部署的车牌定位识别工程。系统不再依赖 PyTorch 模型结构,而是统一使用 ONNX 模型进行推理。这样做的好处是部署更轻量、环境更简单,也更方便后续封装成独立程序。

工程主要包含两个模型:

python 复制代码
plate_obb.onnx    # YOLO11-OBB 车牌定位模型
lprnet.onnx       # LPRNet/CRNN 车牌识别模型

系统运行流程如下:

python 复制代码
输入图片
  ↓
YOLO11-OBB 检测车牌旋转框
  ↓
解析旋转框四点坐标
  ↓
透视矫正车牌区域
  ↓
LPRNet/CRNN ONNX 识别字符
  ↓
CTC 解码输出车牌号
  ↓
界面显示检测框、裁剪图、识别结果和置信度

相比普通 YOLO 水平框检测,OBB 旋转框可以更准确地贴合车牌区域,特别适合车牌存在倾斜、旋转、透视变形的场景。

二、为什么使用 YOLO11-OBB 做车牌定位

车牌在实际图像中很少是完全水平的。尤其是在道路监控、停车场、出入口闸机、移动设备拍摄等场景中,车牌经常会出现明显倾斜。如果仍然使用普通水平矩形框进行裁剪,往往会把大量背景区域一起裁进去,甚至裁掉车牌边缘。

YOLO11-OBB 的优势在于它输出的是旋转框,也就是:

python 复制代码
中心点 x
中心点 y
宽度 w
高度 h
旋转角 angle

或者最终恢复成四个角点:

python 复制代码
左上角
右上角
右下角
左下角

这样系统就可以根据四点坐标准确进行透视变换,将倾斜车牌矫正成水平车牌图,再送入识别模型。这个步骤对于提高 OCR 识别率非常关键。

三、车牌识别模型的 ONNX 后处理

本工程中的识别模型采用 LPRNet/CRNN 结构,模型输出一般是类似下面的张量:

python 复制代码
[B, C, T]

其中:

python 复制代码
B = batch size
C = 字符类别数
T = 时间步长度

模型本身并不会直接输出最终字符串,而是输出每个时间步对应不同字符的概率分布。因此工程中实现了完整的 CTC 解码流程:

python 复制代码
1. 对 logits 做 softmax
2. 每个时间步取概率最大的字符索引
3. 去掉 blank
4. 去掉连续重复字符
5. 根据字符表映射成车牌字符串

例如模型原始预测序列可能是:

python 复制代码
京 京 - A A 1 1 2 - 3

经过 CTC 解码后得到:

python 复制代码
京A123

这也是车牌识别模型中非常常见的后处理方式。

四、与 CCPD 数据处理流程保持一致

在训练阶段,CCPD 数据集通常通过文件名解析出车牌四点坐标和车牌号码。训练检测模型时,会将四点坐标转换为 YOLO OBB 标签;训练 OCR 模型时,会根据四点坐标对车牌进行透视矫正,生成单独的车牌小图。

本工程的推理流程与训练流程保持一致:

python 复制代码
训练阶段:
原图四点标注 → 透视矫正 → OCR 训练图

推理阶段:
YOLO OBB 检测四点 → 透视矫正 → OCR 识别

这种一致性非常重要。如果训练时识别模型看到的是矫正后的车牌图,而推理时直接送入倾斜裁剪图,那么识别效果往往会明显下降。本工程通过 crop_plate_by_points() 函数完成四点透视矫正,保证推理输入尽量接近训练输入。

五、专业化 PyQt5 界面设计

除了算法流程,工程还提供了一个完整的桌面界面。界面主要包含以下模块:

界面使用后台线程执行推理,避免模型运行时界面卡死。用户可以加载图片后直接点击"开始识别",系统会自动完成定位、裁剪、识别和结果绘制。

识别完成后,系统会在原图上绘制:

python 复制代码
旋转框
四个角点
车牌识别结果
检测置信度
识别置信度

这对于调试模型效果非常直观。

调用显示如图:

六、ONNXRuntime 部署优势

工程使用 ONNXRuntime 作为统一推理后端,带来了几个明显优势:

第一,部署环境更轻量。运行时不再需要安装完整 PyTorch,也不需要保留训练模型结构代码。

第二,跨平台能力更好。ONNXRuntime 支持 Windows、Linux 等平台,也支持 CPU 和 GPU 推理。

第三,工程集成更方便。后续如果要封装成 exe,或者集成到其他桌面软件、服务端系统中,ONNX 模型都比 PyTorch .pth 文件更适合部署。

第四,模型接口更稳定。只要输入输出保持一致,就可以替换不同版本的检测模型或识别模型。

七、双方向识别提升鲁棒性

在实际检测中,即使 OBB 定位正确,透视矫正后的车牌也可能出现 180 度倒置的问题。为了解决这个问题,工程中加入了双方向识别策略:

python 复制代码
原始裁剪图识别一次
旋转 180 度后再识别一次
比较两个结果置信度
选择更可靠的识别结果

这种方式实现简单,但对实际场景很有效,尤其是在角度不稳定或四点顺序存在波动时,可以提升整体识别鲁棒性。

八、适用场景

该工程适用于多种车牌识别场景,例如:

python 复制代码
停车场出入口车牌识别
道路监控图像分析
车牌识别算法演示
CCPD 数据集训练模型验证
ONNX 模型部署测试
车牌识别产品原型开发

同时,由于工程已经将检测、识别、后处理、界面展示进行了完整串联,因此也可以作为后续项目二次开发的基础版本。

总结

这是一个比较完整的车牌定位识别桌面工程。它不仅完成了 YOLO11-OBB 与 LPRNet/CRNN 两个 ONNX 模型的串联,还实现了旋转框后处理、透视矫正、CTC 解码、结果绘制、置信度显示和专业化 PyQt5 界面。

相比简单的模型推理脚本,这个工程更接近真实项目中的部署形态。它解决了从模型输出到最终业务结果之间的一整套问题,包括坐标还原、旋转框解析、车牌裁剪、字符解码、中文显示、界面交互和异常提示。对于希望将车牌识别模型落地到实际软件中的开发者来说,这个工程具有较强的参考价值和二次开发价值。

工程链接:https://download.csdn.net/download/weixin_45776000/92868991?spm=1011.2124.3001.6210

相关推荐
心疼你的一切1 小时前
PyTorch实战:手写数字识别神经网络
人工智能·pytorch·深度学习·神经网络·机器学习
Autumn_ing1 小时前
2026实测:这5款AI生成UI工具支持Shadcn UI/Ant Design组件库
人工智能·ui·设计模式·aigc·设计规范
Mike_6661 小时前
摩尔线程AB100安装torch环境
人工智能·深度学习·ffmpeg·aarch64·摩尔线程·musa
无心水1 小时前
【Hermes:进阶调优与性能优化】41、模型选择策略:OpenRouter 多模型切换与成本优化
人工智能·性能优化·mcp协议·openclaw·养龙虾·hermes·honcho
子午1 小时前
道路车辆检测与计数系统~Python+YOLOV8算法+深度学习+人工智能+Web可视化界面
人工智能·python·yolo
yuanpan1 小时前
Python + Selenium 浏览器自动化测试与网页自动登录
开发语言·python·selenium
周有贵1 小时前
AI视角下广电转型新探索:GEO技术与金鹰卡通初步接洽,解锁传媒AI融合新可能
大数据·人工智能·传媒
2601_957786771 小时前
AI 原生营销矩阵系统:底层安全架构与多模态内容生产技术实现
人工智能·矩阵·安全架构
沪漂阿龙1 小时前
字节跳动大模型面试题深度拆解:项目深挖、SFT 与 RLHF、Claude Code、记忆机制、并发锁与手撕题全攻略
人工智能·面试