赞
踩
开发工具准备:
开发工具:PyCharm
Python内置模块:os、time、datetime
第三方模块:pygame、opencv-python、pandas、matplotlib、baidu-aip
pygame模块:实现项目主窗体
opencv-python模块:调用摄像头进行拍照
pandas模块:数据处理(创建保存数据文件)
baidu-aip模块:进行车牌识别获取车牌号
matplotlib模块:绘制柱状图
目录
1.1 进入官网:https://ai.baidu.com/
1.4 在main.py主文件中调用按钮模块,在while循环里面创建“识别”按钮。
- import pygame
-
- size=1000,484 # 窗体大小
- FPS=60 # 设置帧率(屏幕每秒的刷新次数)
- # 设置背景颜色
- #DARKBLUE=(73,119,142)
- DARKBLUE=(218,112,214)
- BG=DARKBLUE
-
- # 1.初始化
- pygame.init()
- # 2.设置窗体名称
- pygame.display.set_caption('智能停车场车牌识别计费系统')
- # 3.加载图片,设置图标
- ic_launcher=pygame.image.load('img/img.png')
- pygame.display.set_icon(ic_launcher)
- # 4.设置窗体大小、背景颜色
- screen=pygame.display.set_mode(size)
- screen.fill(BG)
-
- # 游戏循环帧率设置(控制程序运行时间)
- clock=pygame.time.Clock()
-
- # 主线程
- while True:
-
- for event in pygame.event.get():
- # 关闭页面游戏退出
- if event.type==pygame.QUIT:
- pygame.quit()
- exit()
-
- pygame.display.flip() # 更新界面
- clock.tick(FPS) # 控制游戏最大帧率为60
各种颜色RGB值
■RGB(255,192,203)■★●◆pink(粉红)
■RGB(220,20,60)■★●◆crimson(腥红)
■RGB(255,240,245)■★●◆lavenderblush(苍白的紫罗兰红)
■RGB(219,112,147)■★●◆palevioletred(脸红的淡紫红)
■RGB(255,105,180)■★●◆hotpink(热情的粉红)
■RGB(199,21,133)■★●◆mediumvioletred(适中的紫罗兰红)
■RGB(218,112,214)■★●◆orchid(兰花紫)
■RGB(216,191,216)■★●◆thistle(苍紫)
■RGB(221,160,221)■★●◆plum(轻紫)
■RGB(238,130,238)■★●◆violet(紫罗兰)
■RGB(255,0,255)■★●◆magenta(洋紫)
■RGB(255,0,255)■★●◆fuchsia(紫红)
■RGB(139,0,139)■★●◆darkmagenta(深洋紫)
■RGB(128,0,128)■★●◆purple(紫)
■RGB(186,85,211)■★●◆mediumorchid(适中的兰花紫)
■RGB(148,0,211)■★●◆darkviolet(深紫罗兰)
■RGB(75,0,130)■★●◆indigo(靓青)
■RGB(138,43,226)■★●◆blueviolet(蓝紫罗兰)
■RGB(147,112,219)■★●◆mediumpurple(适中的紫)
■RGB(123,104,238)■★●◆mediumslateblue(适中的的板岩蓝)
■RGB(106,90,205)■★●◆slateblue(板岩蓝)
■RGB(72,61,139)■★●◆darkslateblue(深板岩蓝)
■RGB(230,230,250)■★●◆lavender(熏衣草花的淡紫)
■RGB(248,248,255)■★●◆ghostwhite(幽灵白)
■RGB(0,0,255)■★●◆blue(蓝)
■RGB(0,0,205)■★●◆mediumblue(适中的蓝)
■RGB(25,25,112)■★●◆midnightblue(午夜蓝)
■RGB(0,0,139)■★●◆darkblue(深蓝)
■RGB(0,0,128)■★●◆navy(海军蓝)
■RGB(65,105,225)■★●◆royalblue(皇家蓝)
■RGB(100,149,237)■★●◆cornflowerblue(矢车菊蓝)
■RGB(176,196,222)■★●◆lightsteelblue(淡钢蓝)
■RGB(119,136,153)■★●◆lightslategray(浅石板灰)
■RGB(112,128,144)■★●◆slategray(石板灰)
■RGB(30,144,255)■★●◆dodgerblue(道奇蓝)
■RGB(240,248,255)■★●◆aliceblue(爱丽丝蓝)
■RGB(70,130,180)■★●◆steelblue(钢蓝)
■RGB(135,206,250)■★●◆lightskyblue(淡天蓝)
■RGB(135,206,235)■★●◆skyblue(天蓝)
■RGB(0,191,255)■★●◆deepskyblue(深天蓝)
■RGB(173,216,230)■★●◆lightblue(淡蓝)
■RGB(176,224,230)■★●◆powderblue(火药蓝)
■RGB(95,158,160)■★●◆cadetblue(军校蓝)
■RGB(240,255,255)■★●◆azure(蔚蓝)
■RGB(224,255,255)■★●◆lightcyan(淡青)
■RGB(175,238,238)■★●◆paleturquoise(苍白的宝石绿)
■RGB(0,255,255)■★●◆cyan(青)
■RGB(0,255,255)■★●◆aqua(水绿)
■RGB(0,206,209)■★●◆darkturquoise(深宝石绿)
■RGB(47,79,79)■★●◆darkslategray(深石板灰)
■RGB(0,139,139)■★●◆darkcyan(深青色)
■RGB(0,128,128)■★●◆teal(水鸭色)
■RGB(72,209,204)■★●◆mediumturquoise(适中的宝石绿)
■RGB(32,178,170)■★●◆lightseagreen(浅海洋绿)
■RGB(64,224,208)■★●◆turquoise(宝石绿)
■RGB(127,255,212)■★●◆aquamarine(碧绿)
■RGB(102,205,170)■★●◆mediumaquamarine(适中的碧绿)
■RGB(0,250,154)■★●◆mediumspringgreen(适中的春天绿)
■RGB(245,255,250)■★●◆mintcream(薄荷奶油)
■RGB(0,255,127)■★●◆springgreen(春天绿)
■RGB(60,179,113)■★●◆mediumseagreen(适中的海洋绿)
■RGB(46,139,87)■★●◆seagreen(海洋绿)
■RGB(240,255,240)■★●◆honeydew(浅粉红)
■RGB(144,238,144)■★●◆lightgreen(浅绿)
■RGB(152,251,152)■★●◆palegreen(苍白绿)
■RGB(143,188,143)■★●◆darkseagreen(深海洋绿)
■RGB(50,205,50)■★●◆limegreen(柠檬绿)
■RGB(0,255,0)■★●◆lime(柠檬)
■RGB(34,139,34)■★●◆forestgreen(森林绿)
■RGB(127,255,0)■★●◆chartreuse(查特酒绿)
■RGB(124,252,0)■★●◆lawngreen(草坪绿)
■RGB(173,255,47)■★●◆greenyellow(绿黄)
■RGB(85,107,47)■★●◆darkolivegreen(深橄榄绿)
■RGB(154,205,50)■★●◆yellowgreen(黄绿)
■RGB(107,142,35)■★●◆olivedrab(橄榄褐)
■RGB(245,245,220)■★●◆beige(米色)
■RGB(250,250,210)■★●◆lightgoldenrodyellow(浅秋黄)
■RGB(255,255,240)■★●◆ivory(象牙白)
■RGB(255,255,224)■★●◆lightyellow(浅黄)
■RGB(255,255,0)■★●◆yellow(黄)
■RGB(128,128,0)■★●◆olive(橄榄)
■RGB(189,183,107)■★●◆darkkhaki(深卡其布)
■RGB(255,250,205)■★●◆lemonchiffon(柠檬沙)
■RGB(238,232,170)■★●◆palegoldenrod(灰秋)
■RGB(240,230,140)■★●◆khaki(卡其布)
■RGB(255,215,0)■★●◆gold(金)
■RGB(255,248,220)■★●◆cornsilk(玉米)
■RGB(218,165,32)■★●◆goldenrod(秋)
■RGB(184,134,11)■★●◆darkgoldenrod(深秋)
■RGB(255,250,240)■★●◆floralwhite(白花)
■RGB(253,245,230)■★●◆oldlace(浅米色)
■RGB(245,222,179)■★●◆wheat(小麦)
■RGB(255,228,181)■★●◆moccasin(鹿皮)
■RGB(255,165,0)■★●◆orange(橙)
■RGB(255,239,213)■★●◆papayawhip(木瓜)
■RGB(255,235,205)■★●◆blanchedalmond(漂白后的杏仁)
■RGB(255,222,173)■★●◆navajowhite(耐而节白)
■RGB(250,235,215)■★●◆antiquewhite(古白)
■RGB(210,180,140)■★●◆tan(晒)
■RGB(222,184,135)■★●◆burlywood(树干)
■RGB(255,228,196)■★●◆bisque(乳脂)
■RGB(255,140,0)■★●◆darkorange(深橙色)
■RGB(250,240,230)■★●◆linen(亚麻)
■RGB(205,133,63)■★●◆peru(秘鲁)
■RGB(244,164,96)■★●◆sandybrown(沙棕)
■RGB(210,105,30)■★●◆chocolate(巧克力)
■RGB(192,14,235)■★●◆chocolatesaddlebrown(马鞍棕)
■RGB(255,245,238)■★●◆seashell(海贝)
■RGB(160,82,45)■★●◆sienna(土黄赭)
■RGB(255,160,122)■★●◆lightsalmon(浅肉)
■RGB(255,127,80)■★●◆coral(珊瑚)
■RGB(255,69,0)■★●◆orangered(橙红)
■RGB(255,99,71)■★●◆tomato(番茄色)
■RGB(255,228,225)■★●◆mistyrose(雾中玫瑰)
■RGB(250,128,114)■★●◆salmon(肉)
■RGB(255,250,250)■★●◆snow(雪)
■RGB(240,128,128)■★●◆lightcoral(浅珊瑚)
■RGB(188,143,143)■★●◆rosybrown(玫瑰棕)
■RGB(205,92,92)■★●◆indianred(浅粉红)
■RGB(255,0,0)■★●◆red(红)
■RGB(165,42,42)■★●◆brown(棕)
■RGB(178,34,34)■★●◆firebrick(火砖)
■RGB(139,0,0)■★●◆darkred(深红)
■RGB(128,0,0)■★●◆maroon(粟色)
■RGB(255,255,255)■★●◆white(白)
■RGB(245,245,245)■★●◆whitesmoke(烟白)
■RGB(220,220,220)■★●◆gainsboro(赶死部落)
■RGB(211,211,211)■★●◆lightgrey(浅灰)
■RGB(192,192,192)■★●◆silver(银白)
■RGB(169,169,169)■★●◆darkgray(深灰)
■RGB(105,105,105)■★●◆dimgray(暗灰)
■RGB(0,0,0)■★●◆black(黑)
- import pygame
-
- import cv2
-
- size=1000,484 # 窗体大小
- FPS=60 # 设置帧率(屏幕每秒的刷新次数)
- # 设置背景颜色
- DARKBLUE=(73,119,142)
- BG=DARKBLUE
-
- # 1.初始化
- pygame.init()
- # 2.设置窗体名称
- pygame.display.set_caption('智能停车场车牌识别计费系统')
- # 3.加载图片,设置图标
- ic_launcher=pygame.image.load('./img/img.png')
- pygame.display.set_icon(ic_launcher)
- # 4.设置窗体大小、背景颜色
- screen=pygame.display.set_mode(size)
- screen.fill(BG)
-
-
-
- # 游戏循环帧率设置(控制程序运行时间)
- clock=pygame.time.Clock()
-
- # 主线程
- while True:
-
-
- # 加载图像
- image = pygame.image.load('./车牌图片/0.jpg')
- # 设置图片大小
- image = pygame.transform.scale(image, (640, 480))
- # 绘制视频画面
- screen.blit(image, (2, 2))
-
- for event in pygame.event.get():
- # 关闭页面游戏退出
- if event.type==pygame.QUIT:
- pygame.quit()
- exit()
-
- pygame.display.flip() # 更新界面
- clock.tick(FPS) # 控制游戏最大帧率为60
点击右上角的控制台,进行登录;登录成功之后,在左侧栏目中依次选择【人工智能】→【图像识别】再点击【创建应用】,应用名称和应用类型可以自己写,【接口选择】部分把【文字识别】里面的【车牌识别】选上,其他部分可以不管。创建成功之后界面如下:
再把这3个信息写到file/key.txt文件里面,格式如下:
- from aip import AipOcr
- import os
-
- #百度识别车牌
- filename='file/key.txt' # 记录申请的key的文件位置
- if os.path.exists(filename): # 判断文件是否存在
- with open(filename,"r") as file: # 以只读方式打开文件
- dictkey=eval(file.readlines()[0]) # 读取全部内容,并且转换为字典
- APP_ID=dictkey['APP_ID'] # 获取申请的APIID
- API_KEY=dictkey['API_KEY'] # 获取申请的APIKEY
- SECRET_KEY=dictkey['SECRET_KEY'] # 获取申请的SECRETKEY
- else:
- print("请先在file目录下创建key.txt")
-
- #初始化AipOcr对象
- client=AipOcr(APP_ID,API_KEY,SECRET_KEY)
-
-
- #根据文件返回车牌号
- def getcn():
- # 读取图片
- with open('file/test.jpg','rb') as fp:
- image=fp.read()
-
- results=client.licensePlate(image)['words_result']['number'] # 调用车牌识别
-
- print('车牌号:'+results) # 输出车牌号
- return results
-
- import pygame
-
- #自定义按钮
- class Button():
- #msg为要在按钮中显示的文本
- def __init__(self,screen,centerxy,width,height,button_color,text_color,msg,size):
- ''' 初始化按钮的属性 '''
- self.screen=screen
- self.width,self.height=width,height # 设置按钮的宽和高
- self.button_color=button_color # 设置按钮的rect对象颜色为深蓝
- self.text_color=text_color # 设置文本的颜色为白色
-
- # 1.设置文本字体与大小
- self.font=pygame.font.SysFont('SimHei',size)
- # 2.设置按钮大小
- self.rect=pygame.Rect(0,0,self.width,self.height)
- # 3.创建按钮的rect对象,并设置按钮的中心位置
- self.rect.centerx=centerxy[0]-self.width/2+2
- self.rect.centery=centerxy[1]-self.height/2+2
- # 4.填充颜色
- self.screen.fill(self.button_color, self.rect)
-
- #渲染图像
- self.deal_msg(msg)
-
- def deal_msg(self,msg):
- '''将msg渲染为图像,并将其在按钮上居中'''
- # 5.将文本写到按钮上
- self.msg_img=self.font.render(msg,True,self.text_color,self.button_color)
- # 6.设置文本在按钮上的位置:文本的中心就是按钮的中心(即文本居中)
- self.msg_img_rect=self.msg_img.get_rect()
- self.msg_img_rect.center=self.rect.center
- # 7.绘制到屏幕上
- self.screen.blit(self.msg_img, self.msg_img_rect)
并且判断单击的位置是否为按钮的位置,如果是,就调用车牌识别模块ocrutil的getcn()方法进行车牌识别,代码如下:
- import pygame
-
- import pandas as pd
- import os
-
- import btn
- import ocrutil
-
- size=1000,484 # 窗体大小
- FPS=60 # 设置帧率(屏幕每秒的刷新次数)
- # 设置背景颜色
- DARKBLUE=(73,119,142)
- BG=DARKBLUE
- #定义颜色
- BLAK=(0,0,0)
- WHITE=(255,255,255)
- GREEN=(0,255,0)
- BLUE=(72,61,139)
- GRAY=(96,96,96)
- RED=(220,20,60)
- YELLOW=(255,255,0)
-
- #获取当前项目的路径
- cdir=os.getcwd()
-
-
- # 1.初始化
- pygame.init()
- # 2.设置窗体名称
- pygame.display.set_caption('智能停车场车牌识别计费系统')
- # 3.加载图片,设置图标
- ic_launcher=pygame.image.load('img/img.png')
- pygame.display.set_icon(ic_launcher)
- # 4.设置窗体大小、背景颜色
- screen=pygame.display.set_mode(size)
- screen.fill(BG)
-
- # try:
- # cam=cv2.VideoCapture(0) # 创建摄像头实例
- # except:
- # print('请连接摄像头')
-
- # 游戏循环帧率设置(控制程序运行时间)
- clock=pygame.time.Clock()
-
- # 主线程
- while True:
-
- # # 从摄像头读取图片
- # sucess, img = cam.read()
- # # 保存图片
- # cv2.imwrite('file/test.jpg', img)
- # 加载图像
- image = pygame.image.load('./车牌图片/0.jpg')
- # 设置图片大小
- image = pygame.transform.scale(image, (640, 480))
- # 绘制视频画面
- screen.blit(image, (2, 2))
-
- # 创建识别按钮
- btn.Button(screen, (640, 480), 150, 60, BLUE, WHITE, "识别", 25)
-
- for event in pygame.event.get():
- # 关闭页面游戏退出
- if event.type==pygame.QUIT:
- pygame.quit()
- exit()
- elif event.type==pygame.MOUSEBUTTONDOWN:
- print(str(event.pos[0])+':'+str(event.pos[1]))
- #识别按钮
- if 492<=event.pos[0] and event.pos[0]<=642 and 422<=event.pos[1] and event.pos[1]<=482:
- print('点击识别')
- try:
- carnumber= ocrutil.getcn() #获取识别的车牌号
- except:
- print('识别错误')
- continue
- pass
-
- pygame.display.flip() # 更新界面
- clock.tick(FPS) # 控制游戏最大帧率为60
-
-
如图所示车牌识别成功
使用百度识别车牌的优势,能够快速准确的识别出车牌,缺点是学不到知识,如果想要学到知识,可以考虑用opencv实现车牌识别,或者运用深度学习的相关知识识别车牌识别,但都有各自的局限性,opencv 实现的需要多次调参,深度学习的模型训练耗时长。
四、后续持续更新中。。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。