人工智能及Python应用 课件 第13章 人工智能+交通应用_第1页
人工智能及Python应用 课件 第13章 人工智能+交通应用_第2页
人工智能及Python应用 课件 第13章 人工智能+交通应用_第3页
人工智能及Python应用 课件 第13章 人工智能+交通应用_第4页
人工智能及Python应用 课件 第13章 人工智能+交通应用_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

人工智能及Python应用第13章人工智能+交通应用

1项目导入2职业能力目标3知能达标4

素养提升5视野拓展6项目评价目录1项目导入返回主目录某公司研发部近期接到一个高速公路车辆智能监控项目,利用在高速公路的监测点,使用车辆检测和车牌识别技术,自动记录通过车辆的信息,实现交通流量分析和违规车辆车牌抓拍,提高道路使用效率并增强道路安全。假设你是该部门的一名员工,请按照进度和工作要求完成此项目。2职业能力目标返回主目录职业技能类别职业能力要求人工智能工程师(HCIA-AI)v掌握目标检测基本原理v理解OCR识别典型应用人工智能训练师(四级)v了解业务分析及其优化方法v会使用YOLO算法和PaddleOCR工具包3知能达标返回主目录计算机视觉技术应用在计算机视觉的广阔领域中,为了推动着智能化应用的发展,衍生出各种细分场景的技术。目标检测是计算机视觉领域一项至关重要的技术,它旨在从图像或视频中自动识别出特定目标的位置和类别,同时解决“是什么?”和“在哪里?”的问题,为图像分析、智能监控、自动驾驶等智能应用提供基础。OCR也是一种计算机视觉技术,是将图像中的文字内容提取为可编辑的数字文本的技术,它能够识别图片中的印刷字体、手写字体,甚至复杂的表格和图形内容,实现从“图像”到“数据”的转换。主要知识点【知能基础】目标检测技术目标检测技术基础目标检测(ObjectDetection)是计算机视觉中最重要和最具挑战性的分支之一,其任务是找出图像或视频中的感兴趣物体,同时检测出它们的位置和大小。目标检测已广泛应用于人们的生活中,例如安防监控、自动驾驶等。

随着用于检测任务的深度学习网络的迅速发展,目标检测算法的性能得到了极大的提高。目前基于深度学习的目标检测算法可分为三大类:两步走(Two-Stage)目标检测、一步走(One-Stage)和基于Transformer的目标检测。(1)两步走(Two-Stage)目标检测:第一步对样本集生成一定数量的候选框,每个候选框大小和位置不同。第二步通过卷积神经网络对每个目标进行分类。代表算法有R-CNN系列(例如R-CNN、FastR-CNN、FasterR-CNN等)。(2)一步走(One-Stage)目标检测:不需要产生候选框,直接对输入图像应用算法并输出类别和相应的位置。代表算法有YOLO系列(如YOLOv1、YOLOv2、YOLOv3等)、SSD(SingleShotMultiBoxDetector)等。(3)基于Transformer的目标检测:近年来,基于Transformer架构的目标检测方法也开始出现,这类方法通常利用Transformer的自注意力机制来处理图像特征。代表算法有DETR(DetectionTransformer)、RT-DETR(Real-TimeDetectionTransformer)等。【知能基础】目标检测技术目标检测技术基础由于各类物体具有不同的外观、形状和姿态,加之成像时光照、遮挡等复杂因素的干扰,目标检测一直是计算机视觉领域最具挑战性的问题之一。目标检测每类算法都有其特定的应用场景和优势,都是在识别的速度和准确率上寻找一个平衡点和或者极端点。两步走目标检测通常在准确性上有优势,一步走目标检测则以速度快著称,而基于Transformer的方法则是目标检测领域的一个新兴方向,正在不断发展中。随着深度学习和计算机视觉的向前发展,既快又准的算法也在逐渐的实现当中。下面以百度AI开放能力平台车辆检测功能为例,如图所示,检测模型的输出是右侧这样一个列表,列表的每一项使用一个数组给出检出目标的类别和位置(常用矩形检测框的坐标表示),可以识别图像中所有车辆的类别和位置。(体验网址:/tech/vehicle/detect)【知能基础】目标检测技术YOLO算法YOLO(YouOnlyLookOnce)是用于实时目标检测的算法,因其高效性和准确性而在计算机视觉领域广受关注,特别适合于需要快速响应的场景,例如视频监控、自动驾驶等。YOLO算法的核心思想是将目标检测任务转化为一个回归问题,通过单个神经网络同时进行目标的定位和分类,实现实时高效的目标检测。(1)网格划分(GridDivision):YOLO算法将输入图像划分为一个固定大小的S×S网格,每个网格负责检测该区域内的目标,例如YOLOv1中,原始图像被划分为7×7的网格。(2)边界框预测(BoundingBoxPrediction):对于每个网格,YOLO算法预测多个边界框(boundingboxes)。这些边界框由中心坐标(x,y)、宽度(w)和高度(h)表示。每个边界框还包含一个置信度分数,用于表示框内是否包含物体及其准确度。(3)物体分类(ObjectClassification):YOLO算法对每个框内可能的物体进行分类,通常使用卷积神经网络(CNN)来提取特征,并通过全连接层进行分类。(4)置信度评估(ConfidenceScore):每个边界框还预测一个置信度分数,表示该边界框中存在物体的概率以及边界框的准确度。(5)非极大值抑制(Non-MaximumSuppression,NMS):为了去除重复的检测结果,YOLO使用非极大值抑制(Non-MaximumSuppression,NMS)算法。NMS会选择具有最高置信度的边界框作为最终检测结果,并剔除与其重叠度较高的其他边界框。【知能基础】目标检测技术YOLO算法YOLO基本原理图YOLO的发展历程从最初的YOLOv1到目前最新的YOLOv11,每一代版本都在特征提取、边界框预测和优化技术等方面引入了重要的创新,算法框架不断优化。序号YOLO算法版本关键特点1YOLOv12016年发布,由JosephRedmon等人开发,是YOLO系列的开山之作。它通过单次前向传播完成图像中所有目标的检测,将图像划分为S×S网格,每个网格预测边界框和类别。YOLOv1在PASCALVOC2007数据集上实现了63.4的mAP。2YOLOv22016年发布,也称为YOLO9000,由JosephRedmon和AliFarhadi共同开发,在YOLOv1的基础上引入了锚点(anchorboxes)和批量归一化,提高了小目标的检测精度。同时,YOLOv2采用了全卷积的网络结构,并在高分辨率图像上进行了微调,增强了对不同大小目标的检测能力。3YOLOv32018年发布,由JosephRedmon和AliFarhadi共同开发,引入Darknet-53作为主干网络,结合残差网络提高检测精度,并进行多尺度预测改善对小物体的检测。4YOLOv42020年发布,由AlexeyBochkovskiy等人开发,提出了BagofFreebies和BagofSpecials优化策略,提高模型精度,并使用CSPDarknet53更高效的主干网络,提升网络推理速度和精度。5YOLOv52020年发布,由GlennJocher等人开发,由Ultralytics公司维护,转向Pytorch框架,便于开发者使用和扩展,自适应的anchorbox学习机制提高检测效率,并提供多种尺寸的预训练模型满足不同场景需求。6YOLOv62022年发布,由美团技术团队开发,针对行业应用优化,尤其注重推理速度,并引入EfficientRep带来更高效的网络架构。7YOLOv72022年发布,该版本由YOLOv4和YOLOR的同一作者开发,提出了模型结构重参化和动态标签分配问题的优化,进一步减少了参数量和计算量。YOLOv7的发布标志着YOLO系列目标检测算法在性能和效率上又迈上了一个新的台阶。8YOLOv82023年发布,由Ultralytics公司开发,基于YOLOv5的成功,提供了更高的准确性和用于各种计算机视觉任务的统一框架,引入Anchor-Free(无锚)点检测,简化了模型架构,具有更快的NMS过程,提供了不同大小的模型选择,以适应不同的性能和精度需求。9YOLOv92024年发布,由Chien-YaoWang等人开发,提出了可编程梯度信息(PGI)的概念,并设计了基于梯度路径规划的通用高效层聚合网络(GELAN)。YOLOv9在MSCOCO数据集上的表现超越了之前的YOLO系列版本以及其他一些实时目标检测器,在准确性、参数效率、计算复杂度和推理速度方面都取得了显著的提升。10YOLOv102024年发布,由清华团队开发,YOLOv10提出了一种新的训练策略,用于无需非极大值抑制(NMS)的YOLO训练。这种策略结合了一对一(one-to-one)和多对一(one-to-many)的标签分配方式,以提供丰富的训练监督信号,并在推理时保持高效率。11YOLOv112024年发布,由Ultralytics公司开发,YOLOv11在目标检测的基础上增加了旋转角度的预测,实现了定向边界框检测,能够更准确地定位图像中的对象,尤其是那些非水平排列的目标,例如倾斜的飞机、船舶等。【知能基础】目标检测技术YOLO算法应用代码实现YOLO系列算法较多,为了让读者快速体验YOLO算法在目标检测中的应用,下面使用YOLOv5模型。(1)加载ultralytics发布的YOLOv5项目源代码(yolov5-master)到PyCharm中,源代码下载网址为/ultralytics/yolov5,如下图所示。【知能基础】目标检测技术【知能基础】目标检测技术【知能基础】目标检测技术企业级项目结构一般包含包、模块以及与项目相关的目录和文件,如图所示。包(package)名需要全小写字母,模块(module)名应该用简短全小写字母,单词之间可用下划线(_)分隔。

#源代码目录(2)安装YOLOv5的依赖项,命令为:

命令【知能基础】目标检测技术pipinstalltorchtorchvisionpipinstallyolov5(3)下载预训练模型(可选)YOLOv5提供了一些预训练模型,可以从YOLOv5的官方GitHub仓库下载这些模型,将预训练模型文件放到项目中,这里下载yolov5s.pt(较小的模型)。说明:在网络通畅的条件下,可以跳过这一步骤,后续项目运行时,预训练模型也会自动下载。

(4)准备图片数据将待检测的图片vehicle.png放置到“yolov5-master\data\images”文件夹中,这是一张主干道路上的车辆行驶的图片,主要包含了大量的车辆,如图所示。【知能基础】目标检测技术主干道路上的行驶车辆(5)检测图片运行yolov5-master中detect.py文件。第一次运行,会自动下载预训练模型文件,检测结果保存在runs\detect\exp中,如图所示。【知能基础】目标检测技术预训练模型文件下载(6)查看检测结果打开检测结果runs\detect\exp中的文件,所有人或者物体都被检测了出来,有car(汽车)、bus(公交车)、person(人),并用不同颜色矩形框标识了出来,还显示了目标类别和概率。【知能基础】目标检测技术检测结果【知能基础】OCR技术OCR技术基础OCR(OpticalCharacterRecognition,光学字符识别)技术是一种将图像中的文本信息转换为电子文本的自动化技术。WhatisOCR

?【知能基础】OCR技术微信中的提取文字:长按图片选择“提取文字”,快速提取图片中的文字。QQ中的屏幕识图:右键点击图片选择“提取图中文字”,快速提取图片中的文字。OCR技术基础【知能基础】OCR技术高速公路ETC系统:部署OCR摄像头,自动识别车牌并与银行系统对接扣费,通行效率提升90%以上。违章抓拍系统:结合OCR车牌识别与行为分析(例如闯红灯、压线),自动生成罚单。自动驾驶的路标识别:利用OCR与目标检测实时解析道路标识,辅助路径规划。OCR技术基础【知能基础】OCR技术OCR技术基础【知能基础】OCR技术OCR技术的工作原理对输入的图像进行去噪、灰度化、二值化、倾斜矫正等预处理操作,以提高后续识别的准确率。图像预处理1利用图像处理技术(如边缘检测、轮廓分析等)找到图像中可能包含文本的区域。文本区域检测将检测到的文本区域分割成单个字符,为后续的字符识别做准备。字符分割提取每个字符的特征信息(如形状、纹理、角度等),这些特征将用于后续的字符识别。特征提取2345将提取的字符特征与预训练的字符库进行比对,识别出每个字符的内容。字符识别6对识别结果进行校正和优化,以提高整体识别的准确率,如纠正错误、校正倾斜、去除冗余等,并将最终识别结果以文本形式输出。后处理输出OCR技术基础【知能基础】OCR技术OCR工具众多,用户可以根据自己的需求和平台选择合适的工具。OCR工具大体分为手机端OCR工具(如微信、QQ)、网页端OCR工具(如PearOCR网站)、开源OCR工具(如PaddleOCR、EasyOCR)。OCR技术基础【知能基础】OCR技术PaddleOCR工具包PaddleOCR是百度基于其深度学习框架PaddlePaddle开发的一款功能强大的开源OCR工具,由文本检测、检测框校正和文本识别三部分组成。PaddleOCR应用代码实现在PaddleOCR进行文字识别前,需要先使用pip安装好PaddleOCR,命令为:【知能基础】OCR技术命令pipinstallpaddleocrPaddleOCR应用代码实现先准备一张关于“交通强国建设纲要”的文件截图,文件名为policy.png。接下来编写代码实现文字识别功能。【知能基础】OCR技术

待识别的图片示例代码2示例代码1#1.导入必要的库frompaddleocrimportPaddleOCR,draw_ocrimportmatplotlib.pyplotaspltfromPILimportImage

#2.初始化

PaddleOCR,设置语言为中文(ch)#说明:第一次使用会下载模型到本地ocr=PaddleOCR(use_angle_cls=True,lang='ch')#3.对指定路径的图像进行文字识别#需要被识别的图像路径,注意要修改为自己的文件路径img_path=r'../data/policy.png'#使用

PaddleOCR进行文字识别result=ocr.ocr(img_path,cls=True)#4.打印识别结果forlineinresult:

foriteminline:

print(f'Text:{item[1][0]},Confidence:{item[1][1]},Box:{item[0]}')#显示识别结果和检测框(可选)image=Image.open(img_path).convert('RGB')boxes=[elements[0]forlineinresultforelementsinline]txts=[elements[1][0]forlineinresultforelementsinline]scores=[elements[1][1]forlineinresultforelementsinline]#在图像上绘制

OCR结果im_show=draw_ocr(image,boxes,txts,scores)#使用

matplotlib显示图像plt.imshow(im_show)plt.axis('off')plt.show()【知能基础】OCR技术运行结果如图所示:

上图识别出的结果和原图基本匹配,可以看到PaddleOCR识别准确率非常高,关于PaddleOCR更多功能将在后面的任务中讲解。【知能基础】OCR技术4素养提升返回主目录

在高速公路智能监控系统项目中,需自动记录通过车辆的信息,实现交通流量分析和违规车辆车牌抓拍,提高道路使用效率并增强道路安全。车辆检测和车牌识别是其中两个最基本的功能模块,主要实现技术如下:

(1)车辆检测:通常采用视频监控技术,通过高清摄像机捕捉高速公路上的车辆图像,利用目标检测算法(如YOLO算法)实时检测出车辆的位置,从而实现对车辆的精确定位和跟踪。

(2)车牌识别:基于数字图像处理、计算机视觉等技术,对摄像机所拍摄的车辆图像或视频序列进行分析,利用OpenCV实现车牌定位和车牌裁剪,使用PaddleOCR等开源工具进行车牌号码的识别。【项目实战】高速公路智能监控项目描述使用YOLOv5、PaddleOCR和OpenCV结合来实现车牌识别是一个常见的方法,其中YOLOv5用于车辆检测,而PaddleOCR用于车牌号码识别,其中还会用到OpenCV的级联分类器实现车牌定位和车牌裁剪,具体实现流程如图所示:项目实现流程图【项目实战】高速公路智能监控本任务所需环境见表所示:软件名称版本说明Windows操作系统Windows10及以上Anaconda4.10及以上PyCharm集成开发环境Community(社区版)Python库NumPy、Matplotlib、pytorch、PaddleOCR、OpenCV以及YOLOv5所依赖的其他库【项目实战】高速公路智能监控【项目实战】高速公路智能监控项目实施

由于车辆检测任务在前面的YOLO算法示例中已经讲解,只需要对模型进行微调和训练即可,不再赘述。接下来主要介绍车牌定位、车牌裁剪和车牌号码识别过程。考虑到车牌数据隐私保护,项目选用CCPD2020车牌数据集,它是一个大型的、多样化的、经过仔细标注的中国城市车牌开源数据集,适合用于车牌识别等计算机视觉任务的教学和研究。本项目对环境要求比较高,项目实施前,需将本项目任务所需环境和Python库都要安装好,并创建项目”vehicle_plate”,在项目中创建“images”文件夹,存放车辆车牌数据。

项目实施(1)车牌定位车牌定位用于提取出车辆检测图像中的车牌大致位置,并用矩形框标识。主要基于OpenCV的级联分类器实现车牌定位。在项目中创建文件plate_localization.py,获取配套资源中的cascade.xml文件素材,该文件存放了一些车牌的Haar特征,可以直接使用,代码如下:

【项目实战】高速公路智能监控实现代码#导入必要的库importcv2#车辆检测图像路径,注意要修改为自己的文件路径image_path=r"images/0.jpg"#读取车辆检测图像carimg=cv2.imread(image_path)#将BGR图转换为灰度图,为了提高检测效率gray=cv2.cvtColor(carimg,code=cv2.COLOR_BGR2GRAY)#加载OpenCV中的级联分类器文件cascade.xmlcar_detector=cv2.CascadeClassifier(r"cascade.xml")#在灰度图像gray上执行多尺度车牌检测,返回矩形框plates=car_detector.detectMultiScale(gray)#循环遍历所有检测到的车牌位置forx,y,w,hinplates:

cv2.rectangle(carimg,pt1=(x-10,y-10),pt2=(x+w+10,y+h+10),color=[0,0,255],thickness=2)#显示带有绘制矩形框的图像cv2.imshow("detectcarplate",carimg)cv2.waitKey(0)cv2.destroyAllWindows()可以看到,车辆车牌的位置被矩形框标识了出来。(2)车牌裁剪

为了进一步减少图像中其它信息的干扰,还需将车牌裁剪下来,便于后续车牌号码的识别。在项目中创建“Cropped”文件夹,存放裁剪结果数据。创建Python文件”plate_cropped.py”并编写代码,代码如下:

【项目实战】高速公路智能监控实现代码#车牌裁剪#将列表转换为

NumPy数组bbox_coords_np=np.array(bbox_coords,dtype=32)#计算车牌区域的左上角和右下角坐标x_min,y_min=np.min(bbox_coords_np,axis=0)x_max,y_max=np.max(bbox_coords_np,axis=0)#裁剪车牌区域cropped_plate=carimg[y_min:y_max,x_min:x_max]#如果需要,也可以显示裁剪后的车牌cv2.imshow('CroppedLicensePlate',cropped_plate)cv2.waitKey(0)cv2.destroyAllWindows()#保存裁剪后的车牌图像cv2.imwrite(r'Cropped\cropped.jpg',cropped_plate)可以看到,车辆车牌被裁剪了下来(3)车牌号码识别车牌号码识别是最后一步,主要利用OCR技术识别出车牌号码并打印输出,创建文件“plate_ocr.py”并编写代码,代码如下:

【项目实战】高速公路智能监控实现代码可以看到,车辆车牌号码被准确识别,达到了预期效果。#导入必要的库importpaddleocrimportcv2#加载图像image_path=r"Cropped\cropped.jpg"image=cv2.imread(image_path)#创建PaddleOCR实例,设置了use_angle_cls=True来使用角度分类器,这有助于更好地识别倾斜的文本#还设置了lang='ch'来指定识别语言为中文ocr=paddleocr.PaddleOCR(use_angle_cls=True,lang='ch')#使用PaddleOCR进行车牌识别,识别结果是一个列

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论