C++中文车牌识别检测系统源码
下载地址:C++中文车牌识别检测系统源码
其目标是成为一个简单、高效、准确的非限制场景(unconstrained situation)下的车牌识别库。
相比于其他的车牌识别系统,EasyPR有如下特点:
- 它基于openCV这个开源库。这意味着你可以获取全部源代码,并且移植到opencv支持的所有平台。
- 它能够识别中文。例如车牌为苏EUK722的图片,它可以准确地输出std:string类型的"苏EUK722"的结果。
- 它的识别率较高。图片清晰情况下,车牌检测与字符识别可以达到80%以上的精度。
更新
本次更新版本是1.6正式版本,主要有以下几点更新:
修正了多项readme的文本提示。
增加了C#调用EasyPR的一个项目的链接,感谢 @zhang-can 同学。
注意
对于Opencv3.2或以上版本,如果碰到编译问题,例如“ANN_MLP”相关的错误,尝试将config.h中将#define CV_VERSION_THREE_ZERO改为#define CV_VERSION_THREE_TWO试试.
linux系统推荐使用Opencv3.2以上版本。3.2以下的版本例如3.0和3.1在识别时可能会出现车牌识别结果为空的情况。稳妥起见,建议都升级到最新的3.2版本。Windows版本没有这个问题。
待做的工作
- 完成一个CNN框架
- 替换ANN为CNN
- 增加新能源车的识别(待定)
- 增加两行车牌的识别(待定)
跨平台
目前除了windows平台以外,还有以下其他平台的EasyPR版本。一些平台的版本可能会暂时落后于主平台。
现在有一个无需配置opencv的1.5版本的懒人版。仅仅支持vs2013,也只能在debug和x86下运行,其他情况的话还是得配置opencv。感谢范文捷同学的帮助。页面里的两个文件都要下载,下载后用7zip解压。
版本 | 开发者 | 版本 | 地址 |
---|---|---|---|
C# | zhang-can | 1.5 | zhang-can/EasyPR-DLL-CSharp |
android | goldriver | 1.4 | linuxxx/EasyPR_Android |
linux | Micooz | 1.6 | 已跟EasyPR整合 |
ios | zhoushiwei | 1.3 | zhoushiwei/EasyPR-iOS |
mac | zhoushiwei,Micooz | 1.6 | 已跟EasyPR整合 |
java | fan-wenjie | 1.2 | fan-wenjie/EasyPR-Java |
懒人版 | fan-wenjie | 1.5 | git/oschina |
兼容性
当前EasyPR是基于opencv3.0版本开发的,3.0及以上的版本应该可以兼容,以前的版本可能会存在不兼容的现象。
例子
假设我们有如下的原始图片,需要识别出中间的车牌字符与颜色:
经过EasyPR的第一步处理车牌检测(PlateDetect)以后,我们获得了原始图片中仅包含车牌的图块:
接着,我们对图块进行OCR过程,在EasyPR中,叫做字符识别(CharsRecognize)。我们得到了一个包含车牌颜色与字符的字符串:
“蓝牌:苏EUK722”
示例
EasyPR的调用非常简单,下面是一段示例代码:
CPlateRecognize pr;pr.setResultShow(false);pr.setDetectType(PR_DETECT_CMSER);vector<CPlate> plateVec;Mat src = imread(filepath);int result = pr.plateRecognize(src, plateVec);
我们首先创建一个CPlateRecognize的对象pr,接着设置pr的属性。
pr.setResultShow(false);
这句话设置EasyPR是否打开结果展示窗口,如下图。设置为true就是打开,否则就是关闭。在需要观看定位结果时,建议打开,快速运行时关闭。
pr.setDetectType(PR_DETECT_CMSER);
这句话设置EasyPR采用的车牌定位算法。CMER代表文字定位方法,SOBEL和COLOR分别代表边缘和颜色定位方法。可以通过"|"符号结合。
pr.setDetectType(PR_DETECT_COLOR | PR_DETECT_SOBEL);
除此之外,还可以有一些其他的属性值设置:
pr.setLifemode(true);
这句话设置开启生活模式,这个属性在定位方法为SOBEL时可以发挥作用,能增大搜索范围,提高鲁棒性。
pr.setMaxPlates(4);
这句话设置EasyPR最多查找多少个车牌。当一副图中有大于n个车牌时,EasyPR最终只会输出可能性最高的n个。
下面来看pr的方法。plateRecognize()这个方法有两个参数,第一个代表输入图像,第二个代表输出的车牌CPlate集合。
vector<CPlate> plateVec;Mat src = imread(filepath);int result = pr.plateRecognize(src, plateVec);
当返回结果result为0时,代表识别成功,否则失败。
CPlate类包含了车牌的各种信息,其中重要的如下:
CPlate plate = plateVec.at(i);Mat plateMat = plate.getPlateMat();RotatedRect rrect = plate.getPlatePos();string license = plate.getPlateStr();
plateMat代表车牌图像,rrect代表车牌的可旋转矩形位置,license代表车牌字符串,例如“蓝牌:苏EUK722”。
这里说下如何去阅读如下图的识别结果。
第1行代表的是图片的文件名。
第2行代表GroundTruth车牌,用后缀(g)表示。第3行代表EasyPR检测车牌,用后缀(d)表示。两者形成一个配对,第4行代表两者的字符差距。
下面同上。本图片中有3个车牌,所有共有三个配对。最后的Recall等指标代表的是整幅图片的定位评价,考虑了三个配对的结果。
有时检测车牌的部分会用“无车牌”与“No string”替代。“无车牌”代表“定位不成功”,“No string”代表“定位成功但字符分割失败”。
目录结构
以下表格是本工程中所有目录的解释:
目录 | 解释 |
---|---|
src | 所有源文件 |
include | 所有头文件 |
test | 测试程序 |
model | 机器学习的模型 |
resources/text | 中文字符映射表 |
resources/train | 训练数据与说明 |
resources/image | 测试用的图片 |
resources/doc | 相关文档 |
tmp | 训练数据读取目录,需要自建 |
以下表格是resources/image目录中子目录的解释:
目录 | 解释 |
---|---|
general_test | GDTS(通用数据测试集) |
native_test | NDTS(本地数据测试集) |
tmp | Debug模式下EasyPR输出中间图片的目录,需要自建 |
以下表格是src目录中子目录的解释:
目录 | 解释 |
---|---|
core | 核心功能 |
preprocess | SVM预处理 |
train | 训练目录,存放模型训练的代码 |
util | 辅助功能 |
以下表格是src目录下一些核心文件的解释与关系:
文件 | 解释 |
---|---|
plate_locate | 车牌定位 |
plate_judge | 车牌判断 |
plate_detect | 车牌检测,是车牌定位与车牌判断功能的组合 |
chars_segment | 字符分割 |
chars_identify | 字符鉴别 |
chars_recognise | 字符识别,是字符分割与字符鉴别功能的组合 |
plate_recognize | 车牌识别,是车牌检测与字符识别的共有子类 |
feature | 特征提取回调函数 |
plate | 车牌抽象 |
core_func.h | 共有的一些函数 |
以下表格是test目录下文件的解释:
文件 | 解释 |
---|---|
main.cpp | 主命令行窗口 |
accuracy.hpp | 批量测试 |
chars.hpp | 字符识别相关 |
plate.hpp | 车牌识别相关 |
以下表格是train目录下文件的解释:
文件 | 解释 |
---|---|
ann_train.cpp | 训练二值化字符 |
annCh_train.hpp | 训练中文灰度字符 |
svm_train.hpp | 训练车牌判断 |
create_data.hpp | 生成合成数据 |
使用
请参考这里
下载地址:C++中文车牌识别检测系统源码
C++中文车牌识别检测系统源码相关推荐
- 基于YOLOv5行人车辆跟踪检测识别计数系统源码+数据集,实现出/入分别计数
yolov5 deepsort 行人 车辆 跟踪 检测 计数 下载地址:基于YOLOv5行人车辆跟踪检测识别计数系统源码+数据集 实现了 出/入 分别计数. 默认是 南/北 方向检测,若要检测不同位置 ...
- YOLO&Deepsort的车速&车流量检测系统(源码&部署教程)
1.研究内容: 基于车辆行驶异常事件检测研究主要包括检测检测车辆的行驶速度异常.检测到流量异常行为的处理两个部分. 2.研究目标: 检测车辆违规变道:熟练运用图像处理的相关工具,可对车辆的异常变道行为 ...
- Python基于OpenCV的异常行为检测系统[源码&部署教程]
1.项目背景 智能视频监控(Intelligent Video Surveillance , IVS)[1.2·3.4是计算机视觉技术5l在安防领域的应用,实现了由"被动监控"到& ...
- Python基于YOLOv7的火灾检测系统(源码&教程)
1.项目背景 为解决传统传感器在检测火灾的过程中受到环境.安装距离等因素影响导致适应性差的缺点,本文基于视觉传 感器,通过视觉目标检测技术对火灾进行检测,从而实现火灾的预警. 2.识别效果展示 3.视 ...
- [YOLOv7]基于YOLOv7的食物卡路里检测系统(源码&部署教程&数据集)
1.识别效果展示 2.视频演示 [YOLOv7]基于YOLOv7的食物卡路里检测系统(源码&部署教程&数据集)_哔哩哔哩_bilibili 3.YOLOv7算法简介 YOLOv7 在 ...
- YOLOv7的食物卡路里检测系统(源码&部署教程&数据集)
1.识别效果展示 2.视频演示 [YOLOv7]基于YOLOv7的食物卡路里检测系统(源码&部署教程&数据集)_哔哩哔哩_bilibili 3.YOLOv7算法简介 YOLOv7 在 ...
- 基于Java毕业设计中文网络小说平台系统源码+系统+mysql+lw文档+部署软件
基于Java毕业设计中文网络小说平台系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计中文网络小说平台系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S ...
- 机动车乱停乱放检测系统(源码&部署教程)
1.识别效果展示 2.视频演示 [YOLOv7]基于YOLOv7的机动车乱停乱放检测系统(源码&部署教程)_哔哩哔哩_bilibili 3.YOLOv7算法简介 YOLOv7 在 5 FPS ...
- matlab车牌识别 复杂环境,基于MATLAB复杂背景车牌识别检测系统
基于MATLAB复杂背景车牌识别检测系统 1.选题目的和意义 在复杂背景车牌识别检测系统中,由于拍摄时的光照条件.牌照的整洁程度的影响,和摄像机的焦距调整.镜头的光学畸变所产生的噪声都会不同程度地造成 ...
最新文章
- R语言数据结构之因子
- 一个线程中lock用法的经典实例
- pybind11简单使用
- 一个网络传输框架——zeroMQ 调研笔记
- 计算机网络复习-数据链路层
- Docker教程小白实操入门(21)--如何备份、恢复数据卷
- 【桌面运维转网络要做什么准备,高级网工学习路线分享】
- 如果使用CSS创建表格显示
- linux如何卸载光驱显示busy,执行umount 的时候却提示:device is busy 的处理方法 卸载挂载的盘提示如下...
- Android OpenGL ES从入门到进阶(六)—— OpenGL ES人像美白与磨皮初探
- 排坑·IPhoneIOS中不兼容正则中的断言匹配
- 零学Java(7)之数据类型,小AD竟然solo不过小朋友
- 都快2021年了,居然还有数据分析师不会MECE
- 新媒体运营教程:线上线下用户转化的核心流程!
- 走近Harvest Moon:Moonbeam DeFi狂欢会
- 安装程序时出现2502 2503错误解决方法
- 直播预告 | NeurIPS 专场六 青年科学家专场
- GAN介绍 - 相关研究课题
- 可以像微信钱包一样?2020年数字钱包技术重要的进化方向(上)
- 山河盟:人类为大地母亲准备的一份礼物
热门文章
- 组态王曲线控件读取access_组态王历史趋势曲线控件.doc
- Android 折叠屏型号判断(包含pad)
- python人脸识别系统界面设计_基于卷积神经网络的人脸识别系统的设计(Python)
- 【VB6.0 数据库连接EXCEL查询合并单元格成功解决办法】
- 市场第一!企企通入选艾瑞《2022年中国数字化采购行业研究报告》
- 【C/C++】【面经】2022 禾赛 应用软件开发 面经总结;(更新一面、二面)
- 万能素材库_经典人物万能素材库 高考作文万能素材集锦
- 论文阅读:Practical Deep Raw Image Denoising on Mobile Devices
- 2.IMX6ULL手册管脚上手
- Mysql基于Amoeba_读写分离搭架