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递归遍历列表及输出的实现方法
May 19 Python
Python验证码识别处理实例
Dec 28 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
Nov 29 Python
pandas修改DataFrame列名的方法
Apr 08 Python
将Django项目部署到CentOs服务器中
Oct 18 Python
解决python3读取Python2存储的pickle文件问题
Oct 25 Python
Python3实现的反转单链表算法示例
Mar 08 Python
Python实现将HTML转成PDF的方法分析
May 04 Python
django之自定义软删除Model的方法
Aug 14 Python
Python实现把类当做字典来访问
Dec 16 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
Feb 14 Python
解决c++调用python中文乱码问题
Jul 29 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用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
jquery实现图片放大镜功能
2015/11/23 Javascript
JS实现的表头列头固定页面功能示例
2017/01/10 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
koa router 多文件引入的方法示例
2019/05/22 Javascript
iview实现图片上传功能
2020/06/29 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
[13:25]VP vs VICI (BO3)
2018/06/07 DOTA
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
python爬虫的数据库连接问题【推荐】
2018/06/25 Python
python list数据等间隔抽取并新建list存储的例子
2019/11/27 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
千禧酒店及度假村官方网站:Millennium Hotels and Resorts
2019/05/10 全球购物
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
应聘教师自荐信
2013/10/12 职场文书
个人优缺点自我评价
2014/01/27 职场文书
马智宇婚礼主持词
2014/03/22 职场文书
党员岗位承诺口号大全
2014/03/28 职场文书
《画风》教学反思
2014/04/16 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
老乡会致辞
2015/07/28 职场文书
MySQL添加索引特点及优化问题
2022/07/23 MySQL
React更新渲染原理深入分析
2022/12/24 Javascript