当前位置:   article > 正文

基于百度识别车牌-MySQL存储数据-pygarm界面实现的智能停车场付费系统_百度api实现摄像头识别车牌

百度api实现摄像头识别车牌

开发工具准备:
开发工具:PyCharm
Python内置模块:os、time、datetime
第三方模块:pygame、opencv-python、pandas、matplotlib、baidu-aip
pygame模块:实现项目主窗体
opencv-python模块:调用摄像头进行拍照
pandas模块:数据处理(创建保存数据文件)
baidu-aip模块:进行车牌识别获取车牌号
matplotlib模块:绘制柱状图

目录

一、实现窗体

1.1 实现代码

1.2 实现结果显示

1.3 背景颜色选择,选择自己喜欢的颜色

二、获取图片显示到窗口中

1.1 实现代码

1.2 实现结果

 三、申请百度key识别车牌

1.1 进入官网:https://ai.baidu.com/

 1.2 识别车牌模块

1.3  按钮设置模块

1.4 在main.py主文件中调用按钮模块,在while循环里面创建“识别”按钮。

1.5 效果显示

1.6  百度识别的优势


 

一、实现窗体

1.1 实现代码

  1. import pygame
  2. size=1000,484 # 窗体大小
  3. FPS=60 # 设置帧率(屏幕每秒的刷新次数)
  4. # 设置背景颜色
  5. #DARKBLUE=(73,119,142)
  6. DARKBLUE=(218,112,214)
  7. BG=DARKBLUE
  8. # 1.初始化
  9. pygame.init()
  10. # 2.设置窗体名称
  11. pygame.display.set_caption('智能停车场车牌识别计费系统')
  12. # 3.加载图片,设置图标
  13. ic_launcher=pygame.image.load('img/img.png')
  14. pygame.display.set_icon(ic_launcher)
  15. # 4.设置窗体大小、背景颜色
  16. screen=pygame.display.set_mode(size)
  17. screen.fill(BG)
  18. # 游戏循环帧率设置(控制程序运行时间)
  19. clock=pygame.time.Clock()
  20. # 主线程
  21. while True:
  22. for event in pygame.event.get():
  23. # 关闭页面游戏退出
  24. if event.type==pygame.QUIT:
  25. pygame.quit()
  26. exit()
  27. pygame.display.flip() # 更新界面
  28. clock.tick(FPS) # 控制游戏最大帧率为60

1.2 实现结果显示

 

 

1.3 背景颜色选择,选择自己喜欢的颜色

各种颜色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(黑)

二、获取图片显示到窗口中

1.1 实现代码

  1. import pygame
  2. import cv2
  3. size=1000,484 # 窗体大小
  4. FPS=60 # 设置帧率(屏幕每秒的刷新次数)
  5. # 设置背景颜色
  6. DARKBLUE=(73,119,142)
  7. BG=DARKBLUE
  8. # 1.初始化
  9. pygame.init()
  10. # 2.设置窗体名称
  11. pygame.display.set_caption('智能停车场车牌识别计费系统')
  12. # 3.加载图片,设置图标
  13. ic_launcher=pygame.image.load('./img/img.png')
  14. pygame.display.set_icon(ic_launcher)
  15. # 4.设置窗体大小、背景颜色
  16. screen=pygame.display.set_mode(size)
  17. screen.fill(BG)
  18. # 游戏循环帧率设置(控制程序运行时间)
  19. clock=pygame.time.Clock()
  20. # 主线程
  21. while True:
  22. # 加载图像
  23. image = pygame.image.load('./车牌图片/0.jpg')
  24. # 设置图片大小
  25. image = pygame.transform.scale(image, (640, 480))
  26. # 绘制视频画面
  27. screen.blit(image, (2, 2))
  28. for event in pygame.event.get():
  29. # 关闭页面游戏退出
  30. if event.type==pygame.QUIT:
  31. pygame.quit()
  32. exit()
  33. pygame.display.flip() # 更新界面
  34. clock.tick(FPS) # 控制游戏最大帧率为60

1.2 实现结果

 三、申请百度key识别车牌

1.1 进入官网:https://ai.baidu.com/

点击右上角的控制台,进行登录;登录成功之后,在左侧栏目中依次选择【人工智能】→【图像识别】再点击【创建应用】,应用名称和应用类型可以自己写,【接口选择】部分把【文字识别】里面的【车牌识别】选上,其他部分可以不管。创建成功之后界面如下:

 


再把这3个信息写到file/key.txt文件里面,格式如下:

 1.2 识别车牌模块

  1. from aip import AipOcr
  2. import os
  3. #百度识别车牌
  4. filename='file/key.txt' # 记录申请的key的文件位置
  5. if os.path.exists(filename): # 判断文件是否存在
  6. with open(filename,"r") as file: # 以只读方式打开文件
  7. dictkey=eval(file.readlines()[0]) # 读取全部内容,并且转换为字典
  8. APP_ID=dictkey['APP_ID'] # 获取申请的APIID
  9. API_KEY=dictkey['API_KEY'] # 获取申请的APIKEY
  10. SECRET_KEY=dictkey['SECRET_KEY'] # 获取申请的SECRETKEY
  11. else:
  12. print("请先在file目录下创建key.txt")
  13. #初始化AipOcr对象
  14. client=AipOcr(APP_ID,API_KEY,SECRET_KEY)
  15. #根据文件返回车牌号
  16. def getcn():
  17. # 读取图片
  18. with open('file/test.jpg','rb') as fp:
  19. image=fp.read()
  20. results=client.licensePlate(image)['words_result']['number'] # 调用车牌识别
  21. print('车牌号:'+results) # 输出车牌号
  22. return results

1.3  按钮设置模块

  1. import pygame
  2. #自定义按钮
  3. class Button():
  4. #msg为要在按钮中显示的文本
  5. def __init__(self,screen,centerxy,width,height,button_color,text_color,msg,size):
  6. ''' 初始化按钮的属性 '''
  7. self.screen=screen
  8. self.width,self.height=width,height # 设置按钮的宽和高
  9. self.button_color=button_color # 设置按钮的rect对象颜色为深蓝
  10. self.text_color=text_color # 设置文本的颜色为白色
  11. # 1.设置文本字体与大小
  12. self.font=pygame.font.SysFont('SimHei',size)
  13. # 2.设置按钮大小
  14. self.rect=pygame.Rect(0,0,self.width,self.height)
  15. # 3.创建按钮的rect对象,并设置按钮的中心位置
  16. self.rect.centerx=centerxy[0]-self.width/2+2
  17. self.rect.centery=centerxy[1]-self.height/2+2
  18. # 4.填充颜色
  19. self.screen.fill(self.button_color, self.rect)
  20. #渲染图像
  21. self.deal_msg(msg)
  22. def deal_msg(self,msg):
  23. '''将msg渲染为图像,并将其在按钮上居中'''
  24. # 5.将文本写到按钮上
  25. self.msg_img=self.font.render(msg,True,self.text_color,self.button_color)
  26. # 6.设置文本在按钮上的位置:文本的中心就是按钮的中心(即文本居中)
  27. self.msg_img_rect=self.msg_img.get_rect()
  28. self.msg_img_rect.center=self.rect.center
  29. # 7.绘制到屏幕上
  30. self.screen.blit(self.msg_img, self.msg_img_rect)

1.4 在main.py主文件中调用按钮模块,在while循环里面创建“识别”按钮。

并且判断单击的位置是否为按钮的位置,如果是,就调用车牌识别模块ocrutil的getcn()方法进行车牌识别,代码如下:

  1. import pygame
  2. import pandas as pd
  3. import os
  4. import btn
  5. import ocrutil
  6. size=1000,484 # 窗体大小
  7. FPS=60 # 设置帧率(屏幕每秒的刷新次数)
  8. # 设置背景颜色
  9. DARKBLUE=(73,119,142)
  10. BG=DARKBLUE
  11. #定义颜色
  12. BLAK=(0,0,0)
  13. WHITE=(255,255,255)
  14. GREEN=(0,255,0)
  15. BLUE=(72,61,139)
  16. GRAY=(96,96,96)
  17. RED=(220,20,60)
  18. YELLOW=(255,255,0)
  19. #获取当前项目的路径
  20. cdir=os.getcwd()
  21. # 1.初始化
  22. pygame.init()
  23. # 2.设置窗体名称
  24. pygame.display.set_caption('智能停车场车牌识别计费系统')
  25. # 3.加载图片,设置图标
  26. ic_launcher=pygame.image.load('img/img.png')
  27. pygame.display.set_icon(ic_launcher)
  28. # 4.设置窗体大小、背景颜色
  29. screen=pygame.display.set_mode(size)
  30. screen.fill(BG)
  31. # try:
  32. # cam=cv2.VideoCapture(0) # 创建摄像头实例
  33. # except:
  34. # print('请连接摄像头')
  35. # 游戏循环帧率设置(控制程序运行时间)
  36. clock=pygame.time.Clock()
  37. # 主线程
  38. while True:
  39. # # 从摄像头读取图片
  40. # sucess, img = cam.read()
  41. # # 保存图片
  42. # cv2.imwrite('file/test.jpg', img)
  43. # 加载图像
  44. image = pygame.image.load('./车牌图片/0.jpg')
  45. # 设置图片大小
  46. image = pygame.transform.scale(image, (640, 480))
  47. # 绘制视频画面
  48. screen.blit(image, (2, 2))
  49. # 创建识别按钮
  50. btn.Button(screen, (640, 480), 150, 60, BLUE, WHITE, "识别", 25)
  51. for event in pygame.event.get():
  52. # 关闭页面游戏退出
  53. if event.type==pygame.QUIT:
  54. pygame.quit()
  55. exit()
  56. elif event.type==pygame.MOUSEBUTTONDOWN:
  57. print(str(event.pos[0])+':'+str(event.pos[1]))
  58. #识别按钮
  59. if 492<=event.pos[0] and event.pos[0]<=642 and 422<=event.pos[1] and event.pos[1]<=482:
  60. print('点击识别')
  61. try:
  62. carnumber= ocrutil.getcn() #获取识别的车牌号
  63. except:
  64. print('识别错误')
  65. continue
  66. pass
  67. pygame.display.flip() # 更新界面
  68. clock.tick(FPS) # 控制游戏最大帧率为60

1.5 效果显示

 如图所示车牌识别成功

1.6  百度识别的优势

使用百度识别车牌的优势,能够快速准确的识别出车牌,缺点是学不到知识,如果想要学到知识,可以考虑用opencv实现车牌识别,或者运用深度学习的相关知识识别车牌识别,但都有各自的局限性,opencv 实现的需要多次调参,深度学习的模型训练耗时长。

四、后续持续更新中。。。。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/611910
推荐阅读
相关标签
  

闽ICP备14008679号