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 Tkinter简单布局实例教程
Sep 03 Python
TensorFlow实现Batch Normalization
Mar 08 Python
python3解析库BeautifulSoup4的安装配置与基本用法
Jun 26 Python
Python2与Python3的区别实例分析
Apr 11 Python
Python微信操控itchat的方法
May 31 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
Aug 13 Python
Python while循环使用else语句代码实例
Feb 07 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
PyCharm MySQL可视化Database配置过程图解
Jun 09 Python
Keras自动下载的数据集/模型存放位置介绍
Jun 19 Python
Python接口自动化测试的实现
Aug 28 Python
Python 中random 库的详细使用
Jun 03 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和ACCESS写聊天室(九)
2006/10/09 PHP
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
PHP下判断网址是否有效的代码
2011/10/08 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
2015/04/01 PHP
PHP date函数常用时间处理方法
2015/05/11 PHP
php简单日历函数
2015/10/28 PHP
php时间计算相关问题小结
2016/05/09 PHP
PHP数组函数知识汇总
2016/05/12 PHP
PHP 断点续传实例详解
2017/11/11 PHP
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
Prototype框架详解
2015/11/25 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
JavaScript常用函数工具集:lao-utils
2016/03/01 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
2017/04/13 Javascript
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
Vue+ElementUI table实现表格分页
2019/12/14 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
Python切片操作深入详解
2018/07/27 Python
Python PyQt5模块实现窗口GUI界面代码实例
2020/05/12 Python
完美解决keras保存好的model不能成功加载问题
2020/06/11 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
初级Java程序员面试题
2016/03/03 面试题
毕业生找工作推荐信
2013/11/21 职场文书
个人合作协议书范本
2014/04/18 职场文书
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS