基于OpenCV的车牌识别的设计与实现

随着大数据和互联网技术的快速发展,利用人工智能技术实现车牌信息的自动识别推荐成为研究的热门话题。通过对基于OpenCV的车牌识别系统的网站功能需要进行讨论研究,这种跨平台计算机视觉和机器学习非常适用于车牌自动识别技术,车牌识别系统的实现将会对当前出入各单位车辆的管理产生非常大的帮助。正是鉴于此种对潜在有明确场景的应用,完成设基于OpenCV的车牌识别系统,来更好的单位管理人员进行车辆出入的管理,实现车辆出入的自动化出入管理。

本系统使用当前大数据和人工智能环境下广泛使用的Python语言,配合灵活易用的MySQL数据库作为整个技术栈。采用面向对象的设计思路,结合经过验证的MVC开发模式,减少各个模块之间耦合,提升大型应用程序设计的编程实践。本系统主要有用户登录功能模块、入口车牌识别能模块、出口车牌识别功能模块、内部车辆信息管理模块、出行记录浏览功能模块和系统设置功能模块等。

本系统按照软件工程的设计思想,不断迭代功能模块并最终实现。本系统的实现将会使用户对车辆出入的管理得到更精准的掌控。

基于OpenCV的车牌识别的设计与实现_第1张图片

环境需要

1.运行环境:python3.7/python3.8。

2.IDE环境:pycharm+PostgreSQL10;

3.数据库工具:PostgreSQL10

4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;

5.数据库:MySql 5.7版本;

技术栈

后端:python+django

前端:vue+CSS+JavaScript+jQuery+elementui

基于OpenCV的车牌识别的设计与实现_第2张图片

系统需求分析

按照系统角色分类,主要分为普通用户与系统管理员用户,并根据用户操作把系统分为两大模块,其中对应的功能模块也设置为这两个角色对应的功能权限。普通用户界面主要展示管理人员发布的车辆信息,并可以查看车辆出行信息,让其方便的找到合适的出行信息并进行详情查看。设计中需要把界面设计的友好人性,整体界面符合互联网风格,从导航栏开始指引用户进行不同功能的操作。后台数据管理因为面对的信息量比较大,采用表格一览的方式进行展示,并能够随时导出各业务信息的详细数据,使得管理员能够通过各种方式进行业务数据的处理统计。

普通用户活动分析

用例图是分析用户的操作活动最为有效地方式,它展示了用户能够操作的各个功能模块,以及它和各个功能模块之间的权限关系。这些都可以在用例图上直接的展示。不同的人员对于系统的感知可以通过用例图进行清晰的感知和熟悉。本系统的普通用户和后台管理操作与检索功能都来自于后台数据库各数据信息的操作。但是由于普通和后台用户对系统业务数据的处理过程和显示格式的不同,需要把这不同类别的用户的用例图分开展示。通过前述的前台普通用户需要的功能权限,可以画出普通用户的用例图。普通用户界面主要提供普通用户查找各项数据信息如:车辆管理、出行查询、入口车牌识别、出口车牌识别,提供用户登录并进行个人账户信息的修改设置。

后台管理员可以随时处理普通用户的登记信息,并进行审核设置处理。还可以在同时进行车辆管理的过程中,方便后台管理员各项业务信息如其它车辆资料的处理和统计,这些都可以极大的提升车牌识别信息处理效率。通过前述的后台管理用户功能权限,可以画出后台管理用户的用例图。

后台管理员主要实现用户的登录验证,车辆信息的管理、用户信息的管理、系统角色信息的管理、角色权限信息的管理、入口车牌识别的管理和出口车牌识别的管理。

基于OpenCV的车牌识别的设计与实现_第3张图片

各功能模块设计

车辆出入管理模块

车辆出入管理模块是系统的核心模块,它主要实现了系统的入口车牌识别、出口车牌识别和出行记录查询。如图3-2所示。车牌识别这里采用图片识别模拟实现。大致上车牌识别分为:车牌提取,字符提取,字符识别。车牌提取:需要调用opencv里面图片处理的几个函数接口:

灰度处理-》竖向边缘检测(因为车牌大部分竖向的)-》二值化处理-》形态学处理-》车牌截取。

灰度处理是将一张三通道RGB颜色的图像变成单通道灰度图,为接下来的图像处理做准备。

Canny边缘检测算子的方向性质保证了很好的边缘强度估计,而且能同时产生边缘梯度方向和强度两个信息,即能在一定程度上抗噪声又能保持弱边缘,因此采用以canny算子做边缘检测。

Canny算法步骤:

(1)去噪

任何边缘检测算法都不可能在未经处理的原始数据上很好地處理,所以第一步是对原始数据与高斯 mask 作卷积,得到的图像与原始图像相比有些轻微的模糊(blurred)。这样,单独的一个像素雜訊在经过高斯平滑的图像上变得几乎没有影响。

(2)用一阶偏导的有限差分来计算梯度的幅值和方向。

(3)对梯度幅值进行非极大值抑制。

车牌细定位的目的是为下一步字符的分割做,就是要进一步去掉车牌冗余的部分。在一幅经过适当二值化处理 含有车牌的图像中,车牌区域具有以下三个基本特征:

1.在一个不大的区域内密集包含有多个字符;

2.车牌字符与车牌底色形成强烈对比;

3.车牌区域大小相对固定,区域长度和宽度成固定比例。

形态学处理通过膨胀连接相近的图像区域去除孤立细小的色块。通过这一步将所有的车牌号字符连通起来,这样为通过轮廓识别来选取车牌区域做准备。由于字符都是横向排列的,因此要连通这些字符只需进行横向的膨胀即可。

进行膨胀腐蚀操作需要注意的是要一次到位,如果一次膨胀没有连通到位,那么再次腐蚀将会将图像回复原装,因此我先做了2次迭代的膨胀,保证数字区域能连通起来,再进行4次迭代腐蚀,尽可能多的去除小块碎片,随后2次迭代膨胀,保证膨胀次数与腐蚀次数相同,以回复连通区域形态大小。

矩形轮廓查找与筛选:经过上一步操作,理论上来说车牌上的字符连通成一个矩形区域,通过轮廓查找我们可以定位该区域。当然,更为准确的说,经过上面的操作将原始图片中在X方向排列紧密的纵向边缘区域连通成了一个矩形区域最终,定位车牌所在的矩形区,

目录

1. 绪论1

1.1 研究背景1

1.2 研究现状2

1.2.1 国外现状2

1.2.2 国内现状2

1.3 研究思路与方案3

1.4 论文的内容及安排3

2. 系统分析与开发技术5

2.1 系统功能概述5

2.2 可行性分析5

2.2.1 经济可行性分析5

2.2.2 技术可行性分析5

2.2.3 操作可行性分析6

2.3 系统需求分析6

2.3.1 普通用户活动分析7

2.3.2 系统管理员活动分析8

2.4 系统开发技术8

2.4.1 Python概述8

2.4.2 MySQL概述9

2.4.2 OpenCV概述9

3. 系统设计10

3.1 系统整体功能模块设计10

3.2 各功能模块设计10

3.2.1 车辆出入管理模块10

3.2.2 车辆信息管理模块12

3.2.3 系统信息管理模块13

3.3 数据库设计13

3.3.1 数据库E-R图13

3.3.2 数据库表设计15

4. 系统实现17

4.1 用户登录册实现17

4.2 系统主界面实现17

4.3 入口车牌识别实现18

4.5 车辆信息管理实现21

5. 总结与展望22

5.1 总结22

5.2 展望22

参考文献23

致谢25

你可能感兴趣的:(Python,opencv,人工智能,计算机视觉,django,python)