中文车牌识别库EasyPR配置全过程及编译问题解决(win10_VS2019_opencv34)
本文目录
- 中文车牌识别库EasyPR配置全过程及编译问题解决(win10_VS2019_opencv34)
- 一.开源库介绍
- 二.准备工作
- EasyPR源码下载
- Opencv下载与编译
- 软件环境配置
- 三.编译中的几个问题
- 1.明明配置完成还是找不到opencv.hpp
- 2.出现ANN_MLP有关的问题
- 3.检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”
- 4.找不到opencv_world3413.dll
- 四.简单的运行结果
- 五.后续工作
一.开源库介绍
EasyPR是一个中文的开源车牌识别系统,其目标是成为一个简单、高效、准确的车牌识别引擎。相比于其他的车牌识别系统,EasyPR有如下特点:它基于openCV这个开源库。这意味着你可以获取全部源代码,并且移植到java等平台。它能够识别中文。例如车牌为苏EUK722的图片,它可以准确地输出std:string类型的"苏EUK722"的结果。它的识别率较高。图片清晰情况下,车牌检测与字符识别可以达到80%以上的精度。
二.准备工作
EasyPR源码下载
使用git或者直接在github仓库下载压缩包。地址如下:
EasyPR
Opencv下载与编译
在windows下使用opencv库方法主要分为两种:1.从源码使用cmake进行编译,过程比较复杂。常见于使用非VS的idle如用mingw使用opencv;2.直接使用编译好的lib库和和可执行文件dll。本文在VS2019下使用opencv,所以使用编译好的文件以求便捷。具体过程如下:
首先,进入opencv官方的库分发地址中,下载opencv3.4的最新windows安装文件。下载地址
将下载好的压缩包解压到合适的地方,得到下列文件,下文将介绍如何使用:
软件环境配置
解压好EasyPR库文件,文件目录一目了然,打开程序的sln文件:
)
过程中如果出现新旧VS版本的提示问题,点确定即可:
)
可以看到有两个子模块:
首先右键单击demo,选择其属性,选择release_64位进行配置,选择合适的sdk版本,不然会报很多缺少头文件的错误。
接下来,分别将头文件目录,库文件目录和链接添加到VS工程相应的属性设置中。
将opencv的头文件和库本身的本地头文件添加到包含目录中,如下:
库目录选择VS2019对应的vc15里的lib文件夹:\opencv\build\x64\vc15\lib
,如下:
将系统里的原有的链接器修改为自己对应的版本,比如本文的版本为:
)
对libeasypr做同样的配置,这里不再赘述。注意因为libeasypr生成的是lib文件,所以不需要配置链接器。
当运行未出现以下错误时,说明基本配置成功。
三.编译中的几个问题
1.明明配置完成还是找不到opencv.hpp
本文配置试下64位的release下,查看是否在其他运行,如下:
2.出现ANN_MLP有关的问题
这个是由于opencv版本的问题,作者已经在主页中进行说明,具体解决方法为:
对于Opencv3.2或以上版本,如果碰到编译问题,例如“ANN_MLP”相关的错误,尝试将config.h中将#define CV_VERSION_THREE_ZERO改为#define CV_VERSION_THREE_TWO试试.
3.检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”
这个为生成lib对应的是debug而不是release,解决方法:libeasypr工程上右键-》属性-》c/c+±》代码生成-》运行库改成(release为MT,debug为MTD)即可解决:
4.找不到opencv_world3413.dll
使用opencv常见的错误,具体原理大致为程序链接了该dll库,但是自己可用的地址中找不到。所以有两种解决方式:1.将该\opencv\build\x64\vc15\bin文件夹添加到系统环境变量。2.本文推荐,将\opencv\build\x64\vc15\bin下的opencv_world3413.dll直接复制到本工程和exe的同目录,如:
四.简单的运行结果
进行编译运行:
当出现此界面时,恭喜你基本已经编译完成,但是当选择1-1的定位测试时,程序可能没有反应,这是因为两个原因:1.测试图片的相对路径是在linux下的路径方式,虽然说相对路劲等价,但是直接使用总是会有点问题;2.查看demo主程序中写的路径,demo文件下并没有此文件夹,这个resources文件在系统目录下,而且训练好的模型model的文件也在EasyPR下,所以我们使用命令行的方式进行EasyPR的识别功能的简单测试,训练功能以后再尝试。
下面是官方提供的使用示例:官方使用说明
#利用提供的SVM和ANN模型来识别一张图片里面的所有车牌
$ ./demo recognize -p resources/image/plate_recognize.jpg --svm model/svm.xml --ann model/ann.xml
#或者更简单一些(注意模型路径)
$ ./demo recognize -p resources/image/plate_recognize.jpg
将model文件夹和resource文件夹放入demo.exe的同名文件夹下:
在地址栏输入cmd并回车,或者使用任何其他的命令行在此文件下打开:
因为windows下的地址是反斜杠而且可执行文件不同,所以略微有一些区别:
$ .\demo.exe recognize -p resources\image\plate_recognize.jpg
识别成功:
其他相应的功能,可以输入.\demo.exe -h
进行查看。
在网上随便找一张车牌图片,改名为test.jpg放在demo.exe同目录下:
数字识别成功,但是汉字失败,说明还有不少改进的空间:
同时,由于已经将model和resources文件夹放好,所以批量测试是可以使用的:
在命令行中选择2.批量测试—1.general_test,可以执行。
五.后续工作
因为时间和篇幅的问题,本文暂时结束于此,后续有机会将介绍如何在自己的C++程序中调用、集成该库以及自己数据的训练过程。
希望本文对大家有所帮助!