OpenCV学习案例之车牌识别easyPR

起始

github上开源中文车牌识别库比较少:

  • HyperLPR,基于深度学习高性能中文车牌识别库,支持python、c++, 可以在Android,Linux等各种平台使用
  • EasyPR ,一个简单、高效、准确的非限制场景(unconstrained situation)下的车牌识别库

两者中EasyPR作者有一系列博客文章,详细介绍了EasyPR的开发过程,其中还介绍了很多OpenCV基础知识,十分适合案例学习。

EasyPR博客: https://www.cnblogs.com/subconscious/p/3979988.html

1. Windows编译

根据EasyPR readme介绍,windows下是vs+cmake编译,但我电脑用的是mingw64,所以自己编写Makefile,没有用官方的vs+cmake

1.1 环境准备

  • Windows10 x64
  • OpenCV3.4.0 编译好的文件,编译方法可以见我的另一篇博客
  • mingw-w64 gcc-7.3.0
  • EasyPR 最新版源代码

1.2 编译之前需要修改一下源码

  1. 在include\easypr\config.h第134行

    #ifdef CV_VERSION_THREE_TWO#define LOAD_SVM_MODEL(model, path) \model = ml::SVM::load(path);#define LOAD_ANN_MODEL(model, path) \model = ml::ANN_MLP::load(path);
    #else#define LOAD_SVM_MODEL(model, path) \model = ml::SVM::load<ml::SVM>(path);#define LOAD_ANN_MODEL(model, path) \model = ml::ANN_MLP::load<ml::ANN_MLP>(path);
    #endif
    

    替换为

    #define LOAD_SVM_MODEL(model, path) \model = Algorithm::load<ml::SVM>(path)
    #define LOAD_ANN_MODEL(model, path) \model = Algorithm::load<ml::ANN_MLP>(path)
    

    原因是,使用的OpenCV版本是3.4.0,SVM和ANN_MLP加载方式变了

1.3 编写Makefile文件

library目录是OpenCV编译好的lib,bin,include三个文件夹的父目录

lib := -lopencv_aruco340\
-lopencv_bgsegm340\
-lopencv_bioinspired340\
-lopencv_calib3d340\
-lopencv_ccalib340\
-lopencv_core340\
-lopencv_datasets340\
-lopencv_dnn340\
-lopencv_dpm340\
-lopencv_face340\
-lopencv_features2d340\
-lopencv_flann340\
-lopencv_fuzzy340\
-lopencv_highgui340\
-lopencv_imgcodecs340\
-lopencv_imgproc340\
-lopencv_img_hash340\
-lopencv_line_descriptor340\
-lopencv_ml340\
-lopencv_objdetect340\
-lopencv_optflow340\
-lopencv_phase_unwrapping340\
-lopencv_photo340\
-lopencv_plot340\
-lopencv_reg340\
-lopencv_rgbd340\
-lopencv_saliency340\
-lopencv_shape340\
-lopencv_stereo340\
-lopencv_stitching340\
-lopencv_structured_light340\
-lopencv_superres340\
-lopencv_surface_matching340\
-lopencv_text340\
-lopencv_tracking340\
-lopencv_video340\
-lopencv_videoio340\
-lopencv_videostab340\
-lopencv_xfeatures2d340\
-lopencv_ximgproc340\
-lopencv_xobjdetect340\
-lopencv_xphoto340\
-lopencv_ffmpeg340_64\base_dir := C:\\Users\\supre\\Desktop\\EasyPR-master
lib_dir := ${base_dir}\\library\bin
include_dir := ${base_dir}\\library\includesrc := src/core/core_func.cpp \src/core/chars_identify.cpp \src/core/chars_recognise.cpp \src/core/chars_segment.cpp \src/core/feature.cpp \src/core/plate_detect.cpp \src/core/plate_judge.cpp \src/core/plate_locate.cpp \src/core/plate_recognize.cpp \src/core/params.cpp \src/train/ann_train.cpp \src/train/annCh_train.cpp \src/train/svm_train.cpp \src/train/train.cpp \src/train/create_data.cpp \src/util/util.cpp \src/util/program_options.cpp \src/util/kv.cpp \test/main.cpp \thirdparty/xmlParser/xmlParser.cpp \thirdparty/textDetect/erfilter.cpp \thirdparty/LBP/helper.cpp \thirdparty/LBP/lbp.cpp \thirdparty/mser/mser2.cppmain:g++ $(src) -I ${include_dir} -I ${include_dir}\opencv -I ${include_dir}\opencv2 -I ${base_dir}\include -I ${base_dir}  -L ${lib_dir} $(lib) -o easypr.exe

1.4 在Makefile文件目录下执行mingw32-make

1.5 生成好的easypr.exe执行报找不到dll错误

​ 这里需要将opencv dll所在目录library\bin,配在环境变量PATH上。重新打开命令行,执行easypr.exe

1.6 最终显示

2. 代码阅读

2.1 车牌定位(plate_locate)

  • 从main.cpp开始找到测试车牌定位的代码,可以看到读取resources/image/plate_locate.jpg车牌照片,执行CPlateLocate的plateLocate方法,得到车牌数量result和车牌vector<Mat> resultVec

  • 继续跟进,可以看到对车牌进行了三次处理定位,颜色,sobel算子, MSER文字定位。
    EasyPR作者有文章分别讲解这三部分:颜色定位和偏斜扭转, 高斯模糊、灰度化和Sobel算子,文字定位

2.2 车牌判断(plate_judge)

  • 找到车牌判断部分代码,前面是车牌定位,后面是车牌判断,主要是plateJudge这个方法,后面是通过getHistomPlusColoFeatures获取特征,通过svm对车牌判断,得出分数,0是车牌,-1不是。EasyPR作者对SVM有篇文章https://www.cnblogs.com/subconscious/p/4249581.html,值得一看

2.3 字符分割(char_segment)

  • 通过charsSegment对车牌照片字符分隔,EasyPR作者有一篇文章,字符分割,详细介绍了代码中分割的流程

2.4 字符识别(char_identify)

  • 通过identify函数进行识别,block_i为0代表第一个字符,车牌第一个字符是中文,所以identify第二个参数传true进行识别。在identify最主要还是classify函数,对字符识别分类。在classify函数中,可以看到是通过ANN_MLP对字符进行识别

OpenCV学习案例之车牌识别EasyPR相关推荐

  1. 开源项目车牌识别EasyPR的使用

    开源项目车牌识别EasyPR的使用 1.配置Visual studio+opencv 2.下载源码 https://gitee.com/easypr/EasyPR?hmsr=aladdin1e6 3. ...

  2. 基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)

    摘要:本文详细介绍基于深度学习的中文车牌识别与管理系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中既可以选择需要识别的车牌视频.图片文件.批量图片进行检测识别,也 ...

  3. OpenCV(项目)车牌识别1 -- 车牌提取(形态学)

    目录 一.形态学车牌提取(简单:单情景) 1.读取图片,转灰度图 2.提取轮廓(Sobel算子提取y方向边缘) 3.自适应二值化 4.闭运算处理,把图像闭合.揉团,使图像区域化 5.腐蚀/膨胀去噪得到 ...

  4. 毕业设计-基于深度学习的智能车牌识别系统

    目录 前言 课题背景和意义 实现技术思路 一.车牌识别的一般流程 二.智能车牌识别系统的设计思路 三.基于深度学习的智能车牌识别系统的实现 四.智能车牌识别系统的训练与测试 五.总结 实现效果图样例 ...

  5. 【OpenCV+Qt】使用车牌识别系统EasyPR识别车牌号

    EasyPR是一个中文的开源车牌识别系统,其车牌识别划分为了两个过程:即车牌检测(Plate Detection)和字符识别(Chars Recognition)两个过程: 车牌检测(Plate De ...

  6. 车牌识别EasyPR(3)——SVM模型判断车牌

    本文开始分析车牌定位模块后续步骤的车牌判断模块.车牌判断模块是EasyPR中的基于机器学习模型的一个模块,这个模型就是SVM(支持向量机). 我们已经知道,车牌定位模块的输出是一些候选车牌的图片.但如 ...

  7. OpenCV(项目)车牌识别4 -- 总结篇

    目录 一.效果 1.成功案例 2.经典失败案例(单字符识别成类似字符) 3.其他失败案例 二.总结 三.车牌识别总代码 一.效果 1.成功案例 2.经典失败案例(单字符识别成类似字符) 3.其他失败案 ...

  8. 【深度学习】你不知道的车牌识别系统

    有小伙伴后台和小白说,能不能推荐几个适合入门的开源视觉项目,因为根据实际项目和代码学起来相对来说比较快.小白收集了一些比较简单的开源的项目,会陆陆续续的分享给大家,文末有源码地址. 今天首先带来的是一 ...

  9. 基于深度学习的自动车牌识别(详细步骤+源码)

    点击下方卡片,关注" OpenCV与AI深度学习"公众号! 视觉/图像重磅干货,第一时间送达! 来源 | Learn OpenCV 作者 | Sanyam 翻译 | OpenCV与 ...

最新文章

  1. IT工程师必备的认证
  2. opengl游戏引擎源码_UE4渲染引擎模块简介(1)
  3. ubuntu16.04卡在了’SMBus Host Controller not enabled‘
  4. QT的QStack类的使用
  5. 相机视场角和焦距_按照工业镜头的视场的分类
  6. Spring框架中ApplicationContext与BeanFactory的区别
  7. mount: none already mounted or /cgroup busy
  8. ota升级 rk3399_RK3399 的ota升级方法
  9. hdfs 元数据维护机制
  10. python 爬取doc文档
  11. [转]gcc -ffunction-sections -fdata-sections -Wl,–gc-sections 参数详解
  12. BootStrap笔记-下拉菜单的使用
  13. C++ 定义学生信息结构体,按照学号顺序排序
  14. 人工智能一路狂飙现隐忧 过高预期恐催泡沫
  15. 制作通过 NuGet 分发的源代码包时,如果目标项目是 WPF 则会出现一些问题(探索篇,含解决方案)
  16. Linux云计算架构-docker容器命名和资源配额控制(2)
  17. 梦幻诛仙内充php怎么使用,新手教程 梦幻诛仙手游微信充值步骤分享
  18. VL-BEiT:Generative Vision-Language Pretraining(生成Vision-Language预训练)
  19. iBook导入PDF格式的电子书
  20. 「首次深度揭秘」Fomo3D,被黑客拿走的2200万

热门文章

  1. daytime协议的服务器和客户端程序,用socket套接字实现daytime协议的服务器和客户端程序精编版.doc...
  2. 【数据结构】- 几个步骤教你认识并实现一个链表之带头(哨兵位)双向循环链表(中)
  3. 汇编语言寄存器说明eax, ebx, ecx, edx, esi, edi, ebp, esp,eip
  4. 堆栈思想案例—汉诺塔问题求解最小步数
  5. 高德地图 定位失败,10: 定位服务启动失败 解决办法
  6. 3dmax打开错误html,安装3dmax出现错误怎么办?3dmax出现错误解决办法
  7. mathematics中如何计算排列组合
  8. PDF文件不能编辑怎么办?
  9. 官方微信支付跟特约商户的区别
  10. “GitHub: Your account has been flagged.”的完美解决方法