1、easypr下载运行
第一步可以去下载easypr的zip的包,然后解压,我用的是码云新建项目,从git导入,这样子下载比较快一点 git:https://github.com/liuruoze/EasyPR
# cd EasyPR
进入工程文件 我们可以看到很多的文件,现在应该注意 build.sh 与 cmakelists.txt这两个文件就ok了。
#vim CMakeLists.txt
加入set( OpenCV_DIR "/home/andy/opencv-3.2.0/build") 注意,这里的opencv路径是自己安装时候的路径
如果现在运行 #./build.sh 会编译到一半报错、
对于上面这个问题需要按照提示的错误去找 在github上看到一个答案解决了这个问题 : Opencv3.2版本的支持,编译前仅需要将config.h中将#define CV_VERSION_THREE_ZERO改为#define CV_VERSION_THREE_TWO即可。
2、在Linux下安装EasyPr遇到的问题:
easypr/src/util/kv.cpp:11: void easypr::Kv::load(const string&): Assertion `reader' failed.
解决方案:
在include/easypn/config.h中将相对地址全部修改为绝对地址
static const char* kDefaultSvmPath = "/home/mxy/qt_code/easypr5/model/svm_hist.xml";
static const char* kLBPSvmPath = "/home/mxy/qt_code/easypr5/model/svm_lbp.xml";
static const char* kHistSvmPath = "/home/mxy/qt_code/easypr5/model/svm_hist.xml";
static const char* kDefaultAnnPath = "/home/mxy/qt_code/easypr5/model/ann.xml";
static const char* kChineseAnnPath = "/home/mxy/qt_code/easypr5/model/ann_chinese.xml";
static const char* kGrayAnnPath = "/home/mxy/qt_code/easypr5/model/annCh.xml";
//This is important to for key transform to chinese
static const char* kChineseMappingPath = "/home/mxy/qt_code/easypr5/model/province_mapping";
若还是不行,则在linux下面的用cmake编译的后来把编译好的demo放进EasyPR文件里面再运行就好了
3、测试:
./demo recognize -p resources/image/chars_identify.jpg
./demo recognize -p *****
//*****是你要解析的图片(绝对地址,或者能够找到他的地方)
4、怎么调用easyPR库
我们利用的是原来EasyPR的demo包的使用方法:./demo recognize -p file;这条指令是对指定的文件直接进行车牌识别,使用的是command_line_handler(argc, argv);函数
故而:
const char *a_test[4] = {"./demo","recognize","-p","./chars_recognise.jpg"};
command_line_handler(4, a_test);
只需要定义一个const char的数组,然后将数组传进去即可以调用到EasyPR的功能,即实现对指定文件的解析
若是遇到: Assertion `!img.empty()' failed.这个错误,
原因及解决方案
请一定好好检查图片读取路径有没有写对!!!
可能错误:
1.图片路径写成了如下形式:C:\Users\Desktop\test\
正确的应该为:C:/Users/Desktop/test/
(在程序中斜杠'\'有转义字符含义)
2.图片路径少写了一个斜杠(图片存放在test文件夹中)
错误:C:/Users/Desktop/test
正确:C:/Users/Desktop/test/
(千千万万不要忘了最后一个斜杠,不然读取的就变成了test这个文件夹)
3.图片的格式不对!
4.图片的数量不一致!
5.路径中、文件夹名称都不要包含中文!.(编程中各种命名都尽量使用易懂的英文)