0

0

如何使用Python检测和识别车牌?

王林

王林

发布时间:2023-04-14 12:34:02

|

2642人浏览过

|

来源于51CTO.COM

转载

A1.art
A1.art

一个创新的AI艺术应用平台,旨在简化和普及艺术创作

下载

​译者 | 布加迪

审校 | 孙淑娟

车牌检测与识别技术用途广泛,可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计算机视觉和人工智能。

本文将使用Python创建一个车牌检测和识别程序。该程序对输入图像进行处理,检测和识别车牌,最后显示车牌字符,作为输出内容。

一、创建Python环境

要轻松地完成本教程,您需要熟悉Python基础知识。应先创建程序环境。

在开始编程之前,您需要在环境中安装几个库。打开任何Python IDE,创建一个Python文件。在终端上运行命令以安装相应的库。您应该在计算机上预先安装Python PIP。

  • OpenCV-Python:您将使用这个库对输入图像进行预处理,并显示各个输出图像。pip install OpenCV-Python
  • imutils:您将使用这个库将原始输入图像裁剪成所需的宽度。pip install imutils
  • pytesseract:您将使用这个库提取车牌字符,并将它们转换成字符串。pip install pytesseractpytesseract库依赖Tesseract OCR引擎进行字符识别。

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

Tesseract OCR是一种可以识别语言字符的引擎。在使用pytesseract库之前,您应该在计算机上安装它。步骤如下:

1. 打开任何基于Chrome的浏览器。

2. 下载Tesseract OCR安装程序。

3. 运行安装程序,像安装其他程序一样安装它。

准备好环境并安装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')

您可以将下面的输入图像换成想要使用的图像。

3.预处理输入

将图像宽度调整为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)

4.在输入端检测车牌

检测车牌是确定汽车上有车牌字符的那部分的过程。

(1)执行边缘检测

先调用cv2.Canny函数,该函数可自动检测预处理图像上的边缘。

edged_image = cv2.Canny(gray_image, 30,200)

我们将通过这些边缘找到轮廓。

(2)寻找轮廓

调用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)

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

图片

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

(3)筛选轮廓

根据最小面积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)

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

图片

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

(4)遍历前30个轮廓

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

count = 0
idx = 7

for c in contours:
# approximate the license plate contour
contour_perimeter = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.018 * contour_perimeter, True)

# Look for contours with 4 corners
if len(approx) == 4:
screenCnt = approx

# find the coordinates of the license plate contour
x, y, w, h = cv2.boundingRect(c)
new_img = original_image [ y: y + h, x: x + w]

# stores the new image
cv2.imwrite('./'+str(idx)+'.png',new_img)
idx += 1
break

# 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')

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

图片

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

6.显示输出

这是最后一步。您将提取的文本输出到屏幕上。该文本含有车牌字符。

print("License plate is:", text)
cv2.waitKey(0)
cv2.destroyAllWindows()

程序的预期输出应该如下图所示:

图片

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

三、磨砺您的Python技能

用Python检测和识别车牌是一个有意思的项目。它有挑战性,所以应该会帮助您学到关于Python的更多知识。

说到编程,实际运用是掌握一门语言的关键。为了锻炼技能,您需要开发有意思的项目。

原文链接:https://www.makeuseof.com/python-car-license-plates-detect-and-recognize/

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

16

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

23

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

75

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

95

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

218

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

420

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

168

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

222

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

33

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号