【功能超全】基于OpenCV车牌识别停车场管理系统软件开发【含python源码+PyqtUI界面+功能详解】-车牌识别python 深度学习实战项目-程序员宅基地

技术标签: python  OpenCV项目实战  车牌识别  深度学习实战  AI应用软件开发实战  停车场管理系统  opencv  

车牌识别基础功能演示

在这里插入图片描述

摘要:车牌识别系统(Vehicle License Plate Recognition,VLPR) 是指能够检测到受监控路面的车辆并自动提取车辆牌照信息(含汉字字符、英文字母、阿拉伯数字及号牌颜色)进行处理的技术。车牌识别是现代智能交通系统中的重要组成部分之一,应用十分广泛。本文详细介绍了车牌识别技术的基本实现原理,并且基于pythonpyqt开发了一套功能完整的车牌识别的停车场管理系统软件,实现了通过图片或者摄像头的方式进行进出停车场车辆车牌自动识别车牌登记信息录入已登记车辆有效期时间管理车辆进出记录管理以及外来车辆收费系统等功能。本文提供了完整的Python代码和使用教程,给感兴趣的小伙伴参考学习,完整的代码资源文件获取方式见文末

点击跳转至文末《完整源码及相关文件》获取

---

1. 前言

车牌识别系统(Vehicle License Plate Recognition,VLPR) 是指能够检测到受监控路面的车辆并自动提取车辆牌照信息(含汉字字符、英文字母、阿拉伯数字及号牌颜色)进行处理的技术。车牌识别是现代智能交通系统中的重要组成部分之一,应用十分广泛。它以数字图像处理、模式识别、计算机视觉等技术为基础,对摄像机所拍摄的车辆图像或者视频序列进行分析,得到每一辆汽车唯一的车牌号码,从而完成识别过程。

车牌识别技术主要应用领域有停车场收费管理,交通流量控制指标测量,车辆定位,汽车防盗,高速公路超速自动化监管、闯红灯电子警察、公路收费站等等功能。对于维护交通安全和城市治安,防止交通堵塞,实现交通自动化管理有着现实的意义。

博主根据车牌识别技术开发了本文中介绍的一套功能完整的停车场收费与车辆管理系统,功能主要包括:进出停车场车辆车牌自动识别车牌登记信息录入已登记车辆有效期时间管理车辆进出记录管理以及外来车辆收费系统等功能。

基于该车牌识别技术,博主经过长时间开发,总共写了近3000行代码,并且整个系统经过了详细的调试修改。最终开发了本文介绍的车牌识别停车场管理系统软件pythonPYQT5]】,功能主要包括:进出停车场车辆车牌自动识别车牌登记信息录入已登记车辆有效期时间管理车辆进出记录管理以及外来车辆收费系统等。

觉得不错的小伙伴,感谢点赞、关注加收藏哦!更多干货内容持续更新…

登录后的软件初始界面如下图所示:
在这里插入图片描述

2. 软件核心功能介绍及效果演示

软件主要功能包括以下几个部分:

1. 登录注册模块:提供系统的登录注册功能;
2. 车辆信息登记录入模块:用于进行特殊车辆、月租车辆或业主车辆的信息管理登记指定日期内车辆进出不收费,过期后正常收费;
3. 车牌进出识别模块:用于识别停车场出入车辆的车牌信息,同时记录出入时间,并显示出入信息、收费信息、停车场车位数量信息;
4. 已登记录入车辆信息管理模块:对已录入的车辆信息进行搜索、修改、删除等管理;
5. 车辆进出信息管理模块:记录车辆进出信息、并对进出车辆进出信息搜索、删除等管理
6. 自动收费模块:能够依据记录的出入时间自动计算出入车辆的需要缴纳的费用。

下面将详细介绍各个模块的基本功能:

2.1 登录注册功能模块

本软件提供了基础的登录注册功能,对于新用户需要先注册账号才可以进行登录。界面如下:
在这里插入图片描述

2.2 车辆信息登记录入功能模块

车辆信息登记录入功能的主要作用是对特殊车辆、月租车辆或业主车辆进行信息管理,车辆在登记日期区间内,可以免费进出停车场,但是过期后需正常缴费。可在信息管理界面修改日期信息。

车辆登记需要进行照片采集,可通过上传照片或者摄像头拍照的这两种方式进行采集,车牌会自动识别填入文本框内。然后选择车辆登记有效日期,选填人员信息等内容。点击保存按钮,即可将信息保存至数据库中。采集的车辆图片会默认存入data/imgs目录中,命名方式为车牌号.jpg
车牌信息登记的初始界面如下:
在这里插入图片描述
上传图片方式采集车辆图片方式如下:
在这里插入图片描述

摄像头采集车辆图片方式如下:
先开启摄像头,车辆处于合适位置后,点击拍照按钮采集,点击关闭摄像头按钮即可。
在这里插入图片描述
采集后的车辆图片存储位置data/imgs目录下:
在这里插入图片描述

2.3 车牌识别车辆出入及收费系统模块

可通过图片或者摄像头的方式,对出入的车辆进行车牌识别。并显示车辆信息收费信息停车场车位数目等。并且可以通过单选按钮来模拟车辆的进出,从而显示不同的出入信息。
费用计算方式:费用计算:不足半小时免费,超过每小时5元,不足1小时按1小时算,每24小时20元封顶。

图片方式来模拟车辆的进入与外出:
在这里插入图片描述
车辆进入显示的信息如下:
在这里插入图片描述

车辆外出显示信息如下:
注:登记车辆会显示登记剩余天数,外来车辆没有剩余天数显示。
在这里插入图片描述
在这里插入图片描述
摄像头方式来模拟车辆的进入与外出:
在这里插入图片描述

2.4 车辆信息数据管理模块

该界面主要是显示已登记的车辆信息,支持搜索日期、业主信息等修改,以及信息删除功能。
功能展示如下:
搜索功能
在这里插入图片描述
修改、删除功能:
修改方法:双击表中的内容后,点击修改按钮,然后点击保存操作按钮,更新数据库。
删除方法:选中要删除的行,然后点击删除按钮,然后点击保存操作按钮,更新数据库。
在这里插入图片描述
显示全部按钮用于显示全部已录入的车辆信息。

2.5 车辆出入记录模块

该界面用于记录车辆的出入信息:包括车牌、出入时间、车辆类型。
支持搜索删除信息功能。
**删除方法:**选中要删除的行,然后点击删除按钮,然后点击保存操作按钮,更新数据库。
功能展示如下:
在这里插入图片描述

3. 车牌识别基本原理介绍

3.1 基本原理

车牌识别系统(Vehicle License Plate Recognition,VLPR) 是指能够检测到受监控路面的车辆并自动提取车辆牌照信息(含汉字字符、英文字母、阿拉伯数字及号牌颜色)进行处理的技术。车牌识别技术应用十分广泛,它是以数字图像处理、模式识别、计算机视觉等技术为基础,对含有车辆号牌的图像进行分析处理,从而确定牌照在图像中的位置,并进一步提取和识别出文本字符,得到每一辆汽车唯一的车牌号码,从而完成识别过程。

车牌识别的常规处理过程流程包括:图像采集、图像预处理、车牌定位、字符分割、字符识别及结果输出等处理过程。如下图所示:
在这里插入图片描述
上述各个流程相辅相成,每个处理过程均须保证其高效和较高的抗干扰能力,只有这样才能保证识别功能达到满意的效果,其中车牌定位、字符分割及字符识别这三个步骤尤为重要。

车牌定位
车牌定位的主要工作是从静态图片或视频帧中找到车牌位置,并把车牌从图像中单独分离出来以供后续处理模块处理,车牌定位如下图所示:
在这里插入图片描述
车牌定位的本质就是车牌目标检测,目前车牌位置检测方法主要有以下两种:
【方法1】基于图形图像学的定位方法
该方法主要有以下几种方式:(1)基于颜色的定位方法,如彩色边缘算法、颜色距离和相似度算法等;(2)基于纹理的定位方法,如小波纹理、水平梯度差分纹理等;(3)基于边缘检测的定位方法;(4)基于数学形态的定位方法。

基于图形图像学的定位方法,容易受到外界干扰信息的干扰而造成定位失败。如基于颜色分析的定位方法中,如果车牌背景颜色与车牌颜色相近,则很难从背景中提取车牌;在基于边缘检测的方法中,车牌边缘的污损也很容易造成定位失败。外界干扰信息的干扰也会欺骗定位算法,使得定位算法生成过多的非车牌候选区域,增大了系统负荷。

【方法2】基于机器学习的定位方法
基于机器学习的方法有基于特征工程的定位方法和基于神经网络的定位方法等。例如通过opencv提供的基于haar特征的级联分类器,训练一个车牌定位系统。但该方法训练十分费时,分类定位的效率也较低。因此当前在目标定位方面,基于深度学习神经网络的方法是主流方法。深度学习的检测算法主要有Mobilene-SSD、YOLO-v5等,利用大批量的标注数据进行训练模型,然后利用训练好的模型进行车牌区域检测。

字符识别
当车牌区域被检测出来后,如何对这一区域中的字符进行识别,主要有两种思路:
【方法1】首先利用一系列字符分割的算法将车牌中的字符逐个分开,然后基于深度学习进行字符分类,得到识别结果;
【方法2】直接对车牌区域采用端到端的网络进行识别。

本文我们直接基于网络上开源的HyperLPR 高性能开源中文车牌识别框架,来进行车牌区域与字符识别,该方法支持支持python3,支持Windows Mac Linux 树莓派等。
具体使用方法如下:
【1】导入第三方库OpenCV和hyperlpr,并读取一张车牌图片调用架构中的车牌识别方法获得结果,示例代码如下:

#导入包
from hyperlpr import *
#导入OpenCV库
import cv2
#读入图片
image = cv2.imread("2.jpg")
#识别结果
print(HyperLPR_plate_recognition(image))

代码运行结果如下,包含了车牌字符:'京EL0662'置信度值:0.9737052321434021、车牌位置坐标:[255, 196, 367, 236]、图片尺寸形状:【3, 518, 690】(3通道,高518,宽690)信息。

(1, 3, 518, 690)
255 196 367 236
[['京EL0662', 0.9737052321434021, [255, 196, 367, 236]]]

下面我们将车牌的识别结果信息显示在图片上,代码如下:

# coding:utf-8
# 导入包
from hyperlpr import *
# 导入OpenCV库
import cv2
from PIL import Image, ImageDraw, ImageFont
import numpy as np

# 定义画图函数
def drawRectBox(image, rect, addText, fontC):
    """
    车牌识别,绘制矩形框与结果
    :param image: 原始图像
    :param rect: 矩形框坐标
    :param addText:车牌号
    :param fontC: 字体
    :return:
    """
    # 绘制车牌位置方框
    cv2.rectangle(image, (int(round(rect[0])), int(round(rect[1]))),
                 (int(round(rect[2]) + 15), int(round(rect[3]) + 15)),
                 (0, 0, 255), 2)
    # 绘制字体背景框
    cv2.rectangle(image, (int(rect[0] - 1), int(rect[1]) - 25), (int(rect[0] + 120), int(rect[1])), (0, 0, 255), -1, cv2.LINE_AA)
    img = Image.fromarray(image)
    draw = ImageDraw.Draw(img)
    draw.text((int(rect[0] + 1), int(rect[1] - 25)), addText, (255, 255, 255), font=fontC)
    imagex = np.array(img)
    return imagex

# 读取选择的图片
image = cv2.imread('2.jpg')
all_res = HyperLPR_plate_recognition(image)
# 车牌标注的字体
fontC = ImageFont.truetype("Font/platech.ttf", 20, 0)
# all_res为多个车牌信息的列表,取第一个车牌信息
lisence, conf, boxes = all_res[0]
image = drawRectBox(image, boxes, lisence, fontC)
cv2.imshow('RecognitionResult', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代码运行结果如下,可以看到车牌信息与方框被很好的标注在了图片上:
在这里插入图片描述
但是,在生活中,我们更多用到的是从视频中对车牌进行识别,因此我们只需要对视频的每一帧图片进行车牌识别检测,然后将检测信息绘制上去即可,核心代码如下:

# 读取摄像头
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
# 车牌标注的字体
fontC = ImageFont.truetype("Font/platech.ttf", 20, 0)

while True:
    ref, frame = cap.read()
    if ref:
        # 识别车牌
        all_res = HyperLPR_plate_recognition(frame)  
        if len(all_res) > 0:
            lisence, conf, boxes = all_res[0]  
            frame = drawRectBox(frame, boxes, lisence, fontC)
        cv2.imshow("RecognitionResult", frame)  
        if cv2.waitKey(10) & 0xFF == ord('q'):
            break  # 退出
    else:
        break

识别结果如下:
在这里插入图片描述

以上便是关于车牌识别的基本原理介绍与代码演示。基于该车牌识别技术,最终博主经过长时间开发,总共干了近3000行代码,并且整个系统经过了详细的调试修改。最终开发了本文介绍的车牌识别停车场管理系统软件pythonPYQT5]】,能够基于车牌识别很好的实现进出停车场车辆车牌自动识别车牌登记信息录入已登记车辆有效期时间管理车辆进出记录管理以及外来车辆收费系统等功能。

关于该停车系统的涉及到的完整源码、UI界面代码等相关文件,均已打包上传,感兴趣的小伙伴可以通过下载链接自行获取。

【获取方式】

关注文末GZH名片【阿旭算法与机器学习】,回复【车牌识别】可获取下载方式

本文涉及到的完整全部程序文件:包括python源码、UI文件、测试图片、视频等文件(见下图),均已打包上传,按说明配置好环境后,点击运行即可。

【pycharm打开项目界面如下】
在这里插入图片描述
文件夹下的资源显示如下图:
在这里插入图片描述

注意:该代码采用Pycharm+Python3.8开发,运行界面的主程序为main.py(不含登录界面);login_main.py(含登录界面)。为确保程序顺利运行,请按照环境配置.txt配置软件运行环境。

关注下方GZH名片【阿旭算法与机器学习】,回复【车牌识别】可获取下载方式


结束语

以上便是博主开发的关于基于OpenCV车牌识别停车场管理系统的全部内容,由于博主能力有限,难免有疏漏之处,希望小伙伴能批评指正
关于本篇文章大家有任何建议或意见,也欢迎在评论区留言交流!

觉得不错的小伙伴,感谢点赞、关注加收藏哦!更多干货内容持续更新…

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42589613/article/details/131087348

智能推荐

Eclipse中配置WebMagic(已配置好Maven)_使用eclipse搭建webmagic工程-程序员宅基地

文章浏览阅读364次。1.WebMagicWebMagic是一个简单灵活的Java爬虫框架。基于WebMagic,你可以快速开发出一个高效、易维护的爬虫。2.在Eclipse中配置WebMagic1.首先需要下载WebMagic的压缩包官网地址为:WebMagic官网最新版本为:WebMagic-0.7.3,找到对应版本,打开下载界面,注意,下载要选择Source code(zip)版本,随便下载到哪里都可以;2.下载好的压缩包需要解压,此时解压到的位置即为后续新建的Eclipse的project位置,比如我的Ecli_使用eclipse搭建webmagic工程

linux启动mysql_linux如何启动mysql服务_linux启动mysql服务命令是什么-系统城-程序员宅基地

文章浏览阅读1.9k次。mysql数据库是一种开放源代码的关系型数据库管理系统,有很多朋友都在使用。一些在linux系统上安装了mysql数据库的朋友,却不知道该如何对mysql数据库进行配置。那么linux该如何启动mysql服务呢?接下来小编就给大家带来linux启动mysql服务的命令教程。具体步骤如下:1、首先,我们需要修改mysql的配置文件,一般文件存放在/etc下面,文件名为my.cnf。2、对于mysql..._linux中 mysql 启动服务命令

php实现在线oj,详解OJ(Online Judge)中PHP代码的提交方法及要点-程序员宅基地

文章浏览阅读537次。详解OJ(Online Judge)中PHP代码的提交方法及要点Introduction of How to submit PHP code to Online Judge SystemsIntroduction of How to commit submission in PHP to Online Judge Systems在目前常用的在线oj中,codeforces、spoj、uva、zoj..._while(fscanf(stdin, "%d %d", $a, $b) == 2)

java快捷键调字体_设置MyEclipse编码、补全快捷键、字体大小-程序员宅基地

文章浏览阅读534次。一、设置MyEclipse编码(1)修改工作空间的编码方式:Window-->Preferences-->General-->Workspace-->Text file encoding(2)修改一类文件的编码方式:Window-->Preferences-->General-->content Types-->修改default Encoding(..._java修改快捷缩写内容

解析蓝牙原理_蓝牙原理图详解-程序员宅基地

文章浏览阅读1.4w次,点赞19次,收藏76次。1.前言市面上关于Android的技术书籍很多,几乎每本书也都会涉及到蓝牙开发,但均是上层应用级别的,而且篇幅也普遍短小。对于手机行业的开发者,要进行蓝牙模块的维护,就必须从Android系统底层,至少框架层开始,了解蓝牙的结构和代码实现原理。这方面的文档、网上的各个论坛的相关资料却少之又少。分析原因,大概因为虽然蓝牙协议是完整的,但是并没有具体的实现。蓝牙芯片公司只负责提供最底层的API_蓝牙原理图详解

从未在一起更让人遗憾_“从未在一起和最终没有在一起哪个更遗憾”-程序员宅基地

文章浏览阅读7.7k次。图/源于网络文/曲尚菇凉1.今天早上出门去逛街,在那家冰雪融城店里等待冰淇淋的时候,听到旁边两个女生在讨论很久之前的一期《奇葩说》。那期节目主持人给的辩论题是“从未在一起和最终没有在一起哪个更遗憾”,旁边其中一个女生说,她记得当时印象最深的是有个女孩子说了这样一句话。她说:“如果我喜欢一个人呢,我就从第一眼到最后一眼,把这个人爱够,把我的感觉用光,我只希望那些年让我成长的人是他,之后的那些年他喝过..._从未在一起更遗憾

随便推点

Spring Cloud Alibaba 介绍_sprngcloud alba-程序员宅基地

文章浏览阅读175次。Spring Cloud Alibaba 介绍Sping体系Spring 以 Bean(对象) 为中心,提供 IOC、AOP 等功能。Spring Boot 以 Application(应用) 为中心,提供自动配置、监控等功能。Spring Cloud 以 Service(服务) 为中心,提供服务的注册与发现、服务的调用与负载均衡等功能。Sping Cloud介绍官方介绍​ Tools for building common patterns in distributed systems_sprngcloud alba

测试 数据类型的一些测试点和经验_基础字段的测试点-程序员宅基地

文章浏览阅读3.2k次,点赞4次,收藏21次。我这里是根据之前在测试数据类项目过程中的一些总结经验和掉过个坑,记录一下,可以给其他人做个参考,没什么高深的东西,但是如果不注意这些细节点,后期也许会陷入无尽的扯皮当中。1 需求实现的准确度根据产品需求文档描述发现不明确不详细的或者存在歧义的地方一定要确认,例如数据表中的一些字段,与开发和产品确认一遍,如有第三方相关的,要和第三方确认,数据类项目需要的是细心,哪怕数据库中的一个字段如果没有提前对清楚,后期再重新补充,会投入更大的精力。2 数据的合理性根据业务场景/常识推理,提..._基础字段的测试点

一文看懂:行业分析怎么做?_码工小熊-程序员宅基地

文章浏览阅读491次。大家好,我是爱学习的小xiong熊妹。在工作和面试中,很多小伙伴会遇到“对XX行业进行分析”的要求。一听“行业分析”四个字,好多人会觉得特别高大上,不知道该怎么做。今天给大家一个懒人攻略,小伙伴们可以快速上手哦。一、什么是行业?在做数据分析的时候,“行业”两个字,一般指的是:围绕一个商品,从生产到销售相关的全部企业。以化妆品为例,站在消费者角度,就是简简单单的从商店里买了一支唇膏回去。可站在行业角度,从生产到销售,有相当多的企业在参与工作(如下图)在行业中,每个企业常常扮._码工小熊

LLaMA 简介:一个基础的、650 亿参数的大型语言模型_llma-程序员宅基地

文章浏览阅读1.6w次,点赞2次,收藏2次。还需要做更多的研究来解决大型语言模型中的偏见、有毒评论和幻觉的风险。我们在数万亿个令牌上训练我们的模型,并表明可以仅使用公开可用的数据集来训练最先进的模型,而无需诉诸专有和不可访问的数据集。在大型语言模型空间中训练像 LLaMA 这样的小型基础模型是可取的,因为它需要更少的计算能力和资源来测试新方法、验证他人的工作和探索新的用例。作为 Meta 对开放科学承诺的一部分,今天我们公开发布 LLaMA(大型语言模型元 AI),这是一种最先进的基础大型语言模型,旨在帮助研究人员推进他们在 AI 子领域的工作。_llma

强化学习在制造业领域的应用:智能制造的未来-程序员宅基地

文章浏览阅读223次,点赞3次,收藏5次。1.背景介绍制造业是国家经济发展的重要引擎,其产能和质量对于国家经济的稳定和发展具有重要意义。随着工业技术的不断发展,制造业的生产方式也不断发生变化。传统的制造业通常依赖于人工操作和手工艺,这种方式的缺点是低效率、低产量和不稳定的质量。随着信息化、智能化和网络化等新技术的出现,制造业开始向智能制造迈出了第一步。智能制造的核心是通过大数据、人工智能、计算机视觉等技术,实现制造过程的智能化、自动化...

ansible--安装与使用_pip安装ansible-程序员宅基地

文章浏览阅读938次。系列文章目录文章目录系列文章目录 前言 一、ansible是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言菜鸟一只,刚开始使用,仅作以后参考使用。边学习,边记录,介绍一下最基础的使用,可能会有理解不到位的地方,可以共同交流,废话不多说,走起。一、ansible 简介?ansible是自动化运维工具的一种,基于Python开发,可以实现批量系统配置,批量程序部署,批量运行命令,ansible是基于模块工作的,它本身没有批量部署的能力,真正.._pip安装ansible

推荐文章

热门文章

相关标签