基于pyqt5和PP-OCR的车辆VIN码识别系统
最近一段实时间在解决一个问题,需要提取车辆上的VIN码,对每个车辆上的VIN码进行识别。刚开始想延续yolov5车牌识别的思路开展,具体流程是利用yolov5模型对每个车辆进行检测,首先先定位到车牌位置,即将每个车辆的车牌检测出来,如下图所示;
其次,再利用opencv进行图片分割,对检测出的车牌进行图像预处理,阈值处理等步骤 ,最终对车牌图片进行分割,将一个车牌图片分割成一个一个的图片,每个图片上都有一个数字或者汉字,如下图所示
切割好后再进行匹配,将每个图片中的字符进行匹配。
最终将实现车牌识别检测功能,能正确输出检测到的车牌号。
一开始想用这种方法,但最近在做飞桨的项目,飞桨开发的PP-OCRv4版本真是太牛了,利用飞桨的paddlepaddle模型去进行训练测试。最终效果出奇的完美。
本次开发基于pyqt5的GUI界面和飞桨的PP-OCR框架模型识别VIN码。通过训练两万张数据集,得到自己的ocr模型,实现了一般场合中对车辆上VIN码的识别。接下来介绍一下我的开发之路和具体的实验效果,结尾附测试的代码链接和demo演示视频。
一、飞桨的PP-OCR框架模型
飞桨的模型训练个人感觉还是比较复杂,特别是自定义数据集这块,因为这次的数据集比较特殊,比较麻烦构造 。接下来我将简单叙述构造数据集 、模型训练这两个重要 部分。
1.1 构造数据集
先介绍 一下数据集的目录分布:
train_data
icdar2015
ch4_test_images
img_1.jpg
...
icdar_c4_train_imgs
img_1.jpg
...
test_icdar2015_label.txt
存放测试标签路径
train_icdar2015_label.txt
存放训练标签 路径
rec
test
img_1.jpg
...
train
img_1.jpg
...
rec_gt_test.txt
rec_gt_train.txt
cls
test
img_1.jpg
...
train
img_1.jpg
...
cls_gt_test.txt
cls_gt_train.txt
自定义数据集目录下有三个主要文件夹icdar2015、rec、cls 分别对应文本检测数据、文本识别数据、文本方向分类器数据。
大体作用就是先能检测到文本的位置,其次能够将文本 识别出来,最后进行文本方向的恢复(具体来说就是文本的位置如果是倾斜或者反转的,能把其恢复成水平)
1.2 训练模型
训练过程比较复杂,需要训练三个模型框架,分别是文本检测模型、文本识别模型、文本方向分类器模型,三个模型训练完毕后,再归一同时使用检测。
建议不要自己训练,使用预训练模型+自己几百张照片训练方式,相关模型部署文件保存在PaddleOCR-main\inference文件夹下,可以自行使用部署。(PaddleOCR-main这个 是主文件,可以在GitHub上面下载)
具体指令不详细说了,比较复杂,我后面总结了一份指令。感兴趣的伙伴也可以自己去官网上查询
1.3 配置环境
众所周知,玩深度学习的前提就是配置环境。本人第一次配置这个飞桨的环境出了很多问题,我是用anaconda配置的,所以迁移起来特别麻烦,可移植性特别差,也可以使用docker容器,这样移植起来比较方便。
我的环境是RTX3060 cuda 11.2版本
配置环境的流程是必须的,不论你是自行训练或者是使用他人代码都需要配置环境
1.安装步骤
步骤一:创建conda虚拟环境 (必须是python3.8以上的环境)
conda create -n VIN_detect python=3.8
步骤二:安装 paddlepaddle
cuda 11.7 对于的下载指令
python -m pip install paddlepaddle-gpu==2.6.1.post117 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html
不同 cuda版本下载不同 的 paddlepaddle ,可以参考以下链接下载
https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/windows-pip.html
步骤三:安装PaddleOCR whl包
pip install "paddleocr>=2.0.1"
步骤四:安装环境包(在我的代码中 会提供)
pip install -r requirements.txt
2.注意事项:
必须安装cuda 和 cudnn
只要环境配置 成功就可以运行相关代码 了。
二、我的项目开发
本系统基于pyqt5和飞桨的PP-OCR框架模型,通过训练两万张数据集,得到自己的ocr模型,实现了一般场合中对车辆上VIN码的识别。
为了简化代码大小,VIN_Detect工程文件中没有训练代码,只保留的pyqt5界面代码和利用训练模型进行检测的代码。
VIN_REC.py:主程序,进行界面显示 + vin检测
text_data:存放测试图片数据 图片数据支持 jpg png jpeg 格式
video_demo:存放测试过程视频
2.1 系统功能
系统主界面图
上传图片
支持单张 或多张 图片 同时上传
默认识别
上传完图片后会默认进行自动识别,识别完成后,以可视化界面查看相关图片和输出的VIN码,并 可以 查看 当前正确率等信息
方案导出
可以将当前检测到的图片 信息 及对应检测到的VIN码同时 导出 到 指定 位置,方便后期查看
主题更换
这是一个简单的跟换界面 主题 颜色风格的选项,可以 自行 设计
2.2 测试demo
综上,基于车辆VIN码识别系统已开发完成,相关检测代码已经测试完成,识别准确率测试后非常高,一般场景可以准确识别,精准排除干扰项。
各位伙伴也可以 直接购买使用我们的代码,不需要自己训练,相关检测代码已经测试完成,直接运行VIN_Detect\VIN_REC.py 文件即可完成任务。
文档已经打包 ,相关目录如下,相关文档说明均已写好,不明白的地方都可以查看 readme.txt文档 。
最后,如果您对源码感兴趣并希望购买,请按照以下步骤操作,我们非常感谢您的支持!
购买流程:
扫描二维码完成支付。
将支付成功的截图发送至邮箱:wwqyjs@163.com。
收到您的邮件后,会将完整源码发送到您的邮箱。
请放心,我们坚持绝对的诚信原则,确保交易的公正!另外欢迎咨询指正,联系邮箱 wwqyjs@163.com