如何用Python识别车牌的示例代码
作者:蚂蚁爱Python 发布时间:2023-03-09 16:06:29
车牌识别在高速公路中有着广泛的应用,比如我们常见的电子收费(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 命令即可,SDK 支持 Python 的版本为:2.7+ 与 3.x,SDK 目录结构如下:
├── README.md
├── aip // SDK 目录│
├── __init__.py // 导出类│
├── base.py // aip 基类│
├── http.py // http 请求│
└── ocr.py //OCR└── setup.py // setuptools 安装
创建应用
SDK 安装好后,我们接着需要创建应用了,这里需要一个百度账号或百度云账号,如果没有的话自己注册一个即可,登录及注册
地址为:https://login.bce.baidu.com/?redirect=http%3A%2F%2Fcloud.baidu.com%2Fcampaign%2Fcampus-2018%2Findex.html,登录之后,我们将鼠标移动到登录头像位置,接着在弹出菜单中单击用户中心,如下图所示:
如果是首次进入的话,勾选一下相应信息,如下图所示:
信息勾选完了之后,点击保存按钮。
接着将鼠标移动到左侧栏中 > 符号位置,再依次选择人工智能和文字识别,如下图所示:
点击之后会进入到下图中:
我们点击创建应用,进入下图中:
这里我们只需要填一下应用名称和下面的应用描述即可,填写完毕之后点击立即创建。
创建完后,我们再返回应用列表,如下图所示:
这里我们需要用到三个值:AppID、API Key 和 Secret Key。
具体实现
应用创建完了,我们就可以调用接口实现车牌识别功能了。
首先,我们要创建 AipOcr,AipOcr 是 OCR 的 Python SDK 客户端,为使用 OCR 的开发人员提供了一系列的交互方法,代码实
现也比较简单,如下所示:
from aip import AipOcr
# 自己的 APPID AK SKAPP_
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 就是我们在查看应用列表时说的需要用到的常量值,这些值均为字符
串,用于标识用户,为访问做签名验证。
如果我们需要配置 AipOcr 的网络请求参数,可以在构造 AipOcr 之后调用接口设置参数,目前支持两个参数,看一下代码实现:
# 建立连接的超时时间,单位为毫秒
client.setConnectionTimeoutInMillis(5000)
# 通过打开的连接传输数据的超时时间,单位为毫秒client.setSocketTimeoutInMillis(5000)
总的来说通过接口方式实现车牌识别功能是比较简单的,以如下图为例:
实现代码如下:
from aip
import AipOcrAPP_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'])
执行结果:
车牌号码:川QK9777车牌颜色:blue
上面代码实现的是对一张图片中的一个车牌进行识别,当然接口还支持对一张图片中的多个车牌进行识别,只需使用
licensePlate(image, options)
即可, 以如下图为例:
实现代码如下:
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 默认为 falseoptions['multi_detect'] = 'true'res = client.licensePlate(image, options)for wr in res['words_result']: print('车牌号码:' + wr['number']) print('车牌颜色:' + wr['color'])
执行结果:
车牌号码:京N6HZ61
车牌颜色:blue
车牌号码:鲁NS1A26
车牌颜色:blue
最后
本文我们先对车牌识别进行了一些介绍,之后利用百度云接口实现了单个和多个车牌的识别功能,通过本文我们可以对车牌识别的相关概念和具体实现有一些了解,更多相关Python 识别车牌内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:https://blog.csdn.net/xff123456_/article/details/124274422
猜你喜欢
- 本文实例讲述了Python基于time模块求程序运行时间的方法。分享给大家供大家参考,具体如下:要记录程序的运行时间可以利用Unix系统中,
- 首先确保已安装jupyter notebook,而且添加到了环境变量再找到保存ipynb文件的文件夹,在路径处直接输入cmd,然后回车进入命
- 程序中经常需要使用excel文件,批量读取文件中的数据python读取excel文件可以使用xlrd模块pip install xlrd安装
- Python 的代码风格由 PEP 8 描述。这个文档描述了 Python 编程风格的方方面面。在遵守这个文档的条件下,不同程序员编写的 P
- 成为一个顶级设计师的第一准则:限制你的字体让你成为设计大的七个基本原则之一好~设计大师,或者也太吹牛了吧,但根据下面七个基本原则至少你可以成
- 前一段时间,一个流行的东方系列mv 《bad apple》 带来一股奇怪的风潮: 各种技术狂人纷纷把这段mv在一些匪夷
- rhel5下默认安装mysql5.0后,中文显示为乱码原因:mysql默认字符集是latin,所以中文不能正常显示解决方法:修改配置文件,
- 听说pytorch使用比TensorFlow简单,加之pytorch现已支持windows,所以今天装了pytorch玩玩,第一件事还是写了
- 前言Multiprocessing.Pool可以提供指定数量的进程供用户调用,当有新的请求提交到pool中时,如果池还没有满,那么就会创建一
- Pyplotmatplotlib.pyplot是一个命令型函数集合,它可以让我们像使用MATLAB一样使用matplotlib。pyplot
- SQL Server会把经常使用到的数据缓存在内存里(就是数据页缓存),用以提高数据访问速度。因为磁盘访问速度远远低于内存,所以减少磁盘访问
- 前言首先是本文总体代码,改一下图像的读取路径就可以运行了,但我还是建议大家先看后面的步骤一行行敲代码,这样效果更好:""
- 下面我讲讲关于这套系统的加载流程 定义根目录,定义include目录 加载核心文件 配置文件'config.inc.php'
- 前言在程序中我们经常可以看到有很多的加密算法,比如说MD5 sha1等,今天我们就来了解下这下加密算法的吧,在了解之前我们需要知道一个模块嘛
- 本文给出了几个表单常用的js验证函数,有检查、\等特殊字符的,有检查是否含有空格,检查是否为Email 地址,也有检查是否是小数或负数的,检
- <script> Function.prototype.$bind=function(object) {  
- 本文实例讲述了Python中的错误和异常处理操作。分享给大家供大家参考,具体如下:#coding=utf8print ''&
- 任何东西只要跟Google有关就总能给我们带来点儿惊喜,2008年9月2日发布的Google Chrome浏览器也不例外。Google Ch
- python的数据类型可变不可变1、什么是可变不可变首先说一下什么是Python数据的可变不可变。我们都知道定义变量的时候,是先创建一块内存
- 我就废话不多说了,大家还是直接看代码吧!file1 = 'C:\\Users\\Administrator\\Desktop\\te