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 相关文章推荐
pycharm 使用心得(九)解决No Python interpreter selected的问题
Jun 06 Python
Python2.X/Python3.X中urllib库区别讲解
Dec 19 Python
详解python多线程、锁、event事件机制的简单使用
Apr 27 Python
Python使用cx_Oracle模块操作Oracle数据库详解
May 07 Python
Python3.6日志Logging模块简单用法示例
Jun 14 Python
python中单例常用的几种实现方法总结
Oct 13 Python
Python3.5面向对象编程图文与实例详解
Apr 24 Python
python 字典的打印实现
Sep 26 Python
解决pytorch 交叉熵损失输出为负数的问题
Jul 07 Python
Python pip install之SSL异常处理操作
Sep 03 Python
python获取字符串中的email
Mar 31 Python
Pygame游戏开发之太空射击实战敌人精灵篇
Aug 05 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
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
phpMyAdmin 安装配置方法和问题解决
2009/06/08 PHP
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
php实现的操作excel类详解
2016/01/15 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
js链表操作(实例讲解)
2017/08/29 Javascript
Vue数据监听方法watch的使用
2018/03/28 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
如何在selenium中使用js实现定位
2020/08/18 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
django用户登录和注销的实现方法
2018/07/16 Python
python3中rank函数的用法
2019/11/27 Python
python 实现屏幕录制示例
2019/12/23 Python
Django执行源生mysql语句实现过程解析
2020/11/12 Python
Python LMDB库的使用示例
2021/02/14 Python
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
2013/06/09 HTML / CSS
初三物理教学反思
2014/01/21 职场文书
办公室文员工作职责
2014/01/31 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
初一新生军训方案
2014/05/22 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
群众路线教育实践活动总结
2014/10/30 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
祝福语集锦:送给闺蜜的生日祝福语
2019/10/08 职场文书
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL
MySQL去除密码登录告警的方法
2022/04/20 MySQL