Yolov5+图像分割+百度AI接口——车牌实时检测识别系统

简介: Yolov5+图像分割+百度AI接口——车牌实时检测识别系统

一、Yolov5介绍

之前有些一篇文章——《Yolov5:强大到你难以想象──新冠疫情下的口罩检测》,详细链接为 :Yolov5:强大到你难以想象──新冠疫情下的口罩检测,里面有对Yolov5的简介,这两天的学习我对Yolov5的了解更加深入,在知网上查阅了不少资料,总结一下:

YOLOv5 算法整体主要有 3 部分组成: BackboneNeck Prediction, 以 YOLOv5s 模型为例整体算法结 构如下所示. Backbone 主要有 Conv, C3 和 SPPF 基 本网络模块组成, 其主要功能就是提取图像特征信息, C3 模块使用残差网络结构, 可以学习到更多的特征信 息, SPPF 模块是空间金字塔池化, 也是 Backbone 网络 的输出端, 主要功能是将提取到的任意大小的特征信 息转换成固定大小的特征向量. Neck 网络采用 FPN+ PAN 的特征金字塔结构网络, 可以实现不同尺寸目标 特征信息的传递, 可以有效解决多尺度问题. Prediction 采用 3 种损失函数分别计算目标分类损失, 目标定位损失和置信度损失, 并通过 NMS 提高网络检测的准确 度. 模型默认输入图像尺寸大小为 640×640的 3 通道图像, 最终输出格式是 3×(5+ncls), ncls 表示目标检测分类 数量。

YOLO 算法从总体上看, 是单阶段端到端的基于 anchor-free 的检测算法. 将图片输入网络进行特征提 取与融合后, 得到检测目标的预测框位置以及类概率. 而 YOLOv5 相较前几代 YOLO 算法, 模型更小、部署 灵活且拥有更好的检测精度和速度, 适合实时目标检 测. YOLOv5 根据模型不同深度和不同特征图宽度划 分为 YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x 四个模型. 其中 YOLOv5s 是最小的模型,本文车牌检测既是用YOLOv5s模型。

二、图像分割

图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法基于区域的分割方法基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像素赋予相同的编号。

主要是用opencv进行矩阵切割,

img = cv2.imread('图片.jpg')

dst = img[num1:num2,num3:num4]  #裁剪坐标为[y0:y1, x0:x1]

我们看一个demo,还记得我们之前写的人脸识别算法吗?我们进行一下改进,之前的效果是:

我们将代码优化一下,不仅要在原图上用红框标记出来,而且要切割出来。代码如下:

1. import cv2 as cv
2. 
3. 
4. def face_detect_demo(img):
5.     img = cv.resize(img, dsize=(800, 800))
6.     gary = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
7.     face_detect = cv.CascadeClassifier("D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml")
8.     face = face_detect.detectMultiScale(gary, 1.004, 28, 0, (40, 40), (50, 50))
9.     count = 1
10. for x, y, w, h in face:
11.         cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 225), thickness=4)
12.         dst = img[y:y + h, x:x + w]
13. # cv.imshow("demo",dst)
14.         cv.imwrite("temp/face_{0}.jpg".format(count), dst)
15.         count += 1
16.     cv.imshow("result", img)
17. # img.save("result.jpg")  # 保存图片
18.     cv.imwrite(r"final_result.jpg", img)
19. 
20. img = cv.imread("photo.jpg")
21. face_detect_demo(img)  # 检测单个图片
22. 
23. while True:
24. if ord("q") == cv.waitKey(1):
25. break
26. cv.destroyAllWindows()

检测结果如下,我们就将所有人脸分割出来啦!

三、百度AI

百度智能云AR开放平台提供领先的AR技术能力与一站式平台工具,开放感知跟踪、人机交互等40+技术能力。它提供了很多技术的接口,比如说人脸识别文字识别语言识别等等。

这次我们通过调用文字识别的接口,用来识别我们本地图片上的文字,详细教程可以看这位博主的:百度AI调接口教程。对了,大家记得领一下百度免费送的优惠,要不然程序运行会报错,别问我怎么知道的,问就是搞了两个半小时总结出来的。这个过程可以理解为调用百度文字识别这个函数,传入本地的一张图片,它可以返回本地图片上的文字。只不过这个函数不是内置的,需要你去配置才能够使用。代码如下:

1. # 测试百度在线图片文本识别包
2. # 导入百度的OCR包
3. 
4. from aip import AipOcr
5. 
6. if __name__ == "__main__":
7. # 此处填入在百度云控制台处获得的appId, apiKey, secretKey的实际值
8.     appId, apiKey, secretKey = ['28509942', 'HbB3GChFwWENkXEI7uCuNG5V', 'IRnFhizLzlXnYFiNoq3VcyLxRHaj2dZU']
9. # 创建ocr对象
10.     ocr = AipOcr(appId, apiKey, secretKey)
11. with open('D:/cartarget/result_1.png', 'rb') as fin:
12.         img = fin.read()
13.         res = ocr.basicGeneral(img)
14. print(res['words_result'][0]['words'])

这里的appId, apiKey, secretKey需要更换成自己的,图片检测的位置也要换成自己的。我是要下载SDK运行的,你们也可以试试别的方法。

四、Yolov5+图片分割+百度AI车牌实时检测识别系统

4.1流程图

Visio浅浅画了一个流程图,用来表达整个项目的逻辑

4.2数据集下载

首先是数据集下载,我用的是CCPD2020的数据集,CCPD2020数据集采集方法应该CCPD2019数据集类似。CCPD2020仅仅有新能源车牌图片,包含不同亮度不同倾斜角度不同天气环境下的车牌。CCPD2020中的图像被拆分为train/val/test数据集,train/val/test数据集中图片数分别为5769/1001/5006。我用的时候取了100张train80张val20张test。CCPD2020数据集(数据大小865.7MB)下载链接我也分享给大家,不用谢!链接:https://pan.baidu.com/s/11IgwwsCjsTRuLOnewx51lw?pwd=5rvf 提取码:5rvf

4.3Yolov5模型训练

然后是Yolov5模型的训练,详细代码还是看之前那篇口罩检测的文章吧,配置文件只要改这几个。

  1. 数据集的配置文件:mask_data.yaml:
  1. 修改train的路径 注意是 /(反斜杠)
  2. 修改val的路径
  3. 修改类别 nc :1、2  names [“标签名称1”、“标签名称2”]  具体几个看你的类别有几个
  1. 模型配置文件: yolov5s.yaml
  1. 修改类别个数 nc:1、2

这里贴上检测数据,由于是用CPU跑的,考虑到时间问题,我这里仅训练了20次,用时在40min左右。

可以看到,识别的精度为80%左右,还是比较可观的,通过增大epoch的值,可以调整成100,识别率达到95%是没有问题的。

4.3PyQt5可视化界面

点击上传图片按钮上传图片,从本地选择一张图片。

再点击开始检测 ,调用训练好的pt模型进行识别。

左边为原图,右边为检测之后的图, 可以看到这辆车的车牌已经被框选出来,做了标记。

4.4opencv切割图片

我自定义了一个split.py,里面只有一个split函数,目的就是为了切割图片,这里是运用了封装思想。在windows.py文件中通过import导入,就可以直接运用这个函数了。以下为split.py文件内容。

1. import cv2 as cv
2. def split(list_1,img,i):
3.     dst = img[int(list_1[1]):int(list_1[3]),int(list_1[0]):int(list_1[2])]  # 裁剪坐标为[y0:y1, x0:x1] xyxy
4.     cv.imwrite("D:/cartarget/result_{0}.png".format(i+1), dst)
5. 
6. 
7. # list_1 =[231,1391,586,1518]
8. # img = cv.imread('train_25.jpg')
9. # split(list_1,img,0)

接着需要对windows.py进行修改,在检测图片detect_img函数中,添加

1.                             tem_list = []
2.                             tem_list.append(int(xyxy[0]))
3.                             tem_list.append(int(xyxy[1]))
4.                             tem_list.append(int(xyxy[2]))
5.                             tem_list.append(int(xyxy[3]))
6. print("准备切割!")
7.                             split.split(tem_list, im0,count_1)
8.                             count_1 += 1
9. print("切割完成!")

这样,Yolov5检测出几个目标,就会调用几次split方法从而切割出来几张子图片,由于这里图片只有一辆车,所有只有一个检测目标,所以只会得到一个车牌。

4.5调用百度AI进行图片检测

这个逻辑就很好理解啦!只要把上面这个图片丢给百度文字识别去识别内容就好啦!

1. if __name__ == "__main__":
2. # 此处填入在百度云控制台处获得的appId, apiKey, secretKey的实际值
3.     appId, apiKey, secretKey = ['28509942', 'HbB3GChFwWENkXEI7uCuNG5V', 'IRnFhizLzlXnYFiNoq3VcyLxRHaj2dZU']
4. # 创建ocr对象
5.     ocr = AipOcr(appId, apiKey, secretKey)
6. with open('name.png', 'rb') as fin:
7.         img = fin.read()
8.         res = ocr.basicGeneral(img)
9. print(res['words_result'][0]['words'])

可以看到识别完全正确!大功告成!

五、总结

这个车牌识别系统到这里就算正式结束啦!感觉收获还是蛮多的,对Yolov5的理解更加深刻,Opencv的运用更加熟练,PyQt5也算是熟悉了。目标检测、图片分割、图像搜索、增强和特效、动作识别等等,慢慢觉得这些功能更像是一个个拼图,想要完成一个较大的工程,需要将一个个小功能拼在一起。

机器学习的路程还很漫长,很多知识我都未曾了解,其中的数学原理更是知之甚少。未来的学习还很漫长,人工智能的领域依然辽阔而精彩。车牌检测这个项目只是一个载体,项目本身并不重要,重要的是项目背后学到的知识,定期总结才能更好的接受知识吧!好啦,今天的分享就到这里啦!


相关文章
|
4天前
|
机器学习/深度学习 人工智能 监控
构建未来:AI在持续学习系统中的应用与挑战
【5月更文挑战第29天】 随着人工智能(AI)技术的飞速发展,机器学习模型正变得愈发复杂和高效。然而,传统的AI系统往往在面对新数据或环境时显得僵化,需要重新训练以适应变化。持续学习系统(Continuous Learning Systems, CLS)旨在解决这一问题,通过使AI模型具备在学习过程中不断适应和进化的能力,以实现长期的知识和技能积累。本文将探讨AI在持续学习系统中的应用,分析其面临的主要挑战,并提出可能的解决方案。我们将重点关注模型的可塑性、灾难性遗忘问题以及数据效率等方面,以期为构建能够自我进化的智能系统提供理论基础和技术指导。
|
1天前
|
机器学习/深度学习 数据采集 人工智能
构建一个基于AI的文本分类系统
【6月更文挑战第1天】构建基于AI的文本分类系统涉及数据预处理、特征提取、模型训练和预测。步骤包括:收集标注文本,进行预处理(清洗、分词、去停用词);使用词袋模型、TF-IDF或词嵌入提取特征;选择并训练模型(如朴素贝叶斯、SVM、CNN等);评估优化模型性能;最后部署模型进行预测,并定期更新维护。未来,关注点将扩展至模型的鲁棒性、可解释性和安全性。
|
3天前
|
人工智能 自然语言处理 安全
构建未来:AI驱动的自适应网络安全防御系统提升软件测试效率:自动化与持续集成的实践之路
【5月更文挑战第30天】 在数字化时代,网络安全已成为维护信息完整性、保障用户隐私和企业持续运营的关键。传统的安全防御手段,如防火墙和入侵检测系统,面对日益复杂的网络攻击已显得力不从心。本文提出了一种基于人工智能(AI)技术的自适应网络安全防御系统,该系统能够实时分析网络流量,自动识别潜在威胁,并动态调整防御策略以应对未知攻击。通过深度学习算法和自然语言处理技术的结合,系统不仅能够提高检测速度和准确性,还能自主学习和适应新型攻击模式,从而显著提升网络安全防御的效率和智能化水平。 【5月更文挑战第30天】 在快速迭代的软件开发周期中,传统的手动测试方法已不再适应现代高效交付的要求。本文探讨了如
|
3天前
|
机器学习/深度学习 传感器 人工智能
构建未来:AI技术在智能交通系统中的应用
【5月更文挑战第30天】 在快速发展的人工智能领域,智能交通系统作为一个高度集成了多种AI技术的应用平台,正在逐步改变我们的出行方式。本文将深入探讨AI技术在智能交通系统中的关键作用,包括实时数据分析、预测模型构建、自动驾驶车辆以及交通管理优化等方面。通过对当前技术的深度分析与未来趋势的展望,文章旨在提供一个全面的视角,理解AI如何塑造交通的未来。
|
3天前
|
机器学习/深度学习 数据采集 人工智能
构建基于AI的自然语言处理系统
【5月更文挑战第30天】本文探讨了构建基于AI的自然语言处理系统的方法,涉及需求分析、数据准备、模型选择、训练与评估、系统部署和持续优化等关键步骤。强调了数据质量和数量对模型性能的影响,选择了深度学习模型如RNN、LSTM和Transformer,并指出系统优化是持续的过程,旨在提升性能和满足用户需求,为AI领域贡献力量。
|
3天前
|
机器学习/深度学习 存储 人工智能
构建未来:AI在持续学习系统中的进化
【5月更文挑战第30天】 随着人工智能(AI)技术的迅猛发展,其在多个领域的应用已经从理论走向了实践。特别是在机器学习领域内,AI系统的持续学习能力成为关键因素,它决定了一个模型能否适应不断变化的环境并持续提升性能。本文将深入探讨AI在持续学习系统中的关键技术,包括记忆增强、转移学习和元学习等,以及这些技术如何帮助AI系统更好地适应新环境,提高决策效率,从而推动AI技术向更加智能化和自适应化方向发展。
|
4天前
|
机器学习/深度学习 人工智能 安全
构建未来:AI驱动的自适应网络安全防御系统
【5月更文挑战第29天】 随着网络攻击手段的不断演变和升级,传统的基于特征的安全防御机制已不再能够有效地应对日益复杂的安全威胁。本文探讨了如何通过集成人工智能(AI)技术来构建一个自适应的网络安全防御系统,该系统能够在不断变化的网络环境中学习、预测并主动防御未知威胁。通过深度学习算法、实时数据分析和自动化响应策略,这种新型系统旨在提高企业级网络安全的智能化水平,减少人为干预,同时提升防御效率和准确性。
|
4天前
|
机器学习/深度学习 人工智能 运维
智能化运维:基于AI的系统异常检测与自动修复策略
【5月更文挑战第29天】 在现代IT基础设施管理领域,智能化运维正逐步成为推动效率和稳定性的关键因素。本文深入探讨了人工智能(AI)技术在系统异常检测和自动化故障修复中的应用,提出了一个集成的智能运维框架。该框架利用机器学习算法分析历史数据,实时监控关键性能指标,并在检测到潜在问题时触发自动化修复流程。通过这一方法,我们旨在降低人工干预的需求,提高系统的可靠性和业务连续性。
|
5天前
|
机器学习/深度学习 数据采集 人工智能
构建未来:AI在持续学习系统中的进化之路
【5月更文挑战第28天】 随着人工智能(AI)技术的迅猛发展,机器学习模型正变得越来越复杂,对计算资源的需求也随之增长。本文将探讨AI技术在设计自我优化、资源高效的持续学习系统方面的最新进展。我们将重点讨论如何通过先进的算法优化、硬件加速和数据管理策略来提高模型的训练效率和准确性。此外,文中还将分析这些技术如何帮助AI系统适应动态环境,并实现长期的自主学习和决策能力。
|
5天前
|
机器学习/深度学习 人工智能 算法
构建一个基于AI的语音识别系统:技术深度解析与实战指南
【5月更文挑战第28天】本文深入探讨了构建基于AI的语音识别系统,涵盖基本原理、关键技术及实战指南。关键步骤包括语音信号预处理、特征提取、声学模型、语言模型和解码器。深度学习在声学和语言模型中发挥关键作用,如RNN、LSTM和Transformer。实战部分涉及数据收集、预处理、模型训练、解码器实现及系统评估。通过本文,读者可了解构建语音识别系统的基本流程和技巧。