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

您所在的位置:网站首页 停车场二维码是怎么做的 智能停车场车牌识别系统(一)

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

2024-07-09 18:54:18| 来源: 网络整理| 查看: 265

前段时间练习过的一个小项目,今天再看看,记录一下~ 开发工具准备: 开发工具:PyCharmPython内置模块: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模块) 初始化pygame游戏模块设置窗体名称设置窗体图标设置窗体大小和背景颜色在主线程中不断更新界面,如果遇到关闭窗口事件,就退出

在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

部分代码说明:

pygame.event.get():获取事件队列,使用for…in遍历所有事件;event.type:用于判断事件类型;pygame.QUIT为关闭pygame窗口事件

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

获取摄像头画面:(opencv-python模块) 导入opencv-python模块;初始化摄像头,并创建摄像头实例。VideoCapture( )方法可以采集摄像头捕获到的图像,其中参数为摄像头的ID,设置为0表示第一个摄像头,如果有多个摄像头就设置为摄像头ID;通过摄像头实例,在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: 进入官网:https://ai.baidu.com/,点击右上角的控制台,进行登录;登录成功之后,在左侧栏目中依次选择【人工智能】→【图像识别】再点击【创建应用】,应用名称和应用类型可以自己写,【接口选择】部分把【文字识别】里面的【车牌识别】选上,其他部分可以不管。创建成功之后界面如下:

在这里插入图片描述

再把这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=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 按钮模块:

由于百度AI接口每天会限制调用次数,所以在项目中添加“识别”按钮。当车牌出现在摄像头中的时候点击“识别”按钮,再调用识别车牌接口。

设置按钮的主要内容有:

设置按钮大小设置按钮在窗体中的位置填充按钮颜色把文本(“识别”两个字)写到按钮上设置文本在按钮上的位置将整体作为一个图像,绘制到窗体上

btn.py代码如下:

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)

在main.py主文件中调用按钮模块,在while循环里面创建“识别”按钮。并且判断单击的位置是否为按钮的位置,如果是,就调用车牌识别模块ocrutil的getcn()方法进行车牌识别,代码如下:

import pygame import pandas as pd from pandas import DataFrame import os import cv2 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() #文件路径 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)) # 创建识别按钮 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


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭