中文车牌识别库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安装文件。下载地址

车牌识别ocr开源java源码 车牌识别 开源_车牌识别ocr开源java源码


将下载好的压缩包解压到合适的地方,得到下列文件,下文将介绍如何使用:

车牌识别ocr开源java源码 车牌识别 开源_windows 10_02

软件环境配置

解压好EasyPR库文件,文件目录一目了然,打开程序的sln文件:

车牌识别ocr开源java源码 车牌识别 开源_人工智能_03

)

过程中如果出现新旧VS版本的提示问题,点确定即可:

车牌识别ocr开源java源码 车牌识别 开源_车牌识别_04

)

可以看到有两个子模块:

车牌识别ocr开源java源码 车牌识别 开源_windows 10_05


首先右键单击demo,选择其属性,选择release_64位进行配置,选择合适的sdk版本,不然会报很多缺少头文件的错误。

车牌识别ocr开源java源码 车牌识别 开源_车牌识别ocr开源java源码_06

接下来,分别将头文件目录,库文件目录和链接添加到VS工程相应的属性设置中。

将opencv的头文件和库本身的本地头文件添加到包含目录中,如下:

车牌识别ocr开源java源码 车牌识别 开源_人工智能_07


库目录选择VS2019对应的vc15里的lib文件夹:\opencv\build\x64\vc15\lib,如下:

车牌识别ocr开源java源码 车牌识别 开源_车牌识别ocr开源java源码_08


将系统里的原有的链接器修改为自己对应的版本,比如本文的版本为:

车牌识别ocr开源java源码 车牌识别 开源_c++_09

)

车牌识别ocr开源java源码 车牌识别 开源_windows 10_10


对libeasypr做同样的配置,这里不再赘述。注意因为libeasypr生成的是lib文件,所以不需要配置链接器。

当运行未出现以下错误时,说明基本配置成功。

车牌识别ocr开源java源码 车牌识别 开源_车牌识别_11

三.编译中的几个问题

1.明明配置完成还是找不到opencv.hpp

本文配置试下64位的release下,查看是否在其他运行,如下:

车牌识别ocr开源java源码 车牌识别 开源_车牌识别_12

2.出现ANN_MLP有关的问题

这个是由于opencv版本的问题,作者已经在主页中进行说明,具体解决方法为:

对于Opencv3.2或以上版本,如果碰到编译问题,例如“ANN_MLP”相关的错误,尝试将config.h中将#define CV_VERSION_THREE_ZERO改为#define CV_VERSION_THREE_TWO试试.

车牌识别ocr开源java源码 车牌识别 开源_人工智能_13

3.检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”

车牌识别ocr开源java源码 车牌识别 开源_车牌识别_14


这个为生成lib对应的是debug而不是release,解决方法:libeasypr工程上右键-》属性-》c/c+±》代码生成-》运行库改成(release为MT,debug为MTD)即可解决:

车牌识别ocr开源java源码 车牌识别 开源_车牌识别_15

4.找不到opencv_world3413.dll

使用opencv常见的错误,具体原理大致为程序链接了该dll库,但是自己可用的地址中找不到。所以有两种解决方式:1.将该\opencv\build\x64\vc15\bin文件夹添加到系统环境变量。2.本文推荐,将\opencv\build\x64\vc15\bin下的opencv_world3413.dll直接复制到本工程和exe的同目录,如:

车牌识别ocr开源java源码 车牌识别 开源_车牌识别ocr开源java源码_16

四.简单的运行结果

进行编译运行:

车牌识别ocr开源java源码 车牌识别 开源_windows 10_17


当出现此界面时,恭喜你基本已经编译完成,但是当选择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的同名文件夹下:

车牌识别ocr开源java源码 车牌识别 开源_车牌识别ocr开源java源码_18


在地址栏输入cmd并回车,或者使用任何其他的命令行在此文件下打开:

车牌识别ocr开源java源码 车牌识别 开源_车牌识别ocr开源java源码_19


因为windows下的地址是反斜杠而且可执行文件不同,所以略微有一些区别:

$ .\demo.exe recognize -p resources\image\plate_recognize.jpg

车牌识别ocr开源java源码 车牌识别 开源_c++_20


识别成功:

车牌识别ocr开源java源码 车牌识别 开源_人工智能_21


其他相应的功能,可以输入.\demo.exe -h进行查看。

在网上随便找一张车牌图片,改名为test.jpg放在demo.exe同目录下:

车牌识别ocr开源java源码 车牌识别 开源_车牌识别_22

数字识别成功,但是汉字失败,说明还有不少改进的空间:

车牌识别ocr开源java源码 车牌识别 开源_车牌识别ocr开源java源码_23


同时,由于已经将model和resources文件夹放好,所以批量测试是可以使用的:

在命令行中选择2.批量测试—1.general_test,可以执行。

车牌识别ocr开源java源码 车牌识别 开源_c++_24

五.后续工作

因为时间和篇幅的问题,本文暂时结束于此,后续有机会将介绍如何在自己的C++程序中调用、集成该库以及自己数据的训练过程。
希望本文对大家有所帮助!