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实现Linux下守护进程的编写方法
Aug 22 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
Aug 08 Python
django启动uwsgi报错的解决方法
Apr 08 Python
Python操作redis实例小结【String、Hash、List、Set等】
May 16 Python
python开头的coding设置方法
Aug 08 Python
详解如何用python实现一个简单下载器的服务端和客户端
Oct 28 Python
python 定义类时,实现内部方法的互相调用
Dec 25 Python
Python3变量与基本数据类型用法实例分析
Feb 14 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 Python
python操作微信自动发消息的实现(微信聊天机器人)
Jul 14 Python
python实现学生信息管理系统(精简版)
Nov 27 Python
Python读取和写入Excel数据
Apr 20 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
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
php中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
javascript 面向对象思想 附源码
2009/07/07 Javascript
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
jQuery的初始化与对象构建之浅析
2011/04/12 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
Extjs表单常见验证小结
2014/03/07 Javascript
JS生成不重复随机数组的函数代码
2014/06/10 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
JavaScript中双叹号!!作用示例介绍
2014/09/21 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
javaScript的函数对象的声明详解
2015/02/06 Javascript
HTML5实现留言和回复页面样式
2015/07/22 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
微信小程序版翻牌小游戏
2018/01/26 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
go和python调用其它程序并得到程序输出
2014/02/10 Python
Python访问纯真IP数据库脚本分享
2015/06/29 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
用HTML5实现手机摇一摇的功能的教程
2012/10/30 HTML / CSS
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
自我鉴定注意事项
2014/01/19 职场文书
《走一步再走一步》教学反思
2014/02/15 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
日元符号 ¥
2022/02/17 杂记
Java9新特性对HTTP2协议支持与非阻塞HTTP API
2022/03/16 Java/Android