python 实现的车牌识别项目


Posted in Python onJanuary 25, 2021

车牌识别在高速公路中有着广泛的应用,比如我们常见的电子收费(ETC)系统和交通违章车辆的检测,除此之外像小区或地下车库门禁也会用到,基本上凡是需要对车辆进行身份检测的地方都会用到。

简介

车牌识别系统(Vehicle License Plate Recognition)是计算机视频图像识别技术在车辆牌照识别中的一种应用,通常一个车牌识别系统主要包括以下这四个部分:

  • 车辆图像获取
  • 车牌定位
  • 车牌字符分割
  • 车牌字符识别

我们再来看一下百科中对车牌识别技术的描述:

车牌识别技术要求能够将运动中的汽车牌照从复杂背景中提取并识别出来,通过车牌提取、图像预处理、特征提取、车牌字符识别等技术,识别车辆牌号、颜色等信息,目前最新的技术水平为字母和数字的识别率可达到 99.7%,汉字的识别率可达到 99%。

实现方式

我们这里不做太复杂的车辆动态识别,只演示从图像中识别车牌信息,车牌识别功能的实现方式大致分为两种,一种是自己编写代码实现,另一种是借助第三方 API 接口实现。

自己实现

如果我们想要通过 Python 自己手动编码实现车牌识别功能,可以借助一些 Python 库,比如:OpenCV、TensorFlow 等,这种方式因为每一个功能点都需要我们自己编码实现,所有会相对复杂一些,另一方面如果我们想要保证识别的准确性,可能需要做大量的实验,也就是说会花费更多的时间。

第三方接口

现在已经有一些第三方平台实现好了车牌识别的功能,并且他们对外提供了 API 接口,我们只需要调用他们提供的接口即可,这种方式实现就相对简单了一些,并且通常接口提供方对外提供的接口功能的准确性也是基本可以保证的,原因很简单,如果接口功能太差的话,一是自己打脸,还有就是基本不会有什么人使用,也就失去了接口对外提供的价值了,另外第三方接口可能会收取一定费用,因此,如果现实中我们具体实现的话要综合考虑。

具体实现

综合上面的情况,我们这里采用第三方接口的方式来实现车牌识别的功能,接口提供方我们选择百度云提供的接口,百度云接口提供了免费额度,简单来说就是每天可以免费使用多少次,如果超过了这个次数就需要交钱什么的了,文档地址为:https://cloud.baidu.com/doc/OCR/index.html,下面来看一下具体实现过程。

SDK 安装

百度云 SDK 对多种语言提供了支持,比如:Python、Java、C++、IOS、Android 等,这里我们安装 Python 版的 SDK,安装很简单,使用 pip install baidu-aip 命令即可。使用Pycharm的话直接导入相关的包就行了,这个只要你baidu-aip包即可。

创建应用

SDK 安装好后,我们接着需要创建应用了,这里需要一个百度账号或百度云账号,如果没有的话自己注册一个即可,登录及注册地址为:https://login.bce.baidu.com/?redirect=http%3A%2F%2Fcloud.baidu.com%2Fcampaign%2Fcampus-2018%2Findex.html,登录之后,我们将鼠标移动到登录头像位置,接着在弹出菜单中单击用户中心,如下图所示:

python 实现的车牌识别项目

如果是首次进入的话,勾选一下相应信息,如下图所示:

python 实现的车牌识别项目

信息勾选完了之后,点击保存按钮。

接着将鼠标移动到左侧栏中 > 符号位置,再依次选择人工智能和文字识别,如下图所示:

python 实现的车牌识别项目

点击之后会进入到下图中:

python 实现的车牌识别项目

我们点击创建应用,进入下图中:

python 实现的车牌识别项目

这里我们只需要填一下应用名称和下面的应用描述即可,填写完毕之后点击立即创建。

创建完后,我们再返回应用列表,如下图所示:

python 实现的车牌识别项目

这里我们需要用到三个值:AppID、API Key 和 Secret Key。

具体实现

应用创建完了,我们就可以调用接口实现车牌识别功能了。

首先,我们要创建 AipOcr,AipOcr 是 OCR 的 Python SDK 客户端,为使用 OCR 的开发人员提供了一系列的交互方法,代码实现也比较简单,如下所示:

from aip import AipOcr

# 自己的 APPID AK SK
APP_ID = '自己的 App ID'
API_KEY = '自己的 Api Key'
SECRET_KEY = '自己的 Secret Key'

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

在上面代码中,常量 APP_ID、API_KEY 和 SECRET_KEY 就是我们在查看应用列表时说的需要用到的常量值,这些值均为字符串,用于标识用户,为访问做签名验证。单引号中内容应该填上刚才注册登入时获取的自己的ID和Key

如果我们需要配置 AipOcr 的网络请求参数,可以在构造 AipOcr 之后调用接口设置参数,目前支持两个参数,看一下代码实现:

# 建立连接的超时时间,单位为毫秒
client.setConnectionTimeoutInMillis(5000)
# 通过打开的连接传输数据的超时时间,单位为毫秒
client.setSocketTimeoutInMillis(5000)

总的来说通过接口方式实现车牌识别功能是比较简单的,以如下图为例:

python 实现的车牌识别项目

 实现总的代码如下:直接复制粘贴到你的Pycharm中即可使用(记得先导入baidu-aip 的包和下面3-5行改成自己的ID和Key)

from aip import AipOcr

APP_ID = '自己的 App ID'
API_KEY = '自己的 Api Key'
SECRET_KEY = '自己的 Secret Key'
# 创建客户端对象
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 建立连接的超时时间,单位为毫秒
client.setConnectionTimeoutInMillis(5000)
# 通过打开的连接传输数据的超时时间,单位为毫秒
client.setSocketTimeoutInMillis(5000)

# 读取图片
def get_file_content(filePath):
  with open(filePath, 'rb') as fp:
    return fp.read()

image = get_file_content('car.jpeg')
res = client.licensePlate(image)
print('车牌号码:' + res['words_result']['number'])
print('车牌颜色:' + res['words_result']['color'])

执行结果:

python 实现的车牌识别项目

上面代码实现的是对一张图片中的一个车牌进行识别,当然接口还支持对一张图片中的多个车牌进行识别,只需使用 licensePlate(image, options) 即可,
以如下图为例:

python 实现的车牌识别项目

实现代码如下:

from aip import AipOcr

APP_ID = '自己的 App ID'
API_KEY = '自己的 Api Key'
SECRET_KEY = '自己的 Secret Key'
# 创建客户端对象
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 建立连接的超时时间,单位为毫秒
client.setConnectionTimeoutInMillis(5000)
# 通过打开的连接传输数据的超时时间,单位为毫秒
client.setSocketTimeoutInMillis(5000)

# 读取图片
def get_file_content(filePath):
  with open(filePath, 'rb') as fp:
    return fp.read()

image = get_file_content('cars.png')
options = {}
# 参数 multi_detect 默认为 false
options['multi_detect'] = 'true'
res = client.licensePlate(image, options)
for wr in res['words_result']:
  print('车牌号码:' + wr['number'])
  print('车牌颜色:' + wr['color'])

执行结果:

python 实现的车牌识别项目

总结

本文我们先对车牌识别进行了一些介绍,之后利用百度云接口实现了单个和多个车牌的识别功能,通过本文我们可以对车牌识别的相关概念和具体实现有一些了解。

以上就是python 实现的车牌识别项目的详细内容,更多关于python 车牌识别的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
pyqt4教程之实现windows窗口小示例分享
Mar 07 Python
Python图片裁剪实例代码(如头像裁剪)
Jun 21 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
Jun 14 Python
python根据url地址下载小文件的实例
Dec 18 Python
python用opencv批量截取图像指定区域的方法
Jan 24 Python
python简单实现矩阵的乘,加,转置和逆运算示例
Jul 10 Python
Pytorch训练过程出现nan的解决方式
Jan 02 Python
什么是python的列表推导式
May 26 Python
Python中and和or如何使用
May 28 Python
selenium切换标签页解决get超时问题的完整代码
Aug 30 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 Python
Python 恐龙跑跑小游戏实现流程
Feb 15 Python
Python实现给PDF添加水印的方法
Jan 25 #Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 #Python
numba提升python运行速度的实例方法
Jan 25 #Python
python中K-means算法基础知识点
Jan 25 #Python
python中HTMLParser模块知识点总结
Jan 25 #Python
pycharm配置QtDesigner的超详细方法
Jan 25 #Python
Python扫描端口的实现
Jan 25 #Python
You might like
几种显示数据的方法的比较
2006/10/09 PHP
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
PHP中cookies使用指南
2007/03/16 PHP
PHP通过header实现文本文件下载的代码
2010/08/08 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
PHP写的求多项式导数的函数代码
2012/07/04 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
深入理解PHP变量的值类型和引用类型
2015/10/21 PHP
使用PHP反射机制来构造"CREATE TABLE"的sql语句
2019/03/21 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
js实现iframe动态调整高度的代码
2008/01/06 Javascript
jQuery 使用手册(五)
2009/09/23 Javascript
JavaScript 布尔操作符解析  && || !
2012/08/10 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
[09:34]2018DOTA2国际邀请赛寻真——永不放弃的iG
2018/08/14 DOTA
python使用opencv读取图片的实例
2017/08/17 Python
Python对List中的元素排序的方法
2018/04/01 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
Django单元测试工具test client使用详解
2019/08/02 Python
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
Rag & Bone官网:瑞格布恩高级成衣
2018/04/19 全球购物
Tostadora意大利:定制T恤
2019/04/08 全球购物
就业推荐自我鉴定
2013/10/06 职场文书
承诺书模板
2014/08/30 职场文书
《作风建设永远在路上》心得体会
2016/01/21 职场文书
小学二年级语文教学反思
2016/03/03 职场文书