Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别

news2025/1/12 10:38:38

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别

目录

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别

一、简单介绍

二、简单进行车牌检测和识别实现原理

三、简单进行车牌检测和识别案例实现简单步骤

四、注意事项


一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

这里使用 Python  基于 OpenCV 进行视觉图像处理,......

OpenCV 提供了一些已经训练好的级联分类器,这些级联分类器以XML文件的方式保存在以下路径中:

...\Python\Lib\site-packages\cv2\data\

OpenCV提供了一些经过预训练的人脸检测器模型文件,这些文件通常包含在OpenCV的安装包中。你也可以在OpenCV的官方GitHub页面或者OpenCV官方网站的下载页面找到这些模型文件的下载链接。

一般来说,你可以从以下位置获取OpenCV的预训练模型文件:

        OpenCV GitHub Release 页面:在 Releases · opencv/opencv · GitHub 找到你需要的版本,然后在下载的压缩包中找到位于 opencv\data 目录下的人脸检测器模型文件。
        OpenCV 官方网站下载页面:访问 OpenCV 官方网站 Releases - OpenCV ,下载你需要的版本,并在相应的压缩包中查找人脸检测器模型文件。

请确保下载与你使用的OpenCV版本兼容的模型文件。

二、简单进行车牌检测和识别实现原理

车牌检测和识别是计算机视觉领域的一项技术,用于自动识别车辆车牌上的信息。它通常包括两个主要步骤:

  1. 车牌检测:这一步骤旨在从图像或视频中准确地定位车牌的位置。车牌检测可以通过使用各种技术和算法来实现,例如使用基于特征的方法、基于深度学习的方法或级联分类器等。检测到车牌后,通常会将车牌区域用矩形框标出。

  2. 车牌识别:一旦车牌被成功检测到,下一步就是从检测到的车牌区域中提取出文字信息。这个过程通常使用光学字符识别(OCR)技术来实现,它能够将图像中的文字转换为可识别的文本。识别后的文本可以包括车牌号码、车牌所属地区等信息。

综合而言,车牌检测和识别技术可以自动地从图像或视频中提取出车辆的车牌信息,用于诸如交通管理、停车场管理、车辆监控等应用中。

该案例实现了使用 OpenCV 中的级联分类器检测车牌,并利用 Tesseract OCR 对车牌区域进行字符识别的功能。

  • 实现原理:

    • 首先,加载了一个预先训练好的车牌检测器级联分类器。
    • 然后,读取图像并将其转换为灰度图像。
    • 接下来,使用级联分类器检测车牌区域,并在检测到的车牌区域上应用 Tesseract OCR 进行字符识别。
    • 最后,在原始图像上绘制检测到的车牌区域的矩形框,并显示识别的车牌号码。
  • 实现方法:

    • 使用 OpenCV 加载级联分类器,并调用 detectMultiScale 方法检测车牌区域。
    • 利用 Tesseract OCR 对车牌区域进行字符识别。
    • 绘制矩形框和在图像上显示识别结果。

涉及到了以下几个关键函数:

  1. cv2.CascadeClassifier()

    • 功能: 加载级联分类器。
    • 参数: 级联分类器文件的路径。
    • 返回值: 级联分类器对象。
  2. cv2.imread()

    • 功能: 读取图像文件。
    • 参数: 图像文件的路径。
    • 返回值: 读取到的图像对象。
  3. cv2.cvtColor()

    • 功能: 将图像从一个颜色空间转换到另一个颜色空间。
    • 参数: 待转换的图像对象,目标颜色空间的转换标志。
    • 返回值: 转换后的图像对象。
  4. cv2.CascadeClassifier.detectMultiScale()

    • 功能: 检测图像中的目标对象。
    • 参数: 图像对象、尺度因子、邻居数、最小尺寸等。
    • 返回值: 检测到的目标对象的矩形区域。
  5. pytesseract.image_to_string()

    • 功能: 对图像中的文字进行识别。
    • 参数: 待识别的图像对象,识别配置参数。
    • 返回值: 识别结果的字符串。
  6. cv2.rectangle()

    • 功能: 在图像上绘制矩形框。
    • 参数: 图像对象、矩形框的左上角坐标、右下角坐标、颜色、线条宽度等。
    • 返回值: 绘制了矩形框的图像对象。
  7. cv2.putText()

    • 功能: 在图像上绘制文本。
    • 参数: 图像对象、文本内容、文本位置、字体、字体大小、颜色、线条宽度等。
    • 返回值: 绘制了文本的图像对象。

这些关键函数共同完成了车牌检测和识别的功能,通过级联分类器检测到车牌区域后,利用 Tesseract OCR 对车牌区域进行字符识别,并在原始图像上绘制矩形框和显示识别结果

三、简单进行车牌检测和识别案例实现简单步骤

环境:win 10,python ,opencv-python,pytesseract

1、下载安装 tesseract

下载最新的安装 exe ,双击按步骤安装即可

Index of /tesseract

2、安装完后,配置好 tesseract 环境

3、在 cmd 中测试环境是否安装成功

输入命令:tesseract -v

4、如果有需要可以下载配置一下 Tesseract 中文识别语言包

下载连接:tesseract_zh

将下载的chi_sim.traineddata文件复制到安装路径下的tessdata文件夹,如图所示:

5、编写代码

6、运行效果

7、具体代码

"""
简单进行车牌检测和识别
    1、使用 OpenCV 加载级联分类器,并调用 detectMultiScale 方法检测车牌区域。
    2、利用 Tesseract OCR 对车牌区域进行字符识别。
    3、绘制矩形框和在图像上显示识别结果。
"""

import cv2
import pytesseract


def detect_license_plate(image_path, scale_factor=1.1, min_neighbors=5, min_size=(30, 30)):
    """
    使用级联分类器检测车牌并绘制矩形框
    :param image_path: (str) 输入图像的路径
    :param scale_factor: (float) 每次图像尺寸减小的比例,默认为1.1
    :param min_neighbors: (int) 每个候选矩形应该保留的邻居数,默认为5
    :param min_size: (tuple) 矩形的最小尺寸,默认为(30, 30)
    :return:
    """
    # 参数安全校验
    if not isinstance(image_path, str) or not image_path.strip():
        raise ValueError("Invalid image path.")

    if not isinstance(scale_factor, float) or scale_factor <= 1.0:
        raise ValueError("Scale factor must be a float greater than 1.0.")

    if not isinstance(min_neighbors, int) or min_neighbors <= 0:
        raise ValueError("Min neighbors must be a positive integer.")

    if not isinstance(min_size, tuple) or len(min_size) != 2 or min_size[0] <= 0 or min_size[1] <= 0:
        raise ValueError("Min size must be a tuple of two positive integers.")

    # 加载车牌检测器
    plate_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_russian_plate_number.xml')

    # 读取图像
    image = cv2.imread(image_path)

    # 将图像转换为灰度图像
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # 检测车牌
    plates = plate_cascade.detectMultiScale(gray, scaleFactor=scale_factor, minNeighbors=min_neighbors,
                                            minSize=min_size)

    if len(plates) > 0:
        for (x, y, w, h) in plates:
            plate_img = gray[y:y + h, x:x + w]  # 裁剪出车牌区域
            plate_text = pytesseract.image_to_string(plate_img, config='--psm 8')  # 使用Tesseract OCR进行字符识别
            plate_text = plate_text.strip()  # 去除空白字符

            # 在原始图像上绘制车牌区域的矩形框
            cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
            # 在图像上显示识别结果
            cv2.putText(image, plate_text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)

        # 显示结果
        cv2.imshow("License Plate Detection", image)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    else:
        print("No license plate detected.")


# 测试车牌检测函数
if __name__ == "__main__":
    image_path = "Images/CarPlate.jpeg"
    detect_license_plate(image_path, scale_factor=1.077, min_neighbors=3)

四、注意事项

  • 需要提前安装并配置 Tesseract OCR,并确保其能够识别正确的字符。
  • 车牌检测的准确性可能受多种因素影响,包括图像质量、光照条件和车牌遮挡等。
  • 可能需要根据实际情况调整级联分类器的参数,以提高车牌检测的准确性。
  • 图像处理过程中需要考虑参数的安全性,例如确保图像路径的有效性以及参数的合法性等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1618626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ACRN Intel推出的虚拟机是啥样的?

前言 ACRN作为Intel为工控领域推出的一个小型化的虚拟机&#xff0c;它的特点主要有这么几个&#xff1a; 1.针对Intel的芯片做了非常强的优化 2.RT-VM实时虚拟机的实时性很好 3.CACHE缓存技术发挥的好 4.TCC技术 / 当然不是所有intel的芯片都支持&#xff0c;&#xff0c…

OKCC搭建配置什么样的服务器合适

OKCC呼叫中心系统是一种采用软硬件结合的架构方式、及分布式的IP技术&#xff0c;从多角度为企业提供整合的一体化解决方案。因此&#xff0c;搭建OKCC呼叫中心系统所使用的服务器应该满足以下几点要求&#xff1a; 稳定性&#xff1a;服务器需要具有较高的稳定性和可靠性&…

应用部署tomcat的三种方式

由于一直在用springboot框架&#xff0c;集成了tomcat&#xff0c;快忘记如何单独部署tomcat了&#xff0c;以下&#xff0c;记录一下&#xff1a; 部署tomcat有三种方式&#xff1a; 一、方式一&#xff1a;将war包丢进webapps 这是最简单粗暴的方式&#xff1a;将web工程打…

平均月薪超4.6万!AI领域重磅课程汇总,哈佛,斯坦福,微软,谷歌等出品!

2023年底&#xff0c;由脉脉高聘人才智库发布的《2023泛人工智能人才洞察》报告显示&#xff0c;2023年前八个月内新发布的AI岗位平均月薪超过了4.6万元&#xff0c;而且人才供不应求&#xff0c;甚至出现了5个岗位争夺2个人才的情况。 本文章整理了10项来自全球各高校与知名企…

语音聊天app软件、语音房软件开发

最近我们收到了众多客户咨询,他们都对语音聊天app非常感兴趣! 语音聊天app,在线组CP,一起连麦聊天、唱歌、打游戏,年轻人非常喜欢的语音社交软件,可以语音通话、多人语音房聊天、发布动态、会员充值等功能.大家可以在虚拟世界里快乐社交! 里面还有好玩的互动小游戏,帮助客户增…

[Meachines][Easy]Bizness

Main $ nmap -p- 10.10.11.252 --min-rate 1000 $ dirsearch -u https://bizness.htb/ $ whatweb https://bizness.htb/control/login 存在一个未授权的RCE $ git clone https://github.com/jakabakos/Apache-OFBiz-Authentication-Bypass.git $ cd Apache-OFBiz-Authenticat…

【webrtc】m98 RoundRobinPacketQueue的优先级处理

m98 代码 PacedSender::EnqueuePackets 的调用者可能是多个地方,所以这个要加锁保护。RoundRobinPacketQueue 本身是没有锁的发现m98和新版本不同,参考:【webrtc】m114自己实现的PrioritizedPacketQueuepush和pop都是RtpPacketToSend 但是实际上,内部是封装为QueuedPacket 处…

【笔试强训】牛牛快递

链接&#xff1a;牛牛的快递_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/41b42e7b3c3547e3acf8e90c41d98270?tpId290&tqId39852&ru/exam/oj描述 牛牛正在寄快递&#xff0c;他了解到快递在 1kg 以内的按起步价 20 元计算&#xff0c;超出部分…

基于RT-Thread的智能家居助手

一、项目简介 智能家居助手主要基于RT-Thread开发的&#xff0c;该系统主要分为语音子系统&#xff0c;环境监测子系统&#xff0c;智能控制子系统&#xff0c;智能网关子系统&#xff0c;音乐播放器&#xff0c;云端以及应用软件七大部分。语音子系统可通过语音进行人机交互来…

基于51单片机的温度、烟雾、防盗、GSM上报智能家居系统

基于51单片机的智能家居系统 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.DS18B20检测温度&#xff0c;MQ-2检测烟雾、ADC0832实现模数转换&#xff1b; 2.按键可以设置温度、烟雾浓度阈值&#x…

Linux加强篇-Shell命令脚本

目录 ⛳️推荐 编写Shell脚本 编写简单的脚本 接收用户的参数 判断用户的参数 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 编写Shell脚本 Shell脚本命令的工作方式有下面…

Hdu1350 Taxi Cab Scheme 【最小路径覆盖】

Taxi Cab Scheme 题意 有一张边长不超过 200 200 200 的网格图&#xff0c;有若干个乘客&#xff0c; 乘客 i i i 的需求是&#xff1a; h h : m m , ( a , b ) , ( c , d ) hh:mm, (a,b) , (c, d) hh:mm,(a,b),(c,d)&#xff0c;意为他需要在 h h 时 m m 分 hh时mm分 hh时…

Kibana安装部署(Linux)

Kibana是Elasticsearch的开源可视化工具&#xff0c;与存储在Elasticsearch中的数据进行交互。 1. 下载软件 这里使用的Elasticsearch的版本是7.12.0&#xff0c;所以kibana选择同样的7.12.0版本。 官网下载地址&#xff1a;https://www.elastic.co/cn/downloads/past-releas…

安装zabbix server

目录 1、实验环境 2、yum 安装zabbix server 2.1 解决权限问题和放行流量 2.2 安装zabbix-server 1、实验环境 操作系统rhel8zabbix6.0TLS数据库mysql8.0.30IP地址192.168.81.131时间配置NTP时间服务器同步 2、yum 安装zabbix server 如果通过yum源安装&#xff0c;操作系…

【NUCLEO-G071RB】005——RCC-PLL时钟配置

NUCLEO-G071RB&#xff1a;005——RCC-PLL时钟配置 设计目标芯片配置程序修改仿真测试 设计目标 将HSI通过PLL倍频到64MHz&#xff0c;并作为系统时钟。 芯片配置 切换到Clock Configuration选项卡&#xff0c;以图形化界面配置时钟。System Clock Mux是CPU核心的时钟源选择…

AJAX——事件循环(EventLoop)

1.事件循环&#xff08;EventLoop&#xff09; 概念&#xff1a;JavaScript有一个基于事件循环的并发模型&#xff0c;事件循环负责执行代码、收集和处理事件以及执行队列中的子任务。这个模型与其它语言中的模型截然不同&#xff0c;比如C和Java。 原因&#xff1a;JavaScri…

Positive证书——最经济的数字信任的桥梁

简介 在网络世界中&#xff0c;数据安全与隐私保护的重要性日益凸显&#xff0c;其中SSL或TLS证书扮演着至关重要的角色。Positive SSL证书作为全球认可的数字证书品牌之一&#xff0c;以其高性价比和广泛兼容性赢得了广大用户的青睐。 这是一种由权威CA&#xff08;Certifica…

SD-WAN制造业网络优化方案

制造业在数字化浪潮的推动下&#xff0c;进行转型的需求越来越强烈。网络作为制造业数字化转型的关键基础设施&#xff0c;其稳定性、安全性和灵活性直接影响着企业的运营效率和市场竞争力。而SD-WAN可以为制造业提供有效的解决方案&#xff0c;让制造业顺利高效地进行数字化转…

跨模态、多模态、多任务之间的区别与联系

文章目录 1、定义1.1 跨模态1.2 多模态1.3 多任务 2、区别3、联系4、关系图5、总结 1、定义 1.1 跨模态 跨模态是指从一种模态的数据中学习&#xff0c;并将其知识应用到另一种模态的数据上。跨模态学习可以利用不同模态数据之间的隐含关系&#xff0c;从而提高模型的泛化能力…

go语言并发实战——日志收集系统(七) etcd的介绍与简单使用

什么是etcd etcd是基于Go语言开发的一个开源且高可用的分布式key-value存储系统&#xff0c;我们可以在上面实现配置共享与服务的注册与发现。 和它比较相似的还有我们之间所提到的Zookeeper以及consul.(注:后面我们学习微服务的时候etcd和consul会有广泛的使用) etcd有以下几…