《嵌入式人工智能技术应用》课件 2.4-基于车牌识别算法实现车牌号码识别_第1页
《嵌入式人工智能技术应用》课件 2.4-基于车牌识别算法实现车牌号码识别_第2页
《嵌入式人工智能技术应用》课件 2.4-基于车牌识别算法实现车牌号码识别_第3页
《嵌入式人工智能技术应用》课件 2.4-基于车牌识别算法实现车牌号码识别_第4页
《嵌入式人工智能技术应用》课件 2.4-基于车牌识别算法实现车牌号码识别_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

项目二使用计算机视觉算法实现图像识别嵌入式人工智能技术应用基于车牌识别算法实现车牌号码识别任务四职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务四基于车牌识别算法实现车牌号码识别了解车牌识别算法原理;理解如何使用多线程的方式实现图像采集和车牌号码识别。掌握利用OpenCV实现图像的采集;掌握调用算法接口,进行车牌识别。职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务四基于车牌识别算法实现车牌号码识别

本实验将实现用车牌识别算法库对视频流进行车牌识别并显示在notebook。任务描述任务要求使用车牌识别算法对单张图像进行车牌识别;基于多线程使用车牌识别算法对视频流进行车牌识别;标注车牌框及号码并进行显示。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务四基于车牌识别算法实现车牌号码识别任务分析根据自己的了解说说有哪些颜色的车牌?实现车牌识别可能会涉及到哪些步骤?任务分析与计划03任务计划表项目名称使用计算机视觉算法实现图像识别任务名称基于车牌识别算法实现车牌号码识别计划方式自主设计计划要求请用6个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

6通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务四基于车牌识别算法实现车牌号码识别04知识储备车牌识别简介1车牌识别原理233车牌识别应用场景车牌识别04车牌识别系统(VehicleLicensePlateRecognition,VLPR)是计算机视频图像识别技术在车辆牌照识别中的一种应用。车牌识别在高速公路车辆管理中得到广泛应用,电子收费(ETC)系统中,也是结合DSRC技术识别车辆身份的主要手段。车牌识别04车牌识别技术要求能够将运动中的汽车牌照从复杂背景中提取并识别出来,通过车牌提取、图像预处理、特征提取、车牌字符识别等技术,识别车辆牌号、颜色等信息,最新的技术水平为字母和数字的识别率可达到99.7%,汉字的识别率可达到99%。

汽车牌照作为车辆的唯一“身份”标识,牌照的自动识别可以在汽车不做任何改动的情况下实现汽车“身份”的自动登记和验证。现如今,很多小区、商场、公园都用到了车牌识别系统,一个典型的车牌识别系统如图所示:04车牌识别

系统包含车辆检测、图像采集、车牌识别三个部分。当有车辆到达时,车辆检测单元感应到信号并触发图像采集单元采集当前的车牌图像,然后车牌识别单元对图像进行处理,定位出车牌位置,再将车牌中的字符分割出来进行识别,组成牌照号码输出给道闸。04车牌识别04知识储备1233车牌识别简介车牌识别原理车牌识别应用场景车牌识别就是依次实现汽车图像的车牌定位、车牌字符分割、车牌字符识别算法的过程。04车牌识别车牌识别系统的基本工作原理及流程车牌定位就是把车牌图像从含有汽车和背景的图像中提取出来,其输入的是原始的汽车图像,输出是车牌图像。车牌的字符分割就是通过对车牌图像的预处理、几何校正等把字符从车牌图像中分割出来,分成一个个独立的字符,其输入是车牌定位后得到的车牌图像,输出是经过预处理、几何校正等后得到的一组单个的字符图像,并得到各个字符的点阵数据。字符识别是依次从单个字符点阵数据中提取字符特征数据,并给出识别结果。04车牌识别车牌识别系统的基本工作原理及流程04车牌识别车牌识别系统的基本工作原理及流程

车牌定位是车牌识别的关键步骤,为了能在复杂背景和不均匀光照条件下快速准确定位车牌位置,基于改进IsotropicSobel边缘检测算子的车牌定位算法,由此来解决其存在的问题,该算法通过改进IsotropicSobel边缘检测算子,实现了车牌图像在水平、垂直以及对角线方向上的纹理特征提取,然后采用Otsu算法阈值化,再对阈值化后的二值图像做数学形态学运算得到车牌的候选区域,最后利用车牌特征去除伪车牌。04车牌识别车牌定位04车牌识别车牌识别算法实现(1)对输入的彩色图像进行灰度化处理;(2)Sobel边缘检测算子;(3)对边缘检测后的灰度图进行二值化处理;(4)对车牌图像进行图像形态学操作。04车牌识别车牌识别算法实现算法流程图:1、车辆检测跟踪模块2、车牌定位模块3、车牌矫正及精定位模块4、车牌切分模块5、车牌识别模块6、车牌识别结果决策模块7、车牌跟踪模块04车牌识别车牌识别系统采用高度模块化的设计,将车牌识别过程的各个环节各自作为一个独立的模块。(1)文件分辨率低,通常由于车牌较远,有时是由于低端相机导致的;(2)图像模糊,尤其是运动模糊;(3)由于强光,反射或阴影造成的光照和对比度较差;(4)车牌(部分)遮挡,通常是拖车杆或车牌上的污渍;(5)前后识别结果不同,如拖车,露营车等;(6)采集车牌时,车道在相机视角中发生改变;(7)字体不同,常见于一些浮夸的车牌;(8)规避车牌识别的手段;(9)不同国家或各州间的缺乏协调。不同国家或州的两辆车可以有相同的车牌号但是设计不同。04车牌识别车牌识别难点04知识储备1233车牌识别简介车牌识别原理车牌识别应用场景

车牌识别技术结合电子不停车收费系统(ETC)识别车辆,过往车辆通过道口时无须停车,即能够实现车辆身份自动识别、自动收费。在车场管理中,为提高出入口车辆通行效率,车牌识别针对无需收停车费的车辆(如月卡车、内部免费通行车辆),建设无人值守的快速通道,免取卡、不停车的出入体验,正改变出入停车场的管理模式。04车牌识别车牌识别应用场景1.电子警察系统

电子警察系统作为一种抓拍车辆违章违规行为的智能系统,可以完成多项违章抓拍功能,其中包括违章闯红灯抓拍功能、违章不按车道行驶抓拍功能、违章压线变道抓拍功能、违章压双黄线抓拍功能和违章逆行抓拍功能等内容。04车牌识别车牌识别应用场景2.卡口系统

卡口系统对监控路段的机动车辆进行全天候的图像抓拍,自动识别车牌号码,通过公安专网与卡口系统控制中心的黑名单数据库进行比对,当发现结果相符合时,系统自动向相关人员发出警报信号。04车牌识别车牌识别应用场景3.高速公路收费系统

当车辆在高速公路收费入口站时,系统进行车牌识别,保存车牌信息,当车辆在高速公路收费出口站时,系统再次进行车牌识别,与进入车辆的车牌信息进行比对,只有进站和出站的车牌一致方可让车辆通行。04车牌识别车牌识别应用场景4.高速公路超速抓拍系统

系统抓拍超速的车辆和识别车牌号码,并通过公安专网将超速车辆的车牌号码传达到各出口处罚点,各出口处罚点用车牌识别设备对出口车辆进行车牌识别,与己经收到的超速车辆的号码对比,一旦号码相同立即报警。04车牌识别车牌识别应用场景5.停车场收费系统

当车辆进入停车场时,收费系统抓拍车辆图片进行车牌识别,保存车辆信息和进入时间,当车辆离开停车场时,收费系统自动识别出该车的车牌号码和保存车辆离开的时间,并计算出该车的停车费用,车主交完费用后,收费系统自动放行。04车牌识别车牌识别应用场景6.公交车报站系统

当公交车进入和离开公交站台时,报站系统对其进行车牌识别,然后与数据库中的车牌进行比对,语音报读车牌结果和公交线路。综上所述,车牌识别技术的广泛应用使道路安全、交通通畅、车辆安全、环境保护得到了全面的保障。04车牌识别车牌识别应用场景职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务四基于车牌识别算法实现车牌号码识别05任务实施利用多线程方式实现视频流的车牌识别2调用车牌识别算法接口142图片加载与人脸检测1算法实例化3人脸属性分析显示算法处理的图像调用车牌识别算法接口05调用车牌识别算法接口利用多线程,使图像采集和算法识别同时运行,从而实现视频流的车牌识别,并且可以避免一些因花时间太久,导致的视频卡顿。调用车牌识别算法接口05importtimeimportcv2#引入opencv图像处理库fromrockximportRockX#引入车牌识别算法接口库importipywidgetsaswidgets#jupyter画图库fromIPython.displayimportdisplay#jupyter显示库fromlib.ft2importft#中文描绘库1.算法实例化(1)导入相关库carplate_det_handle=RockX(RockX.ROCKX_MODULE_CARPLATE_DETECTION)#检测carplate_align_handle=RockX(RockX.ROCKX_MODULE_CARPLATE_ALIGN)#对齐carplate_recog_handle=RockX(RockX.ROCKX_MODULE_CARPLATE_RECOG)#识别(2)实例化算法接口对象在RockX库中,包含了算法各种功能模式,这里采用车牌的检测,对齐,和识别的功能模式。RockX(RockX.ROCKX_MODULE_CARPLATE_DETECTION)是车牌检测功能的接口对象;RockX(RockX.ROCKX_MODULE_CARPLATE_ALIGN)是车牌对齐功能的接口对象;RockX(RockX.ROCKX_MODULE_CARPLATE_RECOG)是车牌识别功能的接口对象。05image_car=cv2.imread("./exp/car.jpg")2.图片加载与显示(1)加载图片数据使用已经保存在当前路径下的车牌图片。imgbox=widgets.Image()#定义一个图像盒子,用于装载图像数据display(imgbox)#将盒子显示出来imgbox.value=cv2.imencode('.jpg',image_car)[1].tobytes()#把图像值转成byte类型的值(2)打印原始的照片in_img_h,in_img_w,bytesPerComponent=image_car.shape(3)获取图片信息获取图片的长,宽和通道数。调用车牌识别算法接口05ret,results=carplate_det_handle.rockx_carplate_detect(image_car,in_img_w,in_img_h,RockX.ROCKX_PIXEL_FORMAT_BGR888)3.车牌识别(1)调用车牌识别主函数接口为了获取车牌框的位置,调用车牌检测函数,通过对图像的检测,识别车牌的的位置信息。ret,align_result=carplate_align_handle.rockx_carplate_align(image_car,in_img_w,in_img_h,RockX.ROCKX_PIXEL_FORMAT_BGR888,results[0].box)(2)调用车牌对齐函数为了对车牌的图片的倾斜等,需要对车牌进行矫正对齐。调用车牌对齐函数,通过前面得到的车牌对象,把车牌对象的位置框信息作为输入,进行车牌的矫正对齐。rockx_carplate_align(self,in_img,width,height,pixel_fmt,in_box)参数说明:in_img:输入图片(numpyndarray);width:图片宽;height:图片高;pixel_fmt:图片pixelformat;in_box:车牌检测后的车牌框。返回值说明:ret:状态码,0为成功,其他失败;align_result:返回对齐后的结果对象,主要包含对齐后的图片数据信息。调用车牌识别算法接口05ret,recog_result=carplate_recog_handle.rockx_carplate_recognize(align_result.aligned_image)3.车牌识别(3)调用车牌识别主函数接口为了获取具体的车牌信息,调用车牌识别函数,针对矫正对齐后的图片数据结果,进行识别分析。rockx_carplate_recognize(self,in_aligned_img)参数说明:in_aligned_img:车牌对齐后的对象的图片数据(align_result.aligned_image)。返回值说明:ret:状态码,0为成功,其他失败;recog_result:返回识别后的结果信息。调用车牌识别算法接口05ifrecog_resultisnotNone:cv2.rectangle(image_car,(results[0].box.left,results[0].box.top),(results[0].box.right,results[0].box.bottom),(0,255,0),2)image_car=ft.draw_text(image_car,(results[0].box.left,results[0].box.top-50),'{}'.format(recog_result),34,(0,0,255))4.显示算法处理的图像(1)画车牌框和车牌号利用OpenCV在图像上添加文字和画出人脸框,cv2.rectangle()的作用是根据坐标,描绘一个简单的矩形边框参数依次为:图片,左上角右下角位置坐标,线条颜色,线条粗细。cv2.rectangle(image,pt1=(int(left),int(top)),pt2=(int(right),int(bot)),color=(0,255,0),thickness=3)引入中文绘画库,用于在图片上描绘中文字符,ft.draw_text的作用是在图片的某个位置上添加文字信息,参数依次为,图片,位置,文字,字体大小,字体颜色。img=ft.draw_text(img,position,'{}'.format(plate_number),34,(255,0,0))imgbox=widgets.Image()#定义一个图像盒子,用于装载图像数据display(imgbox)#将盒子显示出来imgbox.value=cv2.imencode('.jpg',image_car)[1].tobytes()#把图像值转成byte类型的值(2)结果可视化利用jupyter的画图库和显示库将经过算法处理的图像显示。调用车牌识别算法接口05任务实施利用多线程方式实现视频流的车牌识别2调用车牌识别算法接口142定义摄像头采集线程1引入相关的库3定义算法识别线程启动与停止线程利用多线程方式实现视频流的车牌识别05利用多线程方式实现视频流的车牌识别利用多线程,使图像采集和算法识别同时运行,从而实现视频流的人脸检测,并且可以避免一些因花时间太久,导致的视频卡顿。05importtime#时间库importcv2#引入opencv图像处理库fromlib.ft2importft#中文描绘库importthreading#这是python的标准库,线程库importipywidgetsaswidgets#jupyter画图库fromIPython.displayimportdisplay#jupyter显示库fromrockximportRockX#引入算法库1.引入相关的库threading线程库多线程类似于同时执行多个不同程序,多线程运行有如下优点:使用线程可以把占据长时间的程序中的任务放到后台去处理;用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度;程序的运行速度可能加快;在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。利用多线程方式实现视频流的车牌识别05classCameraThread(threading.Thread):def__init__(self,camera_id,camera_width,camera_height):threading.Thread.__init__(self)self.working=Trueself.cap=cv2.VideoCapture(camera_id)#打开摄像头

self.cap.set(cv2.CAP_PROP_FRAME_WIDTH,camera_width)#设置摄像头分辨率宽度

self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT,camera_height)#设置摄像头分辨率高度

defrun(self):globalcamera_img#定义一个全局变量,用于存储获取的图片,以便于算法可以直接调用

camera_img=Nonewhileself.working:ret,image=self.cap.read()#获取新的一帧图片

ifret:camera_img=imagedefstop(self):self.working=Falseself.cap.release()2.定义摄像头采集线程结合上面的opencv采集图像的内容,利用多线程的方式串起来,形成一个可传参,可调用的通用类。这里定义了一个全局变量camera_img,用作存储获取的图片数据,以便于其他线程可以调用。init初始化函数实例化该线程的时候,会自动执行初始化函数,在初始化函数里面,打开摄像头,并设置分辨率。run函数该函数是在实例化后,执行start启动函数的时候,会自动执行。在该函数里,实现了循环获取图像的内容。利用多线程方式实现视频流的车牌识别053.定义算法识别线程结合调用算法接口的内容和图像显示内容,利用多线程的方式整合起来,循环识别,对摄像头采集线程中获取的每一帧图片进行识别,并显示,形成视频流的画面。init初始化函数实例化该线程的时候,会自动执行初始化函数,在初始化函数里面,定义了显示内容,并实例化算法和加载模型。run函数该函数是在实例化后,执行start启动函数的时候,会自动执行。在该函数是一个循环,实现了对采集的每一帧图片进行算法识别,然后将结果绘画在图片上,并将处理后的图片显示出来。利用多线程方式实现视频流的车牌识别05camera_th=CameraThread(0,640,480)plate_detect_th=PlateDetectThread()camera_th.start()plate_detect_th.start()4.启动和停止线程(1)启动线程实例化两个线程,并启动这两个线程,实现完整的车牌识别功能,运行时加载模型比较久,需要等待几秒。plate_detect_th.stop()camera_th.stop()(2)关闭线程为了避免占用资源,结束实验时

温馨提示

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

评论

0/150

提交评论