GitHub车牌检测识别项目调研
- 一,EasyOCR
- 二,HyperLPR
- 三,simple-car-plate-recognition-2
- 四,车牌检测-License-Plate-Detector
- 五,MMOCR
- 六,推荐 YOLOv5-LPRNet-Licence-Recognition
一,EasyOCR
1.1,仓库介绍
EasyOCR 是一个用于从图像中提取文本的 python 库, 它是一种通用的 OCR,既可以读取自然场景文本,也可以读取文档中的密集文本。目前支持 80 多种语言和所有流行的书写脚本,包括:拉丁文、中文、阿拉伯文、梵文、西里尔文等。
EasyOCR 仓库 截止到 2022-11-8日,star 数为 16.2k,其文件目录和作者给出的一些示例效果如下。
├── custom_model.md
├── Dockerfile
├── easyocr
├── easyocr.egg-info
├── examples
├── LICENSE
├── MANIFEST.in
├── README.md
├── releasenotes.md
├── requirements.txt
├── scripts
├── setup.cfg
├── setup.py
├── trainer
└── unit_test

1.2,使用记录
1,安装较为麻烦
在自行安装了 cuda 库和 pytorch 的基础上,可通过 pip install easyocr 命令安装 easyocr 库,但是注意卸载掉之前安装的 opencv-python 库(如果有)。
2,代码自动下载模型速度很慢
下载的仓库里面默认是不提供任何模型的,因此第一次运行快速推理脚本会自动下载对应的 ocr 模型,但是!如果网络不稳定,其下载速度非常慢,试了 n 次,基本不可能下载成功。
所以一般必须通过 Model hub 页面借助浏览器手动点击下载对应中英文 ocr 识别模型,然后手动把模型文件移动到 ~/.EasyOCR/model 文件夹下。
EasyOCR 仓库主要是通过 download_and_unzip 接口下载对应模型文件的,其也是通过调用 urllib 模块提供的 urlretrieve() 函数来实现文件的下载,其定义如下:
def download_and_unzip(url, filename, model_storage_directory, verbose=True):
zip_path = os.path.join(model_storage_directory, 'temp.zip')
reporthook = printProgressBar(prefix='Progress:', suffix='Complete', length=50) if verbose else None
# url 下载链接,zip_path 文件保存的本地路径, reporthook 利用这个回调函数来显示当前的下载进度
urlretrieve(url, zip_path, reporthook=reporthook)
with ZipFile(zip_path, 'r') as zipObj:
zipObj.extract(filename, model_storage_directory) # 解压到指定目录
os.remove(zip_path) # 移除下载的压缩包文件
3,车牌场景识别准确率非常低
经过我的大量测试,其在中国车牌场景下识别率几乎为 0,我猜测是因为作者提供的训练模型所用的训练数据没有车牌场景的,而 ocr 效果又非常依赖场景数据,所以导致汽车车牌识别率几乎为 0 ,具体实践效果如下。

二,HyperLPR
2.1,HyperLPR 概述
HyperLPR 框架是 github 作者 szad670401 开源的基于深度学习高性能中文车牌识别框架,支持多平台,提供了 Window、Linux、Android、IOS、ROS 平台的支持。 Python 依赖于 Keras (>2.0.0) 和 Theano(>0.9) or Tensorflow(>1.1.x) 机器学习库。项目的 C++ 实现和 Python 实现无任何关联,均为单独实现。
作者提供的测试用例效果如下:

2.3,使用记录
仓库 README 文件描述说 HyperLPR 框架对 python 包支持一键安装: pip install hyperlpr 。但是经过我实际测试发现,pip install hyperlpr 命令只能成功安装 hyperlpr 库.
1,快速上手的 py 代码运行会出错:

2,我把 demo 代码移动到 hyperlpr_py3 目录下运行,不再报上图的错误,但是又报了 opencv 函数版本的问题。
hyperlpr) root@crowd-max:/framework/HyperLPR/hyperlpr_py3# python test.py
(1, 3, 150, 400)
40 22 335 123
Traceback (most recent call last):
File "test.py", line 7, in <module>
print(HyperLPR_plate_recognition(image))
File "/opt/miniconda3/envs/hyperlpr/lib/python3.8/site-packages/hyperlpr/__init__.py", line 8, in HyperLPR_plate_recognition
return PR.plate_recognition(Input_BGR,minSize,charSelectionDeskew)
File "/opt/miniconda3/envs/hyperlpr/lib/python3.8/site-packages/hyperlpr/hyperlpr.py", line 311, in plate_recognition
cropped_finetuned = self.finetune(cropped)
File "/opt/miniconda3/envs/hyperlpr/lib/python3.8/site-packages/hyperlpr/hyperlpr.py", line 263, in finetune
g = self.to_refine(image_, pts)
File "/opt/miniconda3/envs/hyperlpr/lib/python3.8/site-packages/hyperlpr/hyperlpr.py", line 231, in to_refine
mat_ = cv2.estimateRigidTransform(org_pts, target_pts, True)
AttributeError: module 'cv2' has no attribute 'estimateRigidTransform'
3,ubuntu16.04+python3.8+cuda11.0 环境下,pip install -r requirements.txt 命令安装依赖包依然会出错。

2.3,使用建议
个人建议直接使用 C++ 版本,截止到 2022-11-8 日为止,纯 Python 版本还是有各种问题。
三,simple-car-plate-recognition-2
3.1,仓库介绍
simple-car-plate-recognition-2仓库 简称:简易车牌字符识别 2-Inception/CTC 。
作者使用的字符识别模型是参考 HyperLPR 里面的一个叫 SegmenationFree-Inception 的模型结构,并改用 pytorch 框架实现,然后训练模型,最后测试用整张车牌图片进行字符识别。
作者所用的车牌训练集,是利用 generateCarPlate 这个车牌生成工具生成的。
3.2,使用记录
直接用车牌做识别,实际测试下来,不管用作者给的模型,还是自己训练的模型,效果都很差。

3.3,使用建议
虽然代码简单,模型结构容易看懂,但是不建议使用,效果不稳定和太差。
四,车牌检测-License-Plate-Detector
4.1,仓库介绍
License-Plate-Detector 仓库 作者利用 Yolov5 模型进行了车牌检测,训练集使用 CCPD 数据集,测试效果如下:

4.2,建议
不建议使用,代码写的不够整洁,使用不够方便,使用 yolov5** 用作车牌检测的模型**的方法还是可以参考下。
五,MMOCR
5.1,仓库介绍
mmocr 是商汤 + openmmlab 实验室开发的 OCR 框架。MMOCR 是基于 PyTorch 和 mmdetection 的开源工具箱,专注于文本检测,文本识别以及相应的下游任务,如关键信息提取。 它是 OpenMMLab 项目的一部分。
主分支目前支持 PyTorch 1.6 以上的版本。mmocr 库的安装,可参考我之前的文章-ubuntu16.04安装mmdetection库。
5.2,使用记录
1,官方提供中文字符识别模型只有一个,其使用步骤如下:
- 创建
mmocr/data/chineseocr/labels目录; - 为了模型推理成功,下载中文字典,并放置到
labels目录;
wget -c https://download.openmmlab.com/mmocr/textrecog/sar/dict_printed_chinese_english_digits.txt
mv dict_printed_chinese_english_digits.txt mmocr/data/chineseocr/labels
- 运行推理脚本。
python mmocr/utils/ocr.py --det DB_r18 --recog SAR_CN demo/car1.jpeg --output='./'
车牌识别效果不好,测试结果如下:



2,官方提供的测试用例的推理效果如下:

5.3,使用建议
官方提供的不管是中文还是英文文本识别模型,在车牌场景下识别效果都不好,不推荐在车牌识别场景下使用,更适合通用场景。
六,推荐 YOLOv5-LPRNet-Licence-Recognition
6.1,仓库介绍
YOLOv5-LPRNet-Licence-Recognition 项目是使用 YOLOv5s 和 LPRNet 对中国车牌进行检测和识别,车牌数据集是使用 CCPD。
车牌字符识别的准确率如下:
model |
数据集 | epochs |
acc |
size |
|---|---|---|---|---|
| LPRNet | val | 100 | 94.33% | 1.7M |
| LPRNet | test | 100 | 94.30% | 1.7M |
总体模型速度:(YOLOv5 + LPRNet)速度:47.6 FPS(970 GPU)。
6.2,使用记录
作者提供的模型实际测试下来效果还不错,部分示例如下:



GitHub车牌检测识别项目调研的更多相关文章
- Github开源人脸识别项目face_recognition
Github开源人脸识别项目face_recognition 原文:https://www.jianshu.com/p/0b37452be63e 译者注: 本项目face_recognition是一个 ...
- javacpp-opencv图像处理系列:国内车辆牌照检测识别系统(万份测试车牌识别准确率99.7%以上,单次平均耗时39ms)
javaCV图像处理系列: 一.javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 二.javaCV图像处理之2:实时视频添 ...
- GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。
1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便 ...
- 基于卷积神经网络的人脸识别项目_使用Tensorflow-gpu+dilib+sklearn
https://www.cnblogs.com/31415926535x/p/11001669.html 基于卷积神经网络的人脸识别项目_使用Tensorflow-gpu+dilib+sklearn ...
- 使用git和github管理自己的项目---基础操作学习[转]
原文: https://segmentfault.com/a/1190000003728094 我是通过看廖雪峰的git教程学习的,真的是极好的,以下是我学习过程中的总结,记录下来,方便自己参考以熟悉 ...
- GitHub小技巧-定义项目语言
GitHub是根据项目里文件数目最多的文件类型,识别项目类型.后端项目难免会包含前端的资源,有时候就会被标记成前端语言,因为项目里 css 等文件比较多, 被误识别成css项目. GitHub不提供指 ...
- python人脸识别项目face-recognition
该项目基于Github上面的开源项目人脸识别face-recognition,主要是对图像和视频中的人脸进行识别,在开源项目给出的例子基础上对视频人脸识别的KNN算法进行了实现. 0x1 工程项目结构 ...
- 借助GitHub托管你的项目代码
PS:话说自己注册了GitHub都很久了,却没有怎么去弄,现在系统学习一下,也把自己的学习经历总结下来share给大家,希望大家都能把GitHub用起来,把你的项目代码happy地托管起来! 一.基本 ...
- 【转载】借助GitHub托管你的项目代码
PS:自己关注博客园有2年之久了,不久前才申请注册账号.GitHub也差不多一年多了,因英语水平刚刚及格,所以去GitHub没有博客园多,也是几个月前才注册了账号,前几天休息时看到 EdisonCho ...
- github上传本地项目
github上传本地项目,分为两个部分: 1.如果建立了ssh key的,直接看第二部分的上传部分就行了 2.如果没有建立ssh key的,就从头开始看吧 ——————————————————我是快乐 ...
随机推荐
- 4.ElasticSearch系列之基本概念
1. 文档 ElasticSearch是面向文档的,文档是所有可搜索数据的最小单位 文档会被序列化成JSON格式,保存在ES中 每个文档都有一个unique ID #查看前10条文档,了解文档格式 P ...
- 2022年最新最详细的tomcat安装教程和常见问的解决
文章目录 1.官网直接下载 1.1.jdk的版本和tomcat版本应该相对应或者兼容 1.2. 在官网找对应的tomcat版本进行下载 1.3 .根据电脑版本下载64-bit windows zip( ...
- 一天十道Java面试题----第三天(对线程安全的理解------>线程池中阻塞队列的作用)
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 21.对线程安全的理解 22.Thread和Runnable的区别 23.说说你对守护线程的理解 24.ThreadLoc ...
- 齐博x1标签实例:标签如何调用论坛内容
论坛的内容不像CMS其它模块可以直接用变量 {$rs.content} 因为论坛的内容数据表是放在另一个表的,单独分开的. 当前也是为了考试效率问题而这样设计的. 所以他的调用要用下面的代码 {:fu ...
- 齐博x1APP要实现直播的关键两步
大家务必要注意,缺少这两步,你的APP将不能实现直播, 也即点击直播按钮无法启动直播推流 https://www.maxdo.tech/
- C++ 不知树系列之初识树(树的邻接矩阵、双亲孩子表示法……)
1. 前言 树是一种很重要的数据结构,最初对数据结构的定义就是指对树和图的研究,后来才广义化了数据结构这个概念.从而可看出树和图在数结构这一研究领域的重要性. 树和图重要的原因是,它让计算机能建模出现 ...
- 4.Git分支查看&创建&切换&合并
查看分支 git branch -v # 查看分支,*代表当前所在的分支 创建分支 git branch hot-fix # 创建一个hot-fix分支,然后使用-v查看 # 可以看到除了ma ...
- C# 6.0 添加和增强的功能【基础篇】
C# 6.0 是在 visual studio 2015 中引入的.此版本更多关注了语法的改进,让代码更简洁且更具可读性,使编程更有效率,而不是和前几个版本一样增加主导性的功能. 一.静态导入 我们都 ...
- 小程序canvas2D绘制印章,话不多说,直接上代码
效果图: CanvasContext 是旧版的接口,不维护了, 新版 Canvas 2D 接口与 Web 一致 官方文档: https://developers.weixin.qq.com/mini ...
- 论文解读(CDCL)《Cross-domain Contrastive Learning for Unsupervised Domain Adaptation》
论文信息 论文标题:Cross-domain Contrastive Learning for Unsupervised Domain Adaptation论文作者:Rui Wang, Zuxuan ...