python+pyhyper实现识别图片中的车牌号思路详解


Posted in Python onDecember 24, 2022

背景

最近领导给布置了一个基于图片识别车牌号的工具开发任务,然后就去研究实现逻辑,自己根据opencv写了一个小demo,发现不仅速度慢而且成功率极低。然后,就找到了Hyperlpr开源项目。

环境搭建

排雷1:有教程说在github上下载源码:https://github.com/zeusees/HyperLPR,自己编译,结果github上已经停止维护了,然后再gitee找到了:Hyperlpr项目
排雷2:hyperlpr环境搭建比较苛刻,建议直接在requirements.txt文件中维护好版本号

实现:
我是直接pip install hyperlpr 安装的

python+pyhyper实现识别图片中的车牌号思路详解

验证

import cv2
from hyperlpr import HyperLPR_plate_recognition

if __name__ == '__main__':
    image = cv2.imread("one.jpeg")
    result = HyperLPR_plate_recognition(image)

报错:

    mat_ = cv2.estimateRigidTransform(org_pts, target_pts, True)
AttributeError: module 'cv2' has no attribute 'estimateRigidTransform'

修改hyperlpr.py文件,大概在231行

mat_ = cv2.estimateRigidTransform(org_pts, target_pts, True)
修改为

mat_,inlier = cv2.estimateAffine2D(org_pts, target_pts)

再次执行,执行成功,返回一个列表,依次是车牌号,准确率,车牌号在图片中的坐标

python+pyhyper实现识别图片中的车牌号思路详解

二次开发

经过实验发现,如果图片中存在多个车牌号,只能识别图片中的一个车牌号

拜读源码发现self.detect_ssd(image)函数返回的是一个可迭代变量,追踪进去应该可以发现点东西

python+pyhyper实现识别图片中的车牌号思路详解

和猜测一致,self.detect_ssd(image)返回的是一个列表,但是找到一个车牌就返回了,只需要将 return cropped_images 放到for循环外卖外面即可
修改前:

python+pyhyper实现识别图片中的车牌号思路详解

修改后:

python+pyhyper实现识别图片中的车牌号思路详解

验证:

python+pyhyper实现识别图片中的车牌号思路详解

标记

附源码:

python+pyhyper实现识别图片中的车牌号思路详解

import cv2
import numpy as np
from PIL import ImageFont, Image, ImageDraw
from hyperlpr import HyperLPR_plate_recognition

if __name__ == '__main__':
    image = cv2.imread("two.jpeg")
    result = HyperLPR_plate_recognition(image)
    print(result)
    # 标记车牌号
    if result:
        for index, item in enumerate(result):
            # 车牌号
            car_code = item[0]
            # 可信度
            conf = item[1]
            # 车牌框左上角坐标
            pt1 = (item[2][0], item[2][1])
            # 车牌框右下角坐标
            pt2 = (item[2][2], item[2][3])
            # 绘制车牌框
            cv2.rectangle(image, pt1=pt1, pt2=pt2, color=(255, 0, 0), thickness=3)
            # 设置需要显示的字体
            font_path = 'fonts/simsun.ttc'
            font = ImageFont.truetype(font_path, size=40, index=1)
            image = Image.fromarray(image)
            draw = ImageDraw.Draw(image)
            # 绘制文字信息
            draw.text((pt1[0] + 30, pt1[1] - 30), car_code, font=font, fill=(0, 0, 255))
            image = np.array(image)
        # cv2.namedWindow('image', 0)
        # cv2.imshow('image', image)
        # cv2.waitKey(100000)
        cv2.imwrite('d:/two.jpeg', image)

到此这篇关于python+pyhyper实现识别图片中的车牌号的文章就介绍到这了,更多相关python车牌号识别内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python BeautifulSoup中文乱码问题的2种解决方法
Apr 22 Python
python并发编程之线程实例解析
Dec 27 Python
PYTHON基础-时间日期处理小结
May 05 Python
python判断设备是否联网的方法
Jun 29 Python
PyQT5 QTableView显示绑定数据的实例详解
Jun 25 Python
python中bs4.BeautifulSoup的基本用法
Jul 27 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
Dec 10 Python
Pandas实现DataFrame按行求百分数(比例数)
Dec 27 Python
Python使用Pandas库常见操作详解
Jan 16 Python
Jupyter Notebook安装及使用方法解析
Nov 12 Python
用python对oracle进行简单性能测试
Dec 05 Python
python中实现词云图的示例
Dec 19 Python
python pandas 解析(读取、写入)CSV 文件的操作方法
Dec 24 #Python
Python TypeError: ‘float‘ object is not subscriptable错误解决
Dec 24 #Python
python 使用pandas读取csv文件的方法
Dec 24 #Python
Python使用pandas导入csv文件内容的示例代码
Dec 24 #Python
python如何利用cv2.rectangle()绘制矩形框
Dec 24 #Python
Python中np.random.randint()参数详解及用法实例
Sep 23 #Python
Python中tqdm的使用和例子
Sep 23 #Python
You might like
深入php函数file_get_contents超时处理的方法详解
2013/06/03 PHP
php全局变量和类配合使用深刻理解
2013/06/05 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
2014/07/23 PHP
PHP递归创建多级目录
2015/11/05 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
DOM精简教程
2006/10/03 Javascript
在html页面中包含共享页面的方法
2008/10/24 Javascript
javascript代码加载优化方法
2011/01/30 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
vue学习笔记之v-if和v-show的区别
2017/09/20 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
神经网络理论基础及Python实现详解
2017/12/15 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
python如何从文件读取数据及解析
2019/09/19 Python
Python 之 Json序列化嵌套类方式
2020/02/27 Python
Python @property及getter setter原理详解
2020/03/31 Python
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
社会治安综合治理管理责任书
2014/04/16 职场文书
小学先进集体事迹材料
2014/05/31 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
2014最新毕业证代领委托书
2014/09/26 职场文书
2016年离婚协议书范文
2016/03/18 职场文书