EasyPR github項(xiàng)目地址:https://github.com/liuruoze/EasyPR
EasyPR是一個(gè)開源的中文車牌識(shí)別系統(tǒng),其目標(biāo)是成為一個(gè)簡(jiǎn)單组砚、高效基跑、準(zhǔn)確的非限制場(chǎng)景(unconstrained situation)下的車牌識(shí)別庫丈咐。
相比于其他的車牌識(shí)別系統(tǒng)爵川,EasyPR有如下特點(diǎn):
它基于openCV這個(gè)開源庫吗铐。這意味著你可以獲取全部源代碼,并且移植到opencv支持的所有平臺(tái)毫缆。
它能夠識(shí)別中文唯竹。例如車牌為蘇EUK722的圖片,它可以準(zhǔn)確地輸出std:string類型的"蘇EUK722"的結(jié)果苦丁。
它的識(shí)別率較高浸颓。圖片清晰情況下,車牌檢測(cè)與字符識(shí)別可以達(dá)到80%以上的精度。
集成方法
1). 集成openCV具體看這里
2). 添加src
产上、thirdparty
棵磷、include
、model
(model為藍(lán)色)
并保證
copy bundle resource
里引入了藍(lán)色文件夾model
Complie Sources
添加了src和util的文件夾內(nèi)cpp文件
3). Header Search Path
添加$(SRCROOT)/EasyPR_iOS/include
4). 嘗試#include "easypr.h"
發(fā)現(xiàn)報(bào)錯(cuò)
原因應(yīng)該是名字和iOSMacTypes.h
的沖突了
處理方法:報(bào)錯(cuò)的全部加cv::
前綴晋涣。
5). 嘗試運(yùn)行,發(fā)現(xiàn)報(bào)錯(cuò),原因是路徑的問題
解決方法:
解決方法參考了https://github.com/zhoushiwei/EasyPR-iOS:
根據(jù)include/esaypr/config.h
里的變量名,創(chuàng)建全局變量,并修改源碼仪媒。
新建cpp文件:
SGGlobalEasyPRPath.hpp:
#ifndef SGGlobalEasyPRPath_hpp
#define SGGlobalEasyPRPath_hpp
#include <stdio.h>
#include <string>
class SGGlobalEasyPRPath {
public:
static std::string kDefaultSvmPath;
static std::string kLBPSvmPath;
static std::string kHistSvmPath;
static std::string kDefaultAnnPath;
static std::string kChineseAnnPath;
static std::string kGrayAnnPath;
static std::string kChineseMappingPath;
SGGlobalEasyPRPath()=default;
private:
};
#endif /* SGGlobalEasyPRPath_hpp */
SGGlobalEasyPRPath.hpp
:
#include "SGGlobalEasyPRPath.hpp"
std::string SGGlobalEasyPRPath::kDefaultSvmPath;
std::string SGGlobalEasyPRPath::kLBPSvmPath;
std::string SGGlobalEasyPRPath::kHistSvmPath;
std::string SGGlobalEasyPRPath::kDefaultAnnPath;
std::string SGGlobalEasyPRPath::kChineseAnnPath;
std::string SGGlobalEasyPRPath::kGrayAnnPath;
std::string SGGlobalEasyPRPath::kChineseMappingPath;
使用之前賦給變量值,比如寫到AppDelegate.mm
里面:
#import "AppDelegate.h"
#include "SGGlobalEasyPRPath.hpp"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString* bundlePath=[[NSBundle mainBundle] bundlePath];
SGGlobalEasyPRPath::kDefaultSvmPath = [[NSString stringWithFormat:@"%@/model/svm_hist.xml",bundlePath] UTF8String];;
SGGlobalEasyPRPath::kLBPSvmPath = [[NSString stringWithFormat:@"%@/model/svm_lbp.xml",bundlePath] UTF8String];;
SGGlobalEasyPRPath::kHistSvmPath = [[NSString stringWithFormat:@"%@/model/svm_hist.xml",bundlePath] UTF8String];;
SGGlobalEasyPRPath::kDefaultAnnPath = [[NSString stringWithFormat:@"%@/model/ann.xml",bundlePath] UTF8String];;
SGGlobalEasyPRPath::kChineseAnnPath = [[NSString stringWithFormat:@"%@/model/ann_chinese.xml",bundlePath] UTF8String];;
SGGlobalEasyPRPath::kGrayAnnPath = [[NSString stringWithFormat:@"%@/model/annCh.xml",bundlePath] UTF8String];;
SGGlobalEasyPRPath::kChineseMappingPath = [[NSString stringWithFormat:@"%@/model/province_mapping",bundlePath] UTF8String];;
std::cout<<"SGGlobalEasyPRPath::mainBundle():"<< SGGlobalEasyPRPath::kChineseAnnPath <<std::endl;
return YES;
}
@end
然后修改源代碼,將用到路徑的地方 #include "SGGlobalEasyPRPath.hpp"
并添加前綴SGGlobalEasyPRPath::
如:kChineseMappingPath
改為SGGlobalEasyPRPath::kChineseMappingPath
。
注意:引用
SGGlobalEasyPRPath.hpp
的.m文件,后綴改為.mm
5). 跑下測(cè)試效果
#import "ViewController.h"
#import <opencv2/opencv.hpp>
#include "easypr.h"
using namespace cv;
using namespace easypr;
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self myFunction];
}
- (void)myFunction{
cv::Mat cvImage;
cv::Mat RGB;
CPlateRecognize pr;
NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"jpg"];
Mat img = imread([path UTF8String]);
if (img.empty()) {
return;
}
cvtColor(img, RGB, COLOR_BGRA2RGB);
vector<CPlate> plateVec;
int result = pr.plateRecognize(RGB, plateVec);
NSLog(@"result %@",@(result));
if (result != 0) cout << "result:" << result << endl;
if(plateVec.size()==0){
}else {
string name=plateVec[0].getPlateStr();
NSString *resultMessage = [NSString stringWithCString:plateVec[0].getPlateStr().c_str()
encoding:NSUTF8StringEncoding];
NSLog(@"%@",resultMessage);
}
}
@end