一、概要

在上一篇文章中,主要介绍了HyperLPR开源车牌识别系统的配置和使用(链接:https://blog.csdn.net/oJiWuXuan/article/details/107332668),目前这个系统是我用过的开源车牌识别程序中最精准最稳定的,很多模糊的、角度倾斜的、恶劣天气下的车牌都能识别清楚,作为开源程序来说已经非常优秀了。但是上一篇文章主要是在虚拟环境中的配置及HyperLPR的简单使用,并没有涉及HyperLPR在实际场景中的应用,如对具体图片或者视频中车牌的识别并输出识别后的图片或视频。在这一篇文章中,对HyperLPR 对图片和视频中车牌的识别进行详细的介绍。

话不多说,直接上干货。

二、配置

这里不再具体的在虚拟环境中配置HyperLPR了,而是将HyperLPR中程序的主文件直接放到固定的文件夹中,好处就是后续需要结合业务场景优化功能时,方便直接在源码上进行修改来实现。当然,虚拟环境中的其他模块还是要安装好的,比如TensorFlow、opencv-python、keras等,而且要注意这些模块的版本。这里用的模型是HyperLPR官方直接训练好的模型,对识别国内一般的车牌而言已经足够了。

我们先从github上下载下来完整的HyperLPR文件并解压缩。
github:https://github.com/zeusees/HyperLPR。

然后新建一个文件夹,我这里命名为HyperLPR-V0.1,接着将HyperLPR中的hyperlpr_py3、model、font三个文件夹复制过来,再将我们要用的一些图片啊视频啊放到data文件夹下,文件夹目录如下图所示。

三、图片识别

首先是对图片的识别,车牌识别程序的核心代码主要是在hyperlpr_3中的pipline.py文件中,这里要对pipline.py中的def SimpleRecognizePlate函数进行部分修改,如下:

## 识别图片中的车牌
def SimpleRecognizePlate(image, save_path):t0 = time.time()# 读取图片image = cv2.imread(image)images = detect.detectPlateRough(image,image.shape[0],top_bottom_padding_rate=0.1)res_set = []for j,plate in enumerate(images):plate, rect, origin_plate  =plate# plate = cv2.cvtColor(plate, cv2.COLOR_RGB2GRAY)plate  =cv2.resize(plate,(136,36*2))t1 = time.time()ptype = td.SimplePredict(plate)if ptype>0 and ptype<5:plate = cv2.bitwise_not(plate)image_rgb = fm.findContoursAndDrawBoundingBox(plate)image_rgb = fv.finemappingVertical(image_rgb)cache.verticalMappingToFolder(image_rgb)print("e2e:", e2e.recognizeOne(image_rgb))image_gray = cv2.cvtColor(image_rgb,cv2.COLOR_RGB2GRAY)# image_gray = horizontalSegmentation(image_gray)# cv2.imshow("image_gray",image_gray)   # 显示分割出来的灰色车牌截图# cv2.waitKey()# cv2.imwrite("./"+str(j)+".jpg",image_gray)   # 保存分割出来的灰色车牌截图# cv2.imshow("image",image_gray)# cv2.waitKey(0)print("校正",time.time() - t1,"s")# cv2.imshow("image,",image_gray)# cv2.waitKey(0)t2 = time.time()val = segmentation.slidingWindowsEval(image_gray)# print valprint("分割和识别",time.time() - t2,"s")if len(val)==3:blocks, res, confidence = valprint('--------------------{}--------------------'.format(res))if confidence/7>0.7:image = drawRectBox(image, rect, res)res_set.append(res)for i,block in enumerate(blocks):block_ = cv2.resize(block,(25,25))block_ = cv2.cvtColor(block_,cv2.COLOR_GRAY2BGR)image[j * 25:(j * 25) + 25, i * 25:(i * 25) + 25] = block_if image[j*25:(j*25)+25,i*25:(i*25)+25].shape == block_.shape:passif confidence>0:print("车牌:",res,"置信度:",confidence/7)else:pass# print "不确定的车牌:", res, "置信度:", confidence# 显示车牌识别结果的图片cv2.imshow("image", image)k = cv2.waitKey(0)if k == 27:  # 按下esc时,退出cv2.destroyAllWindows()elif k == ord('s'):  # 按下s键时保存并退出cv2.imwrite(save_path, image)cv2.destroyAllWindows()# print(time.time() - t0,"s")# return image,res_set

然后在我们建立的lpr_image.py文件中写入调用上述函数的代码:

from hyperlpr_py3 import pipline as pp
import cv2image = 'data/009.jpg'
save_path = 'output-image/MySaveImage.jpg'
pp.SimpleRecognizePlate(image, save_path)print('-------------')

执行后就可在output-image文件夹中生成车牌识别后的图片了,下面是车牌识别的结果。可见识别效果还是不错的。

四、视频识别

接下来是对视频文件中车牌的识别,我们还是在hyperlpr_3中的pipline.py文件中进行修改,这里新建一个def SimpleRecognizePlate_video的函数,代码如下所示。

# 识别视频中的车牌
def SimpleRecognizePlate_video(video, save_path):# t0 = time.time()# 读取视频cap = cv2.VideoCapture(video)time.sleep(2.0)# 获取窗口大小size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))# 设置帧率fps = 60# 调用VideoWrite()函数,保存处理后的视频videoWrite = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*'DIVX'), fps, size)# 从视频读取数据, 读取成功 ret为True,否则为False,frame里面就是一个三维数组保存图像ret, frame = cap.read()while True:for iii in range(1):ret, frame = cap.read()  # 每5帧取一次 加速计算# grab the frame from the threaded video stream# ret, frame = cap.read()if ret is False:print('No data, break.')breakimage = frame# 对图片中的车牌进行识别images = detect.detectPlateRough(image,image.shape[0],top_bottom_padding_rate=0.1)res_set = []for j,plate in enumerate(images):plate, rect, origin_plate = plate# plate = cv2.cvtColor(plate, cv2.COLOR_RGB2GRAY)plate  =cv2.resize(plate,(136,36*2))# t1 = time.time()ptype = td.SimplePredict(plate)if ptype>0 and ptype<5:plate = cv2.bitwise_not(plate)image_rgb = fm.findContoursAndDrawBoundingBox(plate)image_rgb = fv.finemappingVertical(image_rgb)cache.verticalMappingToFolder(image_rgb)# print("e2e:", e2e.recognizeOne(image_rgb))image_gray = cv2.cvtColor(image_rgb,cv2.COLOR_RGB2GRAY)# print("校正",time.time() - t1,"s")# cv2.imshow("image,",image_gray)# cv2.waitKey(0)# t2 = time.time()val = segmentation.slidingWindowsEval(image_gray)# print val# print("分割和识别",time.time() - t2,"s")if len(val)==3:blocks, res, confidence = valprint('--------------------{}--------------------'.format(res))if confidence/7>0.7:# 绘制车牌识别框image = drawRectBox(image, rect, res)res_set.append(res)for i,block in enumerate(blocks):block_ = cv2.resize(block,(25,25))block_ = cv2.cvtColor(block_,cv2.COLOR_GRAY2BGR)image[j * 25:(j * 25) + 25, i * 25:(i * 25) + 25] = block_if image[j*25:(j*25)+25,i*25:(i*25)+25].shape == block_.shape:passif confidence>0:print("车牌:",res,"置信度:",confidence/7)else:pass# print "不确定的车牌:", res, "置信度:", confidencecv2.imshow("Frame", image)key = cv2.waitKey(1) & 0xFF# if the `q` key was pressed, break from the loopif key == ord("q"):break# 保存帧为视频videoWrite.write(image)cv2.destroyAllWindows()cap.release()# print(time.time() - t0,"s")

然后在我们建立的lpr_video.py文件中写入调用上述函数的代码:

from hyperlpr_py3 import pipline as pp
import cv2video = 'data/test.mp4'
save_path = 'output-video/MySaveVideo.avi'
pp.SimpleRecognizePlate_video(video, save_path)print('-------------')

执行后就可在output-video文件夹中生成车牌识别后的视频了,下面是视频中的截图。由于视频质量着实堪忧,所以识别效果有时候会有一些误差,但总体识别情况还是挺好的。


本文的详细代码已上传至 github: https://github.com/jiwuxuan/HyperLPR-Meow。
可供参考。

HyperLPR 对图片和视频中车牌的识别相关推荐

  1. python红色的颜色表达式_50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)...

    目前计算机视觉(CV)与自然语言处理(NLP)及语音识别并列为人工智能三大热点方向,而计算机视觉中的对象检测(objectdetection)应用非常广泛,比如自动驾驶.视频监控.工业质检.医疗诊断等 ...

  2. 50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)

    目前计算机视觉(CV)与自然语言处理(NLP)及语音识别并列为人工智能三大热点方向,而计算机视觉中的对象检测(objectdetection)应用非常广泛,比如自动驾驶.视频监控.工业质检.医疗诊断等 ...

  3. Python 计算机视觉(十六)—— 图像和视频中的人脸识别

    参考的一些文章以及论文我都会给大家分享出来 -- 链接就贴在原文,论文我上传到资源中去,大家可以免费下载学习,如果当天资源区找不到论文,那就等等,可能正在审核,审核完后就可以下载了.大家一起学习,一起 ...

  4. 模型:用hyperlpr3实现图片和视频中的车牌号提取

    文章目录 一.识别图片中的车牌号 二.识别视频中的车牌号 参考地址:GitHub 本文用的python 3.7.16,安装hyperlpr3 pip install hyperlpr3 一.识别图片中 ...

  5. html5穿插动图,视频中间插播广告 在视频中的任意位置添加广告图片,视频中穿插图片的方法...

    小编最近在看一个电视剧,这个电视剧只能用优酷的播放器进行播放,但优酷播放器真是让我很奔溃,看一集视频起码要插播三次广告,简直全程无感.幸好之前解决了优酷视频转换格式的问题,不然我真是要放弃优酷播放器了 ...

  6. 人脸识别(四)视频中的人物识别

    功能: 对视频中的演员进行识别标注 需要先建立演员的人脸编码库,才能识别出来额 # 视频中的人脸标注 #合照中的人脸标注 import numpy as np import cv2 import fa ...

  7. 基于Python的视频中的人脸识别系统设计与实现

    目录 一:问题描述 2 二:实现思路 2 2.1 切换点 2 2.1.2 镜头切换点 3 2.1.2 音频切换点. 3 2.2 嘉宾识别 = 人脸识别 & 声纹识别 4 2.2.1 人脸识别 ...

  8. python+opencv+PIL,在图片和视频中写入中文(汉字)

    原博客地址:https://blog.csdn.net/wyx100/article/details/80412101 效果 代码 #!/usr/bin/env python # -*- coding ...

  9. Mask RCNN 实战(二)--像黑镜一样屏蔽图片和视频中的人和物体

    Mask RCNN:项目地址 <黑镜:圣诞特别篇>里,出现了"屏蔽"技术.不喜欢一个人,可以屏蔽他.这样,你们就再也看不见对方,也无法打电话.写信.甚至你看到电视机上的 ...

最新文章

  1. Socket 通信原理(Android客户端和服务器以TCPUDP方式互通)
  2. php5.5.25升级到php5.6.30,加载yaf.so报错解决方法!
  3. easyui中的datagrid的数据加载的问题
  4. 如何将多个文件捆绑成一个可执行文件
  5. Python PIP Mysql-python 报错 ERROR: Command errored out with exit status 1: python setup.py egg_info C
  6. 只有10万元预算买畅销SUV自动车型您选谁?
  7. 白话空间统计之二十五:空间权重矩阵(三)解构空间权重矩阵
  8. JAVA如何封装省市区_基于element ui封装的省市区三级联动
  9. BIO输给NIO了吗 —————— 开开开山怪
  10. (EXCEL VB初体验)EXCEL自动行高再加高,超详细
  11. 关于windows虚拟桌面使用及录屏
  12. 【设计开发命名必备】英语单词缩写规则
  13. html自定义弹窗,自定义弹窗为密文密码框(实现重新鉴别密码),一系列踩坑解决
  14. 计算机一级考试可以搜索吗,手动找回Windows7搜索功能
  15. Derivation of Linear Regression with One Variable
  16. win11中wsa使用fiddler抓包(https)
  17. 基于vue实现sku商品选择
  18. 结对-爬取大麦网演唱会信息-设计文档
  19. Celery Django 运行 task 任务的时候 提示NotRegistered
  20. 猿创征文|计算机学生必须掌握的学习工具

热门文章

  1. Node.JS中调用JShaman,加密JS代码
  2. 正则表达式校验手机号/座机号
  3. Ubuntu 20.04向日葵远程下载及安装记录
  4. 递进式产品研发基本过程
  5. UE4-4.26蓝图功能实现:鼠标点击旋转双开门
  6. 华为C8650如何实现USB调试
  7. [国家集训队2011]稳定婚姻(无向图定向)
  8. autoCAD2010 移动命令
  9. 塔吊塔机远程告警监测设备
  10. wowmodelexplorer:游戏模式和坐骑