《智能停车场车牌识别计费系统设计.docx》由会员分享,可在线阅读,更多相关《智能停车场车牌识别计费系统设计.docx(27页珍藏版)》请在课桌文档上搜索。
1、智能停车场车牌识别计费系统设计摘要本次设计是以日常生活中的停车场收费案例为出发点;以当今社会中停车场计费管理复杂、混乱为设计背景;以人工智能发展迅速、Python开发高效快捷的特点为优势。再结合对市场停车收费的调查分析,从而设计出了基于PythOn的智能停车场车牌识别计费系统。本系统优势在于Python语言的开发高效,核心在于车辆车牌的识别,创新在于本系统使用了百度云AI的API识别接口来实现车牌识别,利用百度云AI的图像识别去创建应用接口与摄像头相连接,提取带有车牌的图片信息,返回车牌号包含的信息。最终改善了停车场停车、计费混乱、低效的境地。在本文中介绍了脚本语言PythOn以及相关模块库的
2、基础知识,分析了智能停车场车牌识别计费系统的具体设计流程,确定了系统设计中所需要的方案模块,以便进行后续的模块化设计。然后对该系统中的三个主要模块主窗体的UI设计、车牌识别、收入统计页面依次进行了实现,最终完成了智能停车场车牌识别计费系统的设计。关键词:PythOn设计;车牌识别;计费统计分析;模块化设计学第一章绪论1.1研究背景当今中国正在逐步实现中华民族的伟大复兴,自1987年改革开放,中国的经济实力迅猛发展,国际地位显著提升,国内生产总值显著提高,人民的生活质量又迈上了新台阶。到2022年的4月初,我国机动车持有量已经达到了4.02亿辆,尽管在目前的经济条件下,几乎家家有车。车辆越来越多
3、,但是我国的停车场数量却增长缓慢,远远满足不了车的数量。汽车出行的确方便了日常生活,但停车地点的选择却成为了一大难题。社会在进步,时代在变革。国家也开始鼓励停车智能化,这样不仅节省了人力物力,而且的能大幅度提高停车场的运营效率,停车服务更加数字化,方便人们出行。因此,智能停车场收费识别系统的发展是一个不可避免的趋势。社会正在逐步淘汰老旧的人工管理方式,转而代替的是信息化的计算机管理系统,不仅极大地提高了管理效率,而且可以将人解脱出来,因此,智能停车场的设计研究就显得越发重要。故本文利用PythOn语言搭建了智能停车服务平台。1.2研究目的与意义随着信息化时代的进步,计算机技术,网络通信都得到了
4、迅猛发展,我国已经开始迈向6G时代。中国的各行各业也是发展迅速,截止到2022年4月,我国公路总里程将达到528万公里。随着公路的快速普及,人民生活水平质量日益提高,使得我国的居民汽车持有量快速增加。车辆的出现不仅方便了人们的生活,而且节省了出行时间,机动车出行已经成为了人们日常生活的首选,但是到达目的地之后的停车问题却让人心烦不已。除此之外,机动车正在源源不断地增多,在哪停车、如何高效快捷地停车已经成为了人们心中需要首先考虑的问题。时代的变革,正在逐步让人们的生活变得更好,停车问题也会逐步得到解决。为了解决这一难题,需要从停车场本身出发,不管是数量、还是停车识别系统都将得到巨大的改变。社会已
5、经在逐步淘汰老旧的人工管理方式,转而代替的是信息化的计算机管理系统,不仅极大地提高了管理效率,而且可以将人解脱出来。因此,智能停车场的设计研究就显得越发重要。本次设计的智能停车场车牌识别系统就是基于目前的社会背景,它将车牌识别及车辆管理融为一体,能自动识别出车牌包含的信息,在停车场的车辆管理方面有着及其重要的作用,是信息处理技术的一项重要课题。基于PythOn的智能停车场车牌识别计费系统设计是当今社会建设的需要。1. 3研究现状1.3 .1Python技术的发展现状Python编程语言是一个荷兰人创立的,因为其独特的编程特点让人们熟知。随着计算机时代的快速发展,Python编程技术也在进行不断
6、的优化、改进。自从1991年第一个版本面向世界,Python技术的热度就一直处于高峰,在之后的发展阶段中,Python总共经历了3个大版本的改动。第一版本也就是PythOnI.0版本,它是在1994年发布的,但是由于其复杂的编程风格以及应用范围小,被世人诟病。所以进行着不断的改进,很快2.0版本也就应运而生。在其2.0版本上,也衍生了很多的小版本,比如2.1、2.2等等。这一版本,也在逐渐的化繁为简,其应用领域也在逐渐增多。终于在2008年时,Python3.0版本总算面世了。截止于2022年4月,版本已经更新到了3.10.4。目前Python运用于各自开发,人工智能领域更是深入其中。作为一门
7、优秀的编程工具,Python技术以及在特定领域的成为开发首选了,特别是在网页爬虫、人工智能领域都可以运用PythOn技术进行开发,并且在各大排行榜都居于高位。1. 3.2车牌识别技术现状在快速发展的计算机技术背景下,车牌识别技术的关键还是在其识别的精度和准度,其运用方式是通过分析图像,转化为特定的数字码流,再进行处理转化,将处理之后的结果进行保存以及显示,最终达到了对车牌号码中的字符进行提取。这一技术的主要分为三步,即确认车牌位置、提取牌号字符、识别牌号。这三步联系紧密,前一步的操作为后一步做铺垫。车牌识别的速度主要受字符识别速度的限制,如果字符识别足够快,那么车牌也能更快被识别出来。在当前的
8、技术条件下,车牌识别主要是通过对比字符样本库,将图片中提取的文本字符与库中的样本进行对比,进而实现车牌识别,但是这种技术的缺点是识别效率较低,降低了识别速度。而另一种是基于文字结构的文字识别技术,这种技术是根据字符的构造以及笔画结构对车牌号进行判定,这样做的好处是不用与样本库进行对比,不受分割图像尺寸的影响,从而大大提高了识别的准确性,并且运用广泛。随着识别技术的发展,完成车牌识别的方式大体上主要分为两种。第一种是静态图像识别,顾名思义就是通过抓拍一瞬间的单帧图像进行识别,但是这种方法会受到摄像头拍摄图像质量的影响,质量较好的图像自然识别效率高,当前市场上的产品识别时间大约在180毫秒。第二种
9、是动态的实时识别,即通过摄像头获取一段含有多帧图像的视频,增加每一帧图像的识别次数,进而提高了识别速度和精度,它的优点是受到图像质量的影响较低,当前市场上的产品识别最好的时间大约在10毫秒左右。1.4 研究内容1. 4.1研究内容本文主要使用Python语言设计了一个智能停车场车牌识别计费系统。在这个系统中,主体的计算机系统连接各部分的网络设备,对停车场车辆的进入,以及收费进行全面的管理。本系统能够自动收集车辆信息,包括进出记录、在停车场内的停车时间、停车场内停车位置等,实现停车场车辆的智能管理。系统的主要运行流程为:首先高清摄像头捕捉带有车牌的图片,进而系统自动识别车牌,提取重要信息并保存。
10、在软件部分,主要使用PythOn语言来进行代码的编写,绘制系统主页面时使用pygame模块;识别车牌时使用百度云的免费APl接口,运用baidu-aip模块来实现;在处理复杂的数据时,使用了PandaS模块;根据系统收集的数据绘制总车费柱状图时,使用了matplotlib模块来完成,最终完成了该车牌识别计费系统。第二章系统总体设计2.1系统总体架构该系统整体是由Ul显示、车牌识别、收费统计三个模块组成,包括了数据存储和数据显示。通过采集车辆出入记录、场内位置、停车时长等信息,实现车辆出入及停车场动态、静态的综合管理。其总体的框架图如图2.1所示:图2.1系统总体架构2.2系统设计目标与要求2.
11、 2.1设计目标本系统主要使用了脚本语言Python进行开发,设计了一个智能停车场车车牌识别计费系统。在这个系统中,主体的计算机系统连接各部分的网络设备,对停车场车辆的进入,以及收费进行全面的管理。本系统能够自动收集车辆信息,包括进出记录、在停车场内的停车时间、在停车场内的停车位置等,实现停车场车辆的智能管理。该系统的核心是通过原摄像头获取图片,根据带车牌的图片识别车辆,再将车牌信息进行保存。2. 2.2设计要求根据预期的设计目标,本智能停车场系统需要具备以下功能:实现基本的车牌识别功能;实现满预警功能并做出信息提示;实现收入统计功能并显示柱状图。除了核心的智能识别车牌功能,该系统还添加了满预
12、警提示功能。本系统的软件开发及运行环境需求如下:(I)操作系统:Windows7Windows8、Windows10(2)Python版本:Python3.7(3)开发工具:PyCharm(4)Python内置模块:os、time、datetime(5)第三方模块:Pygame、opencv-pythonpandas、matplotlibdaidu-aipxlrd2. 3系统技术介绍2. 3.1开发语言介绍本次设计运用的开发语言为Python,运用的版本为PythOn3.7。它是在1989年由一位Python爱好者设计而来,之后因为其独特的编程特点让人们熟知。虽然第一版本的Python设计复杂
13、、晦涩难懂,其应用也很狭小,但是依然不妨碍其之后的发展前途。因为之后的版本都是以简洁、易操作为改进思路,让初学者快速上手。截止于2022年4月,版本已经更新到了3.10.4。目前Python运用于各自开发,人工智能领域更是深入其中。以至于后来,人们冠以“1.ifeisshort,IUSePythorr的美称,证明了Python的强大。另外,PythOn也被称之为胶水语言,因为其具有丰富而强大的内置库和第三库,可以粘合于各种模块当中。同样,Python也是一门解释性的语言,跟CC+、C#Java语言一样,都可以进行解释、翻译。除此之外,Python编程语言在进行编译时,也是具备那些编程当中基本的
14、元素,例如变量、函数等等。它作为一门高级编程语言,面向对象的编程思想Python也是具备的,并且把面向对象的思想结合的比其他编程语言都要深入,封装性、继承性和多态性的特点更是可以随时体现出来。2. 3.2车牌识别技术简介在快速发展的计算机技术背景下,车牌识别技术主要是分析和处理包含车牌的图像,系统自动识别车牌位置,进而对车牌号中的字符进行提取并识别。我们这里不做太复杂的车辆动态识别,只演示从图像中识别车牌信息。车牌识别功能的实现方式大致分为两种,一种是自己编写代码实现,另一种是借助第三方APl接口实现。(1)代码实现:如果想要通过PythOn自己手动编码实现车牌识别功能,可以借助一些Pytho
15、n库,比如:OPenCV、TenSorFlOW等,这种方式因为每一个功能点都需要自己编码实现,所有会相对复杂一些,另一方面如果想要保证识别的准确性,可能需要做大量的实验,也就是说会花费更多的时间。(2)第三方接口实现:现在已经有一些第三方平台实现好了车牌识别的功能,并且他们对外提供了APl接口,只需要调用他们提供的接口即可,这种方式实现就相对简单了一些,并且通常接口提供方对外提供的接口功能的准确性也是基本可以保证的,原因很简单,如果接口功能太差的话,对自己的品牌会造成不好的影响,也不会有顾客再行使用,也就失去了接口对外提供的价值了,另外第三方接口可能会收取一定费用,因此,如果现实中要具体实现的
16、话要综合考虑。2.3.3界面设计技术介绍当下,几乎所有的项目工程都会提供外接界面的操作,让使用者、购买者可以根据界面上的汉字提示进行操作运行,简单易行。界面设计也就是为客户提供了一个带有接口的黑匣子,不用知道黑匣子里面的具体工作原理,只用知道如何使用、如何得到结果。这为开发、设计提供了极大的便捷性,稳定性。从界面设计出发,从而得到了用户图形界面,也就是我们熟知的GUl(GraPhiCaIUserInterface)o它是一种用于人机交互的控制工具,用户通过鼠标点击去选择对象,通过键盘输入去设定参数,在上位机上通过控件就可以让底层程序运行起来,从而达到完成机器运行的结果。当下界面设计已经涌现了大
17、量的工具软件去帮助我们进行设计开发,在PythOn当中,就结合了第三方的软件包,比如功能强大的WxPython框架包、开源跨平台的Kivy包,以及操作简单的Pyqt框架、与游戏开发结合紧密的Pygame架构包等等,还有独立于Python之外的QT,也是一门非常强大的图形设计开发工具。这些工具包让界面设计变得越来越直观、易学,对于初学者十分友好。在本文中,就选择了相对简单的Pygame去辅助设计Ul界面。2.4系统设计流程2.4.1系统模块化流程设计该智能停车场车牌识别计费系统共包括四个功能部分,识别车牌模块,收入统计,超长车提示,满预警提示。具体结构如下框图:图2.2系统功能模块图收入统计模块
18、具体功能为:读取文件里有收入的信息,计算所有收入计算总价格,根据收入信息绘制柱状图表图片,显示柱状图图片;识别车牌模块功能为:打开摄像头,识别车牌,数据保存显示包括:保存数据到停车场的信息表和车辆表文件中,删除停车场车辆表中数据,显示车位信息,显示提示信息,显示车辆信息;满预警提示模块:用于读取文件内容判断星期几繁忙,根据日期判断是否显示提示信息文字。2.4.2系统业务流程设计通过分析系统预期完成的目标及对应的功能需求,可以画出系统的业务流程图,如图2.3所示:图2.3系统的业务流程设计图第三章系统模块化实现3.1 系统的UI显示模块实现3.1.1 系统主窗体子模块实现在这个部分,主要通过Py
19、game模块来进行系统主窗体的设计,因此,首先要清楚主窗体的业务流程是怎样的,以及具体的实现技术。该模块主要是进行主窗体的显示,接着可以画出系统主窗体的业务流程图,如图3.1所示:初始化DyQame模块应用:Pygarnainrto方法设置游戏窗体大小应用PV1Qarne.displayUnOdOO函数设苦游淡窗体名称应用.PyflaiTe.ClsplayscjcapucnO函数&5S湖戏蜜体图标应用:Pygamedisplaysetico()函数在主循环中更新举总JSffl.PygamedISPIay.upare()方法挂否进入士循队游滋退出处理应用RgameqUilO方法图3.1系统主窗体
20、的业务流程在整个主窗体的业务流程中,开始后,首先创建自定义Pygame.init()方法,用于初始化Pygame模块,接着对系统的主窗体进行大小、名称、以及游戏图标的设置。判断是否进入了主循环,如果是,那么在主循环的线程中循环刷新屏幕,最后退出整个主循环,如果没有进入主循环,那么直接结束。具体实现步骤如下:(1)创建系统文件夹首先要创建一个总的系统文件夹,命名为Cannlmber;然后在这个文件夹中再创建一个file文件夹,主要作用是存放系统图片资源;最后一步,在CamUmber文件夹中创建main.py文件,智能停车场车牌识别计费系统的总代码存放在这里。(2)导入Pygame库这一步主要是用
21、来定义主窗体的结构,例如宽和高,具体代码如下:#pygamelvjpythonftffimportpygame图3.2导入pygame库#储大小size三10,484#(麻的削釉姆)FPS=60图3.3定义主窗体结构(3)初始化PygamePython中的pygame库是用来写游戏的模块集合,主要特点是轻便并且可以在几乎所有的平台和操作系统上运行。在这个模块中,主要进行主窗体名称图标的设置,窗体实例的创建,以及设计窗体的规格和背景颜色,最后通过循环来实现显示和自动刷新窗体。具体代码如下:#战散鼬DARKB1.UE=(73,119,142)BS=DARKB1.UE图3.4指定背景颜色#Pygan
22、e初断化Pygame.InitU9W皙体pygae.displavset-capion(,i.,j*HIRH/卜例.txt攵件小JHmffJHifilename,filekey.txt,aid.lk1ftKeyflf1ifcs.poth.eist5(fileno11e):*ft*Ikfi存CKithopen(filenae,r)sfile:VrJSECRETKEY,-)9初始化MPoCMl散clientAipOcr(APP.IDrAPI.KEYrSECRET.KEY)21#决堪文件cerqet.riie.ccntet(tIiePatnJ:withOpenCfllfiPath.rb)asfp;r
23、eturnfp.reod()图3.18捕获车牌信息4嘏JHMK第H车静号defgetcn():0设取内片ine三qt.ti1.cont11t(fci1.test.jpq,)川聿毛小娟results=Client.IicenseP1.ate(image)ords.result1(unter,0湍1加:Print(results)returnresults(2)第二步,需要清楚的是,该系统中运用到的是免费并且限制使用次数的百度云APl接口,因此在窗体中增加了人工“识别”按钮,即当摄像头画面中出现车牌图片时,点击此按钮,就能进行车牌识别。其次,需要CarnUmber文件夹中创建bm.py文件,用于自
24、定义按钮模块,代码如下:inportpygome口一义做classButtonO:穆为短介技位中二东的文夕t(s.-,screen,cenerxy,wicn,neint,uutto.coor,ext.coor,sq.size):7依舲怂菽注矽超线se-.screenscreen挺Nl变门&cl.width,&el.height-width,height#由芮般M曲rect#H(C秋色X以裕SElf.butto11-colorbtto11.color*设五文4的触包为门包slf.txt.color=txt-cclorQll文木为默认7体,7号为28self.font=pygame.font.Ss
25、Font(51.Hei,size)次艮城Vl人小sei,.rect-pygame.Rect(O,3,se1.r.iaiatn.se,.eignt)曲展抗钮的ry并修BTflISI中心口胃d.rcct.CCntorx:ccntcrxy0-trl.width/?*2seV.reot.centen=centerlself.eiqht2*2伯她图像self.dea1._sn(nsq)图3.20自定义按钮Cefdeal.11sq(self.msg):26Imt5gWMWW,*JrH德出按tH1.跨*#render将储GmSg的文本切技为网像SHl*.msg_irg-sb.-.font.render(rs
26、g,True,s11lf.text-colr,SHlt.button.COItIr)VftUW文本图你创”个rctselr.nsq_ing_rect=self.msg_ing.qet.rectOH将iXrect的CenteP弧科.设置为脓切的CenterH性sei-.115g.irg,rect.center三sei*.rect.centerccfdraw.buttcn(selz):#城无羸色seIt.screen.tilt(selt.buttoncolor,selt.rect)将&图像纥制到屏Cscl.screen.blit(self.rsq.inq,self.msq_ing_rect)图3.
27、21图像渲染(3)第三步,在系统主文件main.py中调用btn.py模块,用于自定义一些按钮,以及在系统中会用到的颜色属性,具体代码如下:口调用门定义核包校段importbtn#定义般色B1.ACK-(0,B,6)HITE=(255,255,255)GREEN=(0,255,)B1.UE=(.121,215)GRAY二(96r96496)RED=(27,23,G)YE1.1.OW=(2554255,)(4)第四步,在循环中进行按钮的初始化,并且判断窗口点击位置是否为“识别”按钮的位置,如果是,此时需要调用车牌识别模块ocrutil中的getcnO方法进行车牌的识别,具体代码如下:#a*inm
28、nbutton.qo=btn.Btton(screr,(640,48G)r153.6.B1.UE,WHITE,b!n),25)绘制熊建的核情button-go.dra*,.button)图3.23识别按钮M三rf.rUJHilitflRaIfilliMKttIIif492=eve11t.po(0)endevent.p03(=62end422-event.p3(lendevent.p0511482;printer1;,)r*y:Cornunibcraocrutil.getcn()except:ppintfCc5i8)continuepass图3.24操作判断3.2.3读取和保存文件子模块实现在创
29、建了保存车辆数据的两个文档后,此部分主要实现对车辆信息的保存,以及读取想要的内容。仍然使用PandaS模块来实现信息的保存和读取功能,在具体操作之前,首先要清楚车辆信息的保存与读取的业务流程,以及具体的操作技术,画出该模块的业务流程,如图3.25所示:获取停车窃车数立应用PanCJaq稹块绘制停充堵车达匕总应用,SCreenMtQ方法队取当前是4期几应用自定义UmeUtH模缺更新数据表应用PandaS镇炊图3.25车辆信息的保存与读取的业务流程根据具体的业务流程,首先使用pandas模块获取文件夹中的停车场车数量,接着使用SCreen.blit()方法将停车场的车辆信息绘制到当前页面,为了实现
30、满预警功能,创建自定义timeutil模块用于获取当前的日期,进而判断是否显示满预警信息到页面,最后使用pandas模块更新后台的数据库,完成该业务流程。具体实现步骤如下:(1)第一步,需要获取文件中当前停车场的车辆数量。具体代码如下:口近取义件内补P1.table=pd.readexcel(path*?fsheetrane三,data,)3*柠乍炀下惘cars=pi_table(carnurberdate,state.valuesO己进人牺敢过earn=le11(cars)图3.26进入停车场车辆数量(2)第二步,需要读取文件中车辆的信息,因此创建text3()方法,将停车场车辆信息绘制到系
31、统界面上。具体代码如下:*俸十居十精仔史deftexts(screen):a侵川嘉嫁*徐Xtfont-pygae.font.SysFont(SinHei,z12)9MKi档&6班cars-pi_tatleI(,crnunber,S3.Xate】.“lues9WIOWfVlftiflc(cars)i:cars二pd.rad.axcl(pathJ.xl三x,Skiprons=I11(cars)-IG,shoot.na50:*data).values9硝色柒点变结叁fczrtttuforcarincars:n*lB乍快乍V乍龄遗入时间textstartxtfont.render(str(car)r,
32、*str(carl),1TruerMIrTE)9R*7MRKtpt-rct-taxtsturt.Q0t,r9ct()3劭内支ZM便中心点text-rcct.ccnterxM8ZBtext.rt.centery三70*20*11绘制内容screen.DtitItexrstart.et.rec图3.27读取车辆信息(3)第三步,实现满预警功能。具体过程为:根据文档中读取的信息以及state字段,判断最近停车场车辆满预警是周几,因此在下一个相同的日期时,提前一天提示满预警提示。具体代码如下:224蜻便力kear-pi.lnfctabT.efpi_info_tablIstate-2kcars=kcar
33、dateJ.vaesWkid。代A周-wk.u三br=9forKinkcars:Week_nUmber=tineutil.getJaeek-niMear(k)KB*iHH218-12-U16:18Iocaltiie=time.Strftime(,y-m-%d:XM,tine.IoceltineO)IM据旭同理KW#eek_locltinie=tineutil.qet_fteek_nuebeer(loca1.tije)i,fweek_nj11tr-E:ifekocaltine=6:text6(screen,-.i:1一.*.*好-1)elifeee.IocaItime=O:tcxt6(scree
34、n,介,.今JHit.)aelse:ifeek.lccQltinB+l三三weDer:text6(screen,KM*耻M分H.勺,:比出9/.5X力申卑)W5pass图3.28满预警(4)第四步,主要实现更新保存数据功能。在识别车牌模块进行识别之后,判断当前车辆是否为停车场车辆,如果不是,就对已经创建的两个表格进行数据的更新,或者添加新的数据。具体实现代码如下:n依取生弊,;判,帆car&hpi.tatle,ca111.xber,).values.JnX幽力溯及训打下足任内停小场外一WComuraberincarsk:txtl三*T44ii.,tCarnunber46SRH*y=4EB#ff*fr)llkcorx9*Artcars=pi,t01e(,rnunberzdte,stats,I1.values#M肝zIHforcarincars:4VWIWJK4VWftfcMMifcarnumber-car0:416ihflrHHO.1.2.y-tincutit.OtCalc(carlal11IOCaItimR)breakKear二kcart1图3.29停车辆车辆判断XM版公卞N,如柒咐Xi*Y=O;y1txt2三,v:istr(3y),ttS=,%,;:.,locattijnc#阶停