实时车牌检测:利用 YOLOv8 算法对摄像头捕获的画面实时检测车牌。通过YOLO训练出车牌模型 用于检测车牌在画面中的区域、车牌类型(如蓝色车牌:油车;绿色车牌:新能源车)
车牌号码识别:通过车牌号码识别算法(PaddleOCR算法/HyperLPR3算法)对检测区域进行字符分割与序列识别,实现车牌号码的识别。YOLO 车牌识别模型用于检测车牌区域,中文车牌号码识别算法 用于识别车牌字符,二者协同实现车牌识别任务 。
自动计费结算:根据车牌号码匹配车辆进出记录,自动计算停车时长与费用,联动闸机实现自动抬杆/落杆。
基于YOLO的停车场计费装置(车牌识别)
本项目是通过YOLO目标检测算法,使用车牌数据集,加载预训练YOLOv8s模型,训练出车牌识别模型。再结合车牌号码识别算法实现车牌号提取,进而记录进出停车场的车辆并完成自动计费。
常见的车牌号码识别算法有以下:
下图是我们的项目制作框架图,我们在电脑端完成模型的训练与测试,将模型部署到智能硬件——行空板M10中完成车牌识别同时显示车牌号,并制作出停车场计费装置。
(基于YOLO的车牌识别停车场计费装置项目框架图)
(YOLO项目框架图,供参考)
3.1软硬件器材清单
注意行空板M10固件在0.3.5——0.4.0的版本均可以用于制作本项目,但都需要为行空板装conda环境,详情见3.3硬件环境准备。
3.2软件环境准备
由于我们使用电脑进行训练货物位置检测模型,因此需要在电脑端安装相应的库。
首先按下win+R,输入cmd进入窗口。
在命令行窗口中依次输入以下指令,安装ultralytics库
输入之后会出现以下页面。
当命令运行完成,出现以下截图表示安装成功。
3.3硬件环境准备
在本项目中我们将要将训练好的YOLOv8框架的模型部署到行空板中,进行推理和执行操作。为了在行空板上成功运行YOLOv8,我们将使用Ultralytics官方提供的库进行部署 。
使用USB数据线连接行空板与电脑,等待行空板屏幕亮起表示行空板开机成功。
打开编程软件Mind+,点击左下角的扩展,在官方库中找到行空板库点击加载
点击返回,点击连接设备,找到10.1.2.3.点击连接,等待连接成功.
除了utralytics库本项目还需要使用onnx、onnxruntime、opencv -python 和pinpong库依次在Mind+终端输入以下命令
在Mind+终端输入以下指令,可以检查相应库是否安装成功
在Mind+终端输入以下指令,可以检查相应库是否安装成功
4.1数据集准备:
4.1.1采集图片
本文使用的数据集一共包含10881张车牌数据(详情见文档末尾附件)。部分图片如下:
解释:
省份:[“皖”, “沪”, “津”, “渝”, “冀”, “晋”, “蒙”, “辽”, “吉”, “黑”, “苏”, “浙”, “京”, “闽”, “赣”, “鲁”, “豫”, “鄂”, “湘”, “粤”, “桂”, “琼”, “川”, “贵”, “云”, “藏”, “陕”, “甘”, “青”, “宁”, “新”] 地市:[‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘P’, ‘Q’, ‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’,‘X’, ‘Y’, ‘Z’] 车牌字典:[‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘P’, ‘Q’, ‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’, ‘X’,‘Y’, ‘Z’, ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’] 4.1.2生成数据标注 目标:将 CCPD 数据集中图片文件名中解析出的车牌位置和车牌颜色等信息,转换成 YOLO 格式的标注文件(.txt)。 功能:通过代码解析文件名,并将标注信息保存到txt文件中。 注意:在自己电脑运行时,代码中的文件路径均需改为自己电脑端路径。
省份:[“皖”, “沪”, “津”, “渝”, “冀”, “晋”, “蒙”, “辽”, “吉”, “黑”, “苏”, “浙”, “京”, “闽”, “赣”, “鲁”, “豫”, “鄂”, “湘”, “粤”, “桂”, “琼”, “川”, “贵”, “云”, “藏”, “陕”, “甘”, “青”, “宁”, “新”]
地市:[‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘P’, ‘Q’, ‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’,‘X’, ‘Y’, ‘Z’]
车牌字典:[‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘P’, ‘Q’, ‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’, ‘X’,‘Y’, ‘Z’, ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’]
目标:将 CCPD 数据集中图片文件名中解析出的车牌位置和车牌颜色等信息,转换成 YOLO 格式的标注文件(.txt)。
功能:通过代码解析文件名,并将标注信息保存到txt文件中。
注意:在自己电脑运行时,代码中的文件路径均需改为自己电脑端路径。
在mind+中运行上面这段代码,制作完成之后如下图所示:
说明:testlabels是训练集标注信息文件,vallabels是验证集标注信息文件,testlables是测试集标注信息文件。
4.1.3划分训练集和验证集
根据前面标注信息文件,把相应的图片及标注文件放到训练集和验证集文件夹内:
4.2车牌识别模型训练
将文件放到一个能找到的路径,打开Mind+,选择Python模式下的代码模式,如下图。
在右侧“文件系统”中找到"电脑中的文件",找到此文件夹进行添加。
添加好后可以观察到如此下图。
点击"新建文件夹",在ultralytics文件夹中分别新建三个文件夹,依次命名为"datasets"(用于存放数据集),"yamls"(用于存放数据集对应的yaml文件)"runs"(用于存放训练模型的py文件)。
建好后如下图。
将车牌检测数据集的训练集和验证集文件夹放入"datasets"文件夹,将车牌检测数据集的yaml文件放入"yamls"文件夹。
完成之后文件夹是以下布局:
车牌检测数据集的yaml文件如下(0是蓝牌,1是绿牌):
YOLO模型的训练对电脑的配置要求比较高,使用电脑CPU一般训练时间较长,可以考虑使用GPU或者云端算力进行训练,这里我们使用的时本地电脑的CPU训练方法,操作比较简单,耗时略长。当训练完成后,我们可以观察"runs"文件夹中自动生成了"detect"文件夹,里面存放了训练模型的数据和训练好的模型文件。
4.3车牌识别模型测评
我们先在电脑端测试一下车牌识别模型的性能,这里使用pt模型,也可以使用onnx模型(需转换)。
4.3.1测试车牌识别模型检测效果
点击Mind+右上角的”运行",程序里面可以选择不同类型车牌验证,运行代码观察效果。
蓝牌检测效果:
观察终端信息,可以看到车牌数量、车牌类别、各阶段耗时等信息。
绿牌检测效果:
观察终端信息,可以看到车牌数量、车牌类别、各阶段耗时等信息。
打印下results的值,信息如下:
其中boxes里的值可以重点了解:
boxes值详细信息解释:
运行程序,可以发现一个窗口实时显示摄像头捕捉画面,并实时显示当前车牌类别和置信度等信息。
运行程序,可以发现一个窗口实时显示摄像头捕捉画面,并实时显示当前车牌类别和置信度等信息。
4.3.2提取车牌号并显示
接下来我们在车牌识别的基础上需要使用把车牌号识别出来,并且标写在图片上:
1、安装paddlepaddle库和paddleocr库,在mind+库管理里面输入库名安装。
效果如下图(可看到图片上的车牌号被提取并显示):
终端显示信息:
运行程序,可以发现一个窗口实时显示摄像头捕捉画面,并实时显示当前车牌号。
终端显示信息(有车牌号码和置信度等信息):
接着我们可以部署模型到行空板中制作车牌识别的停车场计费装置。使用USB数据线连接电脑与行空板。
连接行空板与摄像头。
打开编程软件Mind+,点击左下角的扩展,在官方库中找到行空板库点击加载
点击返回,点击连接设备,找到10.1.2.3点击连接,等待连接成功。
保持行空板的连接,在终端输入以下指令来激活行空板的yolo环境(请确保完成3.2硬件环境部署准备)。
在运行程序之前,需要先安装hyperlpr3库,在yolo环境下输入:pip install hyperlpr3,点击回车等待安装完成。
运行成功后,可以实现以下功能:
进入停车场:调整摄像头角度直到正对着车牌,然后按下P23按钮进行识别,识别成功之后图片会显示"车牌号和欢迎进入停车场",语音播报"欢迎进入停车场"同时闸机打开,闸机打开2秒后关闭。
离开停车场:调整摄像头角度直到正对着车牌,然后按下P21按钮进行识别,识别成功之后图片会显示"车牌号和停车时间、需缴费用",语音播报"停车时间和需缴费用"同时闸机打开,闸机打开2秒后关闭。
终端显示信息:
4.5核心代码解析
1.使用以下代码完成加载模型、摄像头初始化、硬件初始化。
2.以下代码的功能是设置车牌保存路径、计时函数、计费函数。
2.以下代码的功能是设置车牌保存路径、计时函数、计费函数。
results详细信息解释:
我们可以观察到原始的推理输出有比较多的内容,在项目的制作中不是每一个输出数据都要用到,其中本项目最常用的数据是"names"和"boxes"。names: 提供类别ID到类别名称的映射,用于将检测结果转换为人类可读的类别名称。boxes:检测结果列表,含所有检测框的坐标、类别、置信度。
完整代码如下所示:
项目扩展思考:后续可以使用更多样化的车牌数据集(包含不同的字体、颜色、位置、光照条件等)以提升模型的泛化能力。还可以集成停车位检测系统,为车主推荐最近的空闲停车位。集成多种支付方式(如二维码支付、NFC支付、银行卡支付)。最后是将识别数据上传至云端进行存储和管理,方便后续分析和运营优化。