EasyPR(车牌识别系统)在win10&VS2013&X64环境下的编译方法
EasyPR是一个开源的中文车牌识别系统,其目标是成为一个简单,高效,准确的车牌识别库。该开源系统基于openCV开源库,可以移植到opencv支持的所有平台,在Github上有全部的源代码。该开源系统可以作为学习openCV的一个极好的范例,本文先记录EasyPR在win10系统下,VS2013 X64下的编译方法。
1. 参考资料
EasyPR作者的博客:http://www.cnblogs.com/subconscious/。作者不仅技术实力深厚,写作水平也是一流。博客中有EasyPR开发过程以及相关原理的详细讲解,且同时整理了一份PDF格式EasyPR的开发详解,在这里对作者的辛苦付出与无私开源致以崇高的敬意。
EasyPR在Github中的地址:https://github.com/liuruoze/EasyPR。
2.EasyPR的demo界面
easyPR的demo是基于win32的控制台程序,测试图像的路径都是在程序中写好的,若要更改测试图像,则需要更改程序。
3.配置openCV3.0的环境变量
目前最新的EasyPR是基于opencv3.0版本开发的,因此在正式编译EasyPR之前,我们首先需要配置opencv3.0的环境变量。假定opencv的安装目录为D盘的根目录,那么就需要将D:\opencv\build\x64\vc12\bin和D:\opencv\build\x86\vc12\bin添加在“环境变量–>系统变量–>path”中。这一步在网上有很多攻略,这里就不再赘述了。
4. EasyPR的编译步骤
4.1 从Github上下载EasyPR的源码,用VS打开工程之后,会发现如果当前解决方案下有两个基于X86项目:demo和libeasypr。其中libeasypr则是基于win32的静态库,该静态库包含了车牌识别系统的所有功能;demo是一个基于win32 console使用easypr的范例,通过调用静态库libeasypr来展示车牌识别的功能。
如果当前VS2013是x64的,那么需要先在VS2013菜单栏“生成–>配置管理器”中将工程属性更改为x64,更改方式如下:
4.2 为项目demo和libeaypr配置opencv包含目录和库文件
分别选中项目demo和libeaypr,打开VS2013菜单栏的“项目–>属性“,选择”配置属性–>VC++目录“,分别配置”包含目录“和”库目录“,如下图所示。
包含目录中添加如下内容:
D:\opencv\build\include\opencv2;
D:\opencv\build\include\opencv;
D:\opencv\build\include;
库目录中添加如下内容:
D:\opencv\build\x64\vc12\staticlib;
D:\opencv\build\x64\vc12\lib;
在很多配置opencv的范例中都会提到需要在”配置属性–>链接器–>输入”添加“附加依赖项”opencv_world300d.lib; 若是新配置opencv的C++工程, 确实需要添加此项,但EasyPR中此项已添加OK,故可以省去此项步骤。
4.3 右键单击”Demo”,选择”生成依赖项”–>“项目依赖项”,设置项目demo依赖于libeasypr。打开demo属性页,选择“配置属性”–>“调试”,将工作目录修改为”$(SolutionDir)”。因为easyPR程序中所使用的资源文件夹路径为相对于sln的相对路径,若不进行此项设置,程序会无法打开相关资源文件。
4.4 理论上进行完上述两个步骤之后,EasyPR应该可以成功编译,但事实并非如此,此时编译会出现如下错误。
基本都是因为找不到thirdparty文件夹中的相关文件,也许可以通过设置包含文件或其他方式来解决,我这里采用比较简单的解决方案:将thirdparty文件夹拷贝到EasyPR解决方案的include的目录下,这样即可成功编译。
/*****************************20170511更新*************************/
解决上述错误的正解在easypr程序包的Usage.md中可以找到,demo和libeasypr需要分别设置,以libeasypr为例,设置方法:libeasypr属性页–>VC++目录–>包含目录,在包含目录中添加 $(SolutionDir);
/*****************************20170511更新*************************/
You can always tell an expert! Thanks for coitbirutnng.
您好,我按照您的操作进行,将thirdparty复制include文件夹后,运行报错:
错误 16 error LNK2019: 无法解析的外部符号 “public: static struct XMLNode __cdecl XMLNode::openFileHelper(char const *,char const *)” (?openFileHelper@XMLNode@@SA?AU1@PEBD0@Z),该符号在函数 “int __cdecl easypr::demo::getGroundTruth(class std::map<class std::basic_string<char,struct std::char_traits,class std::allocator >,class std::vector<class easypr::CPlate,class std::allocator >,struct std::less<class std::basic_string<char,struct std::char_traits,class std::allocator > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits,class std::allocator > const ,class std::vector<class easypr::CPlate,class std::allocator > > > > &,char const *)” (?getGroundTruth@demo@easypr@@YAHAEAV?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$vector@VCPlate@easypr@@V?$allocator@VCPlate@easypr@@@std@@@2@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$vector@VCPlate@easypr@@V?$allocator@VCPlate@easypr@@@std@@@2@@std@@@2@@std@@PEBD@Z) 中被引用 F:\PR\EasyPR\vcprojs\main.obj demo
一共十八个错误,我先是参考了这篇博文http://blog.sina.com.cn/s/blog_5921f9ae0102wolb.html配置本地window sdk然而依旧报错;重新配置了一遍opencv3也不行;
请问作者知道什么情况吗?
您好,我不是特别清楚您发生错误的原因,不过我建议您检查以下两项:
1. 右键单击”Demo”,选择”生成依赖项”–>“项目依赖项”,设置项目demo依赖于libeasypr。
2. 如果当前VS2013是x64的,那么需要先在VS2013菜单栏“生成–>配置管理器”中将工程属性更改为x64。且同时确认demo和libeasypr项目属性中“VC++目录”–>“库目录”包含的opencv库文件是X64。如果VS2013是win32的,则要确认库文件是x86。
你好,我也遇到了这个问题,请问你解决了嘛?
我也遇到了这个问题 请问您解决了吗?谢谢!
我也遇到了这个问题 请问您解决了吗?谢谢!
已经配置成功了,谢谢分享!
不客气,谢谢访问小站!
错误 13 error C2275: “cv::ml::SVM”: 将此类型用作表达式非法 F:\EasyPR-master\src\train\svm_train.cpp 68 1 libeasypr
opencv工程未正确配置或未使用正确的opencv版本可能会导致类似的错误。
用的opencv3.2.0的版本加VS2015加win7然后一直显示表达式非法的错误,并且还显示无法打开libeasypr.lib文件
请问用同样的设置编译EasyPR可以成功吗?
错误 43 error LNK2019: 无法解析的外部符号 __imp_MessageBoxA,该符号在函数 “public: static struct XMLNode __cdecl XMLNode::openFileHelper(char const *,char const *)” (?openFileHelper@XMLNode@@SA?AU1@PEBD0@Z) 中被引用 F:\EasyPR-master\vcprojs\xmlParser.obj demo
您好我也遇到了相同的问题,请问您最后是怎么解决的?
您好,我用的版本是VS2017的,按造您的不步驟做過之後依然有編譯錯誤。
主要在於無法開啟thirdparty的檔案,也把檔案丟到INCLUDE裡面過,也被配置過屬性,皆失敗。
此外還有這個問題 TRK0005 找不到: “CL.exe”。系統找不到指定的檔案。 demo E:\opencv\EasyPR-master\vcprojs\TRACKER
不知道大大有沒有辦法幫我解決。
如果方便的话,可以直接把你当前配置的工程打包发到我邮箱livezingy@163.com,我现在也在用VS2017,我找时间看一下具体错误,看看是否能帮上忙。:)
作者大大这个怎么解决呀fatal error LNK1181: 无法打开输入文件“C:\Users\liaoxinwei\source\repos\EasyPR-master\vcprojs\x64\Debug\chars_identify.obj”,用的vs2017和opencv3.4.10
弄出来啦,感谢大佬,不过中间有一个截断错误,被我忽虐了
你好根据您的笔记我设置之后,编译出现了LOAD_ANN_MODEL此类型表达式非法错误,前面也有不允许使用此表达式的错误,请问您知道解决办法吗