文章目录

  • 前言
  • 一、创建Python环境
  • 二、如何在您的计算机上安装Tesseract OCR?
    • 1.导入库
    • 2.获取输入
    • 2.获取输入
    • 3.在输入端检测车牌
    • 4.筛选轮廓
    • 5.遍历前30个轮廓
    • 5.识别检测到的车牌
  • 三,显示输出
  • 总结

前言

车牌检测与识别技术用途广泛,可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计算机视觉和人工智能。
本文将使用Python创建一个车牌检测和识别程序。该程序对输入图像进行处理,检测和识别车牌,最后显示车牌字符,作为输出内容。

一、创建Python环境

要轻松地完成本教程,您需要熟悉Python基础知识。应先创建程序环境。
在开始编程之前,您需要在环境中安装几个库。打开任何Python IDE,创建一个Python文件。在终端上运行命令以安装相应的库。您应该在计算机上预先安装Python pip。
OpenCV-Python:您将使用这个库对输入图像进行预处理,并显示各个输出图像。pip install OpenCV-Python
imutils:您将使用这个库将原始输入图像裁剪成所需的宽度。pip install imutils
pytesseract:您将使用这个库提取车牌字符,并将它们转换成字符串。pip install pytesseract
pytesseract 库依赖 Tesseract OCR 引擎进行字符识别。

二、如何在您的计算机上安装Tesseract OCR?

Tesseract OCR是一种可以识别语言字符的引擎。在使用pytesseract库之前,您应该在计算机上安装它。步骤如下:
打开任何基于Chrome的浏览器。
下载Tesseract OCR安装程序。
运行安装程序,像安装其他程序一样安装它。
准备好环境并安装tesseract OCR后,您就可以编写程序了。

1.导入库

先导入在环境中安装的库。导入库让您可以在项目中调用和使用它们的函数。
import cv2
import imutils
import pytesseract
您需要以cv2形式导入OpenCV-Python库。使用与安装时相同的名称导入其他库。

2.获取输入

然后将pytesseract指向安装Tesseract引擎的位置。使用cv2.imread函数将汽车图像作为输入。将图像名称换成您在使用的那个图像的名称。将图像存储在项目所在的同一个文件夹中,以方便操作。

pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
original_image = cv2.imread('image3.jpeg')

2.获取输入

—将图像宽度调整为500像素,然后将图像转换成灰度图像,因为canny边缘检测函数只适用于灰度图像。最后,调用bilateralFilter函数以降低图像噪声。


original_image = imutils.resize(original_image, width=500 )
gray_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
gray_image = cv2.bilateralFilter(gray_image, 11, 17, 17)

3.在输入端检测车牌

检测车牌是确定汽车上有车牌字符的那部分的过程。
执行边缘检测
先调用cv2.Canny函数,该函数可自动检测预处理图像上的边缘。
edged_image = cv2.Canny(gray_image, 30,200)
我们将通过这些边缘找到轮廓。

寻找轮廓
调用cv2.findContours函数,并传递边缘图像的副本。这个函数将检测轮廓。使用cv2.drawContours函数,绘制原始图像上已检测的轮廓。最后,输出所有可见轮廓已绘制的原始图像。

contours, new = cv2.findContours(edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = original_image.copy()
cv2.drawContours(img1, contours, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)

该程序绘制它在汽车图像上找到的所有轮廓。


找到轮廓后,您需要对它们进行筛选,以确定最佳候选轮廓。

4.筛选轮廓

根据最小面积30对轮廓进行筛选。忽略小于这个面积的轮廓,因为它们不太可能是车牌轮廓。复制原始图像,在图像上绘制前30个轮廓。最后,显示图像。

contours = sorted(contours, key = cv2.contourArea, reverse = True)[:30]
# stores the license plate contour
screenCnt = None
img2 = original_image.copy()# draws top 30 contours
cv2.drawContours(img2, contours, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)

现在轮廓数量比开始时要少。唯一绘制的轮廓是那些近似含有车牌的轮廓。

5.遍历前30个轮廓

最后,您需要遍历已筛选的轮廓,确定哪一个是车牌。

创建遍历轮廓的for循环。寻找有四个角的轮廓,确定其周长和坐标。存储含有车牌的轮廓的图像。最后,在原始图像上绘制车牌轮廓并加以显示。

count = 0
idx = 7for c in contours:# approximate the license plate contourcontour_perimeter = cv2.arcLength(c, True)approx = cv2.approxPolyDP(c, 0.018 * contour_perimeter, True)# Look for contours with 4 cornersif len(approx) == 4:screenCnt = approx# find the coordinates of the license plate contourx, y, w, h = cv2.boundingRect(c)new_img = original_image [ y: y + h, x: x + w]# stores the new imagecv2.imwrite('./'+str(idx)+'.png',new_img)idx += 1break# draws the license plate contour on original image
cv2.drawContours(original_image , [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("detected license plate", original_image )

循环之后,程序已识别出含有车牌的那个轮廓。

5.识别检测到的车牌

识别车牌意味着读取已裁剪车牌图像上的字符。加载之前存储的车牌图像并显示它。然后,调用pytesseract.image_to_string函数,传递已裁剪的车牌图像。这个函数将图像中的字符转换成字符串。

# filename of the cropped license plate image
cropped_License_Plate = './7.png'
cv2.imshow("cropped license plate", cv2.imread(cropped_License_Plate))# converts the license plate characters to string
text = pytesseract.image_to_string(cropped_License_Plate, lang='eng')

已裁剪的车牌如下所示。上面的字符将是您稍后在屏幕上输出的内容。

检测并识别车牌之后,您就可以显示输出了。

三,显示输出

这是最后一步。您将提取的文本输出到屏幕上。该文本含有车牌字符。
print(“License plate is:”, text)
cv2.waitKey(0)
cv2.destroyAllWindows()
程序的预期输出应该如下图所示:

车牌文本可以在终端上看到。

总结

以上就是今天要讲的内容,欢迎大家持续关注徐浪老师大讲堂!

【逆天应用】如何用Python实现检测和识别车牌号?(详细教程)相关推荐

  1. Python用百度AI识别车牌号教程(超详细)

    Python用百度AI识别车牌号教程 创建API接口 用浏览器打开http://ai.baidu.com/ 点击右上角的"控制台" 登录账号(没有就注册一个) 点击 产品服务> ...

  2. python udp_如何用python方法检测UDP端口

    如何用python方法检测UDP端口,首先要了解什么是UDP端口及作用.网上搜索了一圈后,我得到的个人理解是:UDP端口是含有网络服务必须的源端口和目的端口信息,用以建立和实现网络传输服务. 那么如何 ...

  3. python红绿灯检测opencv识别红绿灯信号灯检测

    python红绿灯检测opencv识别红绿灯信号灯检测 交通信号灯的检测与识别是无人驾驶与辅助驾驶必不可少的一部分,其识别精度直接关乎智能驾驶的安全.一般而言,在实际的道路场景中采集的交通信号灯图像具 ...

  4. python数据科学系列:pandas入门详细教程

    导读 前2篇分别系统性介绍了numpy和matplotlib的入门基本知识,今天本文自然是要对pandas进行入门详细介绍,通过本文你将系统性了解pandas为何会有数据分析界"瑞士军刀&q ...

  5. Python数据可视化之Plotnine库超详细教程系列

    Python数据可视化之Plotnine库超详细教程系列(一):概述 一.Plotnine库简介 ggplot2包奠定了R语言数据可视化在数据科学中的地位,数据可视化一直是Python的短板,即使有M ...

  6. python目标检测与识别_Python 使用Opencv实现目标检测与识别的示例代码

    在上章节讲述到图像特征检测与匹配 ,本章节是讲述目标检测与识别.后者是在前者的基础上进一步完善. 在本章中,我们使用HOG算法,HOG和SIFT.SURF同属一种类型的描述符.功能代码如下: impo ...

  7. 如何用Python和深度神经网络识别图像?

    本文授权转自微信公众号芝兰玉树 作者 | 王树义 只需要10几行Python代码,你就能自己构建机器视觉模型,对图片做出准确辨识和分类.快来试试吧! 视觉 进化的作用,让人类对图像的处理非常高效. 这 ...

  8. android 改python,如何正确的用python修改AndroidManifest.xml(史上最详细教程)

    写在前面的话 AndroidManifest.xml这个文件如果你搞过android相关的东西(如果没搞过,我希望你去搞一下), 你一定很熟悉. 我们在工作可能会有一些动态修改或者获取manifest ...

  9. 将 TensorFlow 移植到 Android手机,实现物体识别、行人检测和图像风格迁移详细教程

    2017/02/23 更新 贴一个TensorFlow 2017开发者大会的Mobile专题演讲 移动和嵌入式TensorFlow 这里面有重点讲到本文介绍的三个例子,以及其他的移动和嵌入式方面的TF ...

最新文章

  1. 咱们程序员,能吵吵就别动手!现在靠说就可以编程,支持Java、Python等10种语言|免费...
  2. 若依(基于SpringBoot的权限管理系统)的快速搭建
  3. 数组中删数(只删一个)
  4. 操作方法:Maven的Spring Boot和Thymeleaf
  5. WordPress登陆插件Erphplogin Pro QQ登陆/微博/微信登录/弹窗登录
  6. [机器学习-回归算法]Sklearn之线性回归实战
  7. 一次深夜优化MySQL亿级数据分页的奇妙经历
  8. 结构体指针memcpy出错_关于memset和memcpy的使用,尤其对结构体进行初始化和拷贝的问题 | 学步园...
  9. Angular通过XHR加载模板而限制使用file://(解决方案)
  10. 序列化与反序列化二叉树
  11. 人生最要紧的是充实自己
  12. Atitit db access req数据库访问规范jdo jdbc jpa pdo sql 目录 1. 常见特性 1 1.1. 元数据 API 1 1.2. 分布式事务 vs事务中使用 Sav
  13. 【消费量预测】基于matlab碳排放约束下煤炭消费量预测【含Matlab源码 223期】
  14. 基于asp.net806莆田新华网上书店_图书销售系统
  15. 美国诚实签经验——医生的预约单和赴美生子的费用明细表
  16. 软件测试人员需不需要懂代码
  17. 直播软件开发,css预加载旋转动画 与 流光字体
  18. 【NOIP2018】D2T2 填数游戏
  19. JSP/Servlet构建三层管理信息系统
  20. 中国移动oa办公系统

热门文章

  1. 一键安装LAMP脚本
  2. cadence SPB17.4 - allegro - create and switch Visibility view
  3. VHDL硬件描述语言(三)VHDL语言要素
  4. 计算机硬件设备的连接教案,教师资格证面试高中信息技术教案:计算机的硬件设备...
  5. 读者使用计算机终端是指,网络数据库使用导航-新读者专用.ppt
  6. Win8系统中如何显示/隐藏文件扩展名
  7. U880纯GPS定位综合解决方案,支持谷歌地图老虎地图百度地图
  8. 如何查看,比较黑莓手机不同型号的feature?
  9. Win8+Matlab7.1测试例子(20150109、0116、0124、0202、0207、0217)
  10. OpenWrt PPPoE拨号问题之mac地址克隆