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

简介

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

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

实现方式

我们这里不做太复杂的车辆动态识别,只演示从图像中识别车牌信息,车牌识别功能的实现方式大致分为两种,一种是自己编写代码实现,另一种是借助第三方 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 安装

 PyQt5 :由于要用到GUI人机交互界面,这里用PyQt5 ,PyQt5 是Digia的一套Qt5应用框架与python的结合,同时支持2.x和3.x。本教程使用的是3.x。Qt库由Riverbank Computing开发,是最强大的GUI库之一 。可用pip install PyQt5 进行安装

python:这里用的是python 3.7

另外关于百度SDK的申请,可以自行申请,也可用下面实例中的。

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

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

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

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

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

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

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

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

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

具体实现

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

import sys
from aip import AipOcr
from PyQt5.QtWidgets import (QDialog, QApplication, QLabel, QPushButton,
QFileDialog, QMessageBox, QPlainTextEdit, QHBoxLayout,
QVBoxLayout)
from PyQt5.QtGui import QIcon, QFont
from PyQt5 import QtGui APP_ID = '23612066'
API_KEY = 'Hcm1sLlGlHtyWZsPoDNGKVrt'
SECRET_KEY = 'xGue8I7ZDm8uOPCYb2FKamj8vweI2fUV' client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
options = {
'multi_detect': 'true',
} class PlateRecognize(QDialog):
def __init__(self):
super(PlateRecognize, self).__init__()#初始化图形界面
self.text = ""
self.filePath = ""
self.numbers = []
self.initUI() def initUI(self):
self.resize(500, 500)
self.setWindowTitle("车牌识别")#界面标题 # self.setWindowIcon(QIcon('C:/Users/Administrator/Desktop/icon1.ico'))#图标 self.plabel = QLabel(self)#创建一个label标签
self.plabel.setFixedSize(400, 300)#标签大小 self.obtn = QPushButton(self)#创建‘打开本地图片’按钮
self.obtn.setText("打开本地图片")#名称
self.obtn.setFont(QFont("苏新诗柳楷繁", 15))#字体,字号
self.obtn.clicked.connect(self.openimage)#单击事件
self.obtn.setFixedSize(180, 40)#大小
self.sbtn = QPushButton(self)#创建‘开始识别’按钮
self.sbtn.setText("开 始 识 别")
self.sbtn.setFont(QFont("苏新诗柳楷繁", 15))
self.sbtn.clicked.connect(self.recognize)
self.sbtn.setFixedSize(180, 40) #盒子布局(boxlayouts)非常的直截了当。使用它作为最上层的布局,创建布局
#非常简单——它的构造器需要任何参数——并且使用望名知义的方法addWidget来添加widget。
self.v1box = QVBoxLayout()
self.v1box.addWidget(self.obtn)
self.v1box.addWidget(self.sbtn)
# QHBoxLayout也可以被同样使用,尽管它不常作为最上层的布局。
# 它常常被作为子布局。为一个布局中添加另一个布局,使用该布局容器的addLayout方法
self.h1box = QHBoxLayout()
self.h1box.addWidget(self.plabel)
self.h1box.addLayout(self.v1box) self.tlabel = QLabel(self)
self.tlabel.setText("识\n别\n结\n果")
self.tlabel.setFont(QFont("苏新诗柳楷繁", 15))
self.tlabel.resize(200, 50) self.tedit = QPlainTextEdit(self)
self.tedit.setFont(QFont("宋体", 10))
self.tedit.setFixedSize(500, 100) #盒子布局有另一个更重要并且常用的方法:addStretch。一个常见的布局有很多的控件,
# 他们之间具有灵活的空间。为了完成这个目的,在盒子的开始添加widgets,然后添加一个设置大于0的空闲空间,
# layout.addStretch(1),然后再添加剩下的widgets。 self.h2box = QHBoxLayout()
self.h2box.addStretch(1)
self.h2box.addWidget(self.tlabel)
self.h2box.addStretch(1)
self.h2box.addWidget(self.tedit)
self.h2box.addStretch(1) self.vbox = QVBoxLayout()
self.vbox.addLayout(self.h1box)
self.vbox.addStretch(1)
self.vbox.addLayout(self.h2box)
self.setLayout(self.vbox) def openimage(self):#创建‘打开本地图片’命令按钮单击事件
self.filePath, imgType = QFileDialog.getOpenFileName(self, "打开本地图片", "", "*.jpg;;*.png;;All Files(*)")
self.jpg = QtGui.QPixmap(self.filePath).scaled(self.plabel.width(), self.plabel.height())
self.plabel.setPixmap(self.jpg) def recognize(self):#创建‘开始识别’命令按钮单击事件
if (self.filePath == ""):
print(QMessageBox.warning(self, "警告", "请插入图片", QMessageBox.Yes, QMessageBox.Yes))
return result = client.licensePlate(self.get_file_content(self.filePath), options)
print(result)
plate = ''
color=''
for a in result['words_result']:
plate += a['number'] + '\n'
color += a['color']+'\n'
self.text = "车牌号码:" + plate +"车牌颜色:" + color print(QMessageBox.information(self, "提醒", "成功识别!" +"\n"+ self.text, QMessageBox.Yes, QMessageBox.Yes))
self.tedit.setPlainText(self.text) def get_file_content(self, filePath):
with open(filePath, 'rb') as fp:
return fp.read() if __name__ == '__main__':
# 这是必须要创建的一个对象。每个GUI程序都必须有且只有一个QApplication的实例。如果没有这个实例的话,
# 我们写的QT是没法执行的,所以我们写QT代码的时候一定不要忘了创建这个对象。 创建这个对象时需要传递一个list参数
app = QApplication(sys.argv)#sys.argv其实可以看作是一个列表(list)
platerecognizeWindow = PlateRecognize()#对类进行实例化
platerecognizeWindow.show()#调用本身的show方法
platerecognizeWindow.exec_()
sys.exit(app.exec_())

这里图标注释掉了,如果需要使用的话找到自己.ico 文件的路径修改

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

这里是把图标注释掉的结果:

另外图标没有注释的结果:

是不是对于有些许强迫症的人们看着舒服一些呢(偷乐ing)

总结

本文我们先对车牌识别进行了一些介绍,之后利用百度云接口实现了GUI人机交互界面下的车牌识别。通过本文我们可以对车牌识别的相关概念和具体实现有一些了解。

基于百度智能云api下的车牌识别系统的更多相关文章

  1. 百度智能云 API调用PythonSDK

    百度智能云 API调用PythonSDK 这是一个用于百度云部分开放AI功能的Python库.主要为ORC功能,可以对各种图像文件进行文字识别,包括车牌.手写文字.通用文字.人脸发现.人脸比对和人流量 ...

  2. 基于百度智能云的OCR接口进行图文识别

    由于一些客户的内部系统需要提取一些记录信息,如果手工录入会变得比较麻烦,因此考虑使用百度云的OCR进行图片文字的提取处理,综合比较了一下开源免费的Tesseract 类库进行处理,不过识别效果不太理想 ...

  3. 百度智能云平台调用食物识别api Java实现

    纪录一下我小学期2天花了20小时写的菜品识别java程序. 1.2. 百度智能云简介 1.2.1 百度图像识别服务 百度图像识别服务,基于深度学习及大规模图像训练,准确识别图片中的物体类别.位置.置信 ...

  4. Java对接百度智能云人脸识别

    ------------------------->这篇文章就是自己做个笔记<------------------------- 首先登录or注册自己的百度智能云管理中心:https:// ...

  5. 百度智能云虚拟主机 Typecho 分类功能失效 | 开启伪静态地址

    出现的问题 $this->is() 方法失效,无法正确判断 archive.category.tags 页面类型. 点击分类页面.归档页面时,虽然 URL 是正确的,但网页内容却是 index. ...

  6. laravel7 百度智能云检测内容及图片

    1:百度智能云,获取AppID,API Key,Secret Key https://console.bce.baidu.com/ai/?_=1642339692640&exraInfo=ai ...

  7. 利用百度智能云结合Python体验图像识别(转载来自qylruirui)

    https://blog.csdn.net/qylruirui/article/details/94992917 利用百度智能云结合Python体验图像识别只要注册了百度账号就可以轻松体验百度智能云中 ...

  8. 基于opencv的车牌识别系统

    前言 学习了很长一段时间了,需要沉淀下,而最好的办法就是做一个东西来应用学习的东西,同时也是一个学习的过程. 概述     OpenCV的全称是:Open Source Computer Vision ...

  9. EasyPR--中文开源车牌识别系统 开发详解(1)

    在上篇文档中作者已经简单的介绍了EasyPR,现在在本文档中详细的介绍EasyPR的开发过程. 正如淘宝诞生于一个购买来的LAMP系统,EasyPR也有它诞生的原型,起源于CSDN的taotao123 ...

  10. EasyPR--一个开源的中文车牌识别系统

    我正在做一个开源的中文车牌识别系统,Git地址为:https://github.com/liuruoze/EasyPR. 我给它取的名字为EasyPR,也就是Easy to do Plate Reco ...

随机推荐

  1. 玩玩 Visual Studio Code 和 MSYS2

    注意:为了便于理解本文内容,您可能需要一些前置知识,例如命令行操作,编译器操作,路径操作,环境变量操作,vscode操作-- 众所周知 Visual Studio Code 是一个优秀的编辑器. 众所 ...

  2. [*]Quadratic Residual Networks: A New Class of Neural Networks for Solving Forward and Inverse Problems in Physics Involving PDEs

    Accepted by SIAM International Conference on Data Mining (SDM21) 本文提出了二次残差网络,通过在应用激活函数之前,添加二次残差项到输入的 ...

  3. vue v-if不生效

    正确写法 <block v-for="(item, index) in imgArray"> <image :src="item" class ...

  4. Echarts实现不均匀刻度的方法,自定义刻度(转)

    原文地址 今天突然有个我们的咨询公司找我问一个echarts问题,这个问题确实值得一解决,很有意思. 问题是这样的.数据中有很多低于100的数值,但是最高值却能达到14000. data = [93. ...

  5. 网络很慢mtu设置

    [root@db-***** etc]# cat /etc/rc.local #!/bin/sh # # This script will be executed *after* all the ot ...

  6. 如何在Debian10镜像中设置Nginx引擎模块

    目前,我们较多的服务器WEB环境都是用的Nginx引擎,我们采用服务器的目的是可以获取到更多的资源,而且建站数量是不受限制的.我们可以根据自己需要配置Nginx,可以自定义特定域的设置,允许您在单个服 ...

  7. 学习Anaconda,jupyter notebook

    20200210,理解了jupyter在anaconda中的意义,vs code觉得对我这个初学者来讲,更容易使用,pycharm虽然破解安装了,但是感觉不太好用,随后再说 20200211, jup ...

  8. SqlServer查看索引信息

    sp_helpindex tablename

  9. 样本方差S²中为什么是乘以1/(n-1)或者说除以n-1?贝塞尔校正,无偏估计

    样本方差S²中为什么是乘以1/(n-1)或者说除以n-1?贝塞尔校正,无偏估计 前言:重在记录,可能出错. 先看样本方差的公式如下: S2=1n-1∑i=1n(Xi-X¯)2=1n-1(∑i=1nXi ...

  10. 肖sir__面试第十天课程__模拟面试讲解

    一.面对面模拟面试1.打印好简历2.带好手机,录制自己回答的问题,总结,反思(内部),关闭手机和闹钟(外部)3.有笔试题,可以拍照发群里4.可以携带耳塞(适合女生)5.语速流程6.礼貌用语(面试官好, ...