QT使用EasyPR识别车牌的正确方式

前提条件

  • QT5.3.0 with MinGW
  • opencv3.0+

opencv配置

MinGW 编译好的 opencv 3.2.0

  • 解压opencv文件夹到C盘根目录
  • 添加系统环境变量如下两项到Path
    • C:\opencv\build\install\x86\mingw\bin
    • C:\opencv\build\install\x86\mingw\lib
  • 检查QT5.3.0自带的MinGW是否在环境变量中(没有则添加):
    • C:\Qt\Qt5.3.0\5.3\mingw482_32\bin
    • C:\Qt\Qt5.3.0\Tools\mingw482_32\bin
    • C:\Qt\Qt5.3.0\Tools\mingw482_32\i686-w64-mingw32\bin
  • 配置好重启QT!!!

EasyPR配置

  • 创建一个新的QT界面项目,命名不要是easypr,路径不要有中文

  • easypr精简版 (因为easypr里面有很多东西没用到,所以精简一下只需要2mb不到)

  • 解压压缩包中所有文件到项目根目录

  • 如下所示添加easypr文件到项目

H1b7ed3e77b014538ba4f6231f7cca449G

H622998a9f72d400993279cc8a1b4bdb1N

  • .pro文件配置
    .pro中最上面加上以下内容,因为easypr需要c++11标准编译

    1
    2
    QMAKE_CXXFLAGS+=-std=c++11
    CONFIG += c++11

    .pro文件最下面添加以下内容

    1
    2
    3
    4
    5
    6
    INCLUDEPATH+=E:\QT\PlateR\include

    win32{
    INCLUDEPATH+=C:\opencv\build\install\include
    LIBS += C:\opencv\build\install\x86\mingw\bin\libopencv_*.dll
    }

    注:INCLUDEPATH+=E:\QT\PlateR\include这条按照你的项目路径来

  • 配置config.h

在项目里找到include/easypr/下的config.h,打开来看到以下内容,在30行左右

H9d4fcde8faea4247862f67de47dcdbd3l

按照我的格式把路径改成你项目的路径,格式千万不能错

运行代码

main.cpp示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "dialog.h"
#include <QApplication>
#include <opencv2/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include "include/easypr.h"
#include "include/easypr/util/switch.hpp"
#include "include/easypr/core/plate.hpp"
#include <QDebug>

using namespace easypr;
using namespace cv;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();

CPlateRecognize pr;
pr.setDetectType(PR_DETECT_CMSER|PR_DETECT_COLOR);
vector<CPlate>plateVec;
cv::Mat image;
image = cv::imread("E://test.jpg");
pr.setResultShow(false);
int result = pr.plateRecognize(image,plateVec);
pr.getDetectShow();
CPlate plate = plateVec.at(0);
string license = plate.getPlateStr();
QString lice1 = QString::fromLocal8Bit(license.c_str());
qDebug()<<lice1;

if(image.empty())
return 0;
cv::namedWindow("image show");
cv::imshow("image show",image);

return a.exec();
}

这样就可以运行了,正常的话控制台会输出车牌号码

常见错误

找不到opencv头文件

没有配置opencv环境变量

找不到easypr头文件

.pro文件中的INCLUDEPATH+=E:\QT\PlateR\include这句路径错了,需要是你的项目路径下的include文件夹!

程序runtime error或crashed

config.h文件中的model路径错了