智能停车场车牌识别系统(一)

前段时间练习过的一个小项目,今天再看看,记录一下~

开发工具准备:

  • 开发工具:PyCharm
  • Python内置模块:os、time、datetime
  • 第三方模块:pygame、opencv-python、pandas、matplotlib、baidu-aip

pygame模块:实现项目主窗体
opencv-python模块:调用摄像头进行拍照
pandas模块:数据处理(创建保存数据文件)
baidu-aip模块:进行车牌识别获取车牌号
matplotlib模块:绘制柱状图

项目组织结构:

在这里插入图片描述
说明:

  • datefile文件夹:保存车辆信息表的xlsx文件
  • file文件夹:保存图片文件夹。ic_launcher.jpg是窗体的右上角图标文件;income.png是实现收入统计的柱状图(下一篇文章实现);key.txt是使用百度的图片识别AI接口申请的key;test.jpg保存的是摄像头抓取的图片
  • venv文件夹:项目所需要的各种模块,即项目运行环境
  • btn.py文件:按钮模块
  • main.py文件:程序主文件
  • ocrutil.py文件:车牌识别模块
  • timeutil.py文件:时间处理模块

实现系统主窗体:(pygame模块)

  1. 初始化pygame游戏模块
  2. 设置窗体名称
  3. 设置窗体图标
  4. 设置窗体大小和背景颜色
  5. 在主线程中不断更新界面,如果遇到关闭窗口事件,就退出

在main.py文件写入如下代码:(可以作为实现系统窗体的主要框架)

import pygame

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('file/ic_launcher.jpg')
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. pygame.event.get():获取事件队列,使用for…in遍历所有事件;
  2. event.type:用于判断事件类型;
  3. pygame.QUIT为关闭pygame窗口事件

运行效果如图:
在这里插入图片描述

获取摄像头画面:(opencv-python模块)

  1. 导入opencv-python模块;
  2. 初始化摄像头,并创建摄像头实例。VideoCapture( )方法可以采集摄像头捕获到的图像,其中参数为摄像头的ID,设置为0表示第一个摄像头,如果有多个摄像头就设置为摄像头ID;
  3. 通过摄像头实例,在while循环中获取图片并保存在file文件夹的test.jpg中,然后把图片绘制到窗体上。

此时的main.py代码如下:

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('file/ic_launcher.jpg')
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('file/test.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

运行效果如图:

在这里插入图片描述

注意:如果运行失败,可能是自己电脑的摄像头驱动有问题,需要重新下载。我当时就遇到了这个问题。
下载网址:https://newsupport.lenovo.com.cn/driveDownloads_index.html
点击【在站内查找设备驱动】,然后按照主机编号和电脑型号下载摄像头驱动

创建保存数据文件:(pandas模块)

该项目需要创建两个表,一个用于保存当前停车场里的车辆信息,另一个用于保存所有进入过停车场的车辆进出信息。主要用到pandas模块和os模块。
main.py文件代码如下:

import pygame

import pandas as pd
from pandas import DataFrame
import os
import cv2


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()
#文件路径
path=cdir+'/datafile/'
if not os.path.exists(path):
    os.makedirs(path) #根据路径建立文件夹
    #车牌号、日期、价格、状态
    carnfile=pd.DataFrame(columns=['carnumber','date','price','state'])
    #生成.xlsx文件
    carnfile.to_excel(path+'停车场车辆表.xlsx',sheet_name='data')
    carnfile.to_excel(path+'停车场信息表.xlsx', sheet_name='data')

# 1.初始化
pygame.init()
# 2.设置窗体名称
pygame.display.set_caption('智能停车场车牌识别计费系统')
# 3.加载图片,设置图标
ic_launcher=pygame.image.load('file/ic_launcher.jpg')
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('file/test.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


运行效果如图:

在这里插入图片描述

识别车牌(核心功能):

申请百度的图片识别Key:

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

在这里插入图片描述

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

在这里插入图片描述

识别车牌模块:

在ocrutil.py文件中实现车牌识别,调用百度AI接口识别图片,获取车牌号,代码如下:

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
评论 55
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值