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

开发工具准备:
开发工具: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 实现代码

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

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 实现代码

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

1.2 实现结果

 三、申请百度key识别车牌

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

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

 


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

 1.2 识别车牌模块

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

1.3  按钮设置模块

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)

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

并且判断单击的位置是否为按钮的位置,如果是,就调用车牌识别模块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


1.5 效果显示

 如图所示车牌识别成功

1.6  百度识别的优势

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

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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青枫浦上看桃花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>