Qt 车牌识别 (EasyPR)
生活随笔
收集整理的這篇文章主要介紹了
Qt 车牌识别 (EasyPR)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
EasyPR
- 下載
- 直接把源碼加到.pri文件中
- 安裝/直接解壓 opencv-3.2.0-vc14.exe
- 使用
- 最終效果
- Qt 車牌識別 (HyperLPR)
開發環境:win10 + Qt5.12.1 + vs2015_x64
下載
EasyPR源碼下載鏈接:https://github.com/liuruoze/EasyPR
筆者下載的v1.6版本 (這個庫最后維護是2018年好像)
因為沒有訓練綠牌,所以無法識別,需要自己訓練,它提供了訓練函數
如何添加綠牌:https://blog.csdn.net/h593245631/article/details/107185418
直接把源碼加到.pri文件中
安裝/直接解壓 opencv-3.2.0-vc14.exe
下載:https://nchc.dl.sourceforge.net/project/opencvlibrary/opencv-win/3.2.0/opencv-3.2.0-vc14.exe
使用
void EasyPRThread::run() {setResult(0);switch (threadType()) {case 0://initinit();break;case 1:{QImage image;QString tag;extractFacialFeatures(getFilePath(),image,tag);setImage(image);setTag(tag);}break;case 2:{easypr::SvmTrain svm("tmp/train/svm", "tmp/train/svm.xml");svm.train();}break;case 3:{easypr::AnnTrain ann("tmp/train/ann", "tmp/train/ann.xml");ann.train();}break;case 4:{int sameCount = 0;int errorCount = 0;for(int i=0; i<_filePaths.size(); ++i){QImage image;QString tag;extractFacialFeatures(_filePaths.at(i),image,tag);setImage(image);setTag(tag);QFileInfo fileInfo(_filePaths.at(i));if(fileInfo.completeBaseName() == tag){++sameCount;}else{++errorCount;}}QString str = QString("%1:%2 %3:%4 %5:%6 %7:%8").arg(QStringLiteral("共")).arg(_filePaths.size()).arg(QStringLiteral("正確")).arg(sameCount).arg(QStringLiteral("錯誤")).arg(errorCount).arg(QStringLiteral("識別率")).arg(sameCount*1.0/_filePaths.size());SCDebug<<str;emit sigTextEdit(str);}break;default:break;} } bool EasyPRThread::extractFacialFeatures(const QString &filePath,QImage &image,QString &tag) {image.load(filePath);int result = 0;// cv::Mat src = imread(filePath.toLocal8Bit().toStdString());// // 切割車牌圖片// vector<CPlate> resultVec;// CPlateDetect pd;// pd.setPDLifemode(true);// result = pd.plateDetect(src, resultVec);// size_t num = resultVec.size();// SCDebug<<"result:"<<result<<num;// for (size_t j = 0; j < num; j++) {// CPlate resultMat = resultVec[j];// std::string license = resultMat.getPlateStr();// QString lice1 = QString::fromLocal8Bit(license.c_str());// SCDebug<<"j:"<<lice1;// imshow("plate_detect", resultMat.getPlateMat());// waitKey(0);// }CPlateRecognize pr;//CMER代表文字定位方法,SOBEL和COLOR分別代表邊緣和顏色定位方法。可以通過"|"符號結合// pr.setDetectType(PR_DETECT_SOBEL);// pr.setDetectType(PR_DETECT_CMSER);// pr.setDetectType(PR_DETECT_COLOR);// pr.setDetectType(PR_DETECT_CMSER | PR_DETECT_COLOR);pr.setDetectType(PR_DETECT_COLOR | PR_DETECT_SOBEL | PR_DETECT_CMSER);//開啟生活模式,這個屬性在定位方法為SOBEL時可以發揮作用,能增大搜索范圍,提高魯棒性。pr.setLifemode(true);// //設置EasyPR最多查找多少個車牌。當一副圖中有大于n個車牌時,EasyPR最終只會輸出可能性最高的n個。pr.setMaxPlates(1);std::vector<CPlate>plateVec;cv::Mat src = imread(filePath.toLocal8Bit().toStdString());pr.setResultShow(false);result = pr.plateRecognize(src,plateVec);SCDebug<<"result:"<<result<<plateVec.size();// pr.getResultShow();QPainter painter(&image);for(int i=0; i<plateVec.size(); ++i){CPlate plate = plateVec.at(i);//plateMat代表車牌圖像,rrect代表車牌的可旋轉矩形位置,license代表車牌字符串,例如“藍牌:蘇EUK722”。// Mat plateMat = plate.getPlateMat();RotatedRect rrect = plate.getPlatePos();painter.setPen(QPen(Qt::magenta, 2, Qt::DashDotLine));painter.drawRect(rrect.boundingRect().x,rrect.boundingRect().y,rrect.boundingRect().width,rrect.boundingRect().height);std::string license = plate.getPlateStr();QString lice1 = QString::fromLocal8Bit(license.data());lice1 = getLicensePlateType(lice1,tag);qDebug()<<i<<"revStr:"<<lice1;emit sigTextEdit(lice1);}return true; }最終效果
測試它源碼中自帶的 general_test 文件夾中的車牌圖片識別率只有:0.47(47%)
Qt 車牌識別 (HyperLPR)
https://blog.csdn.net/u012020854/article/details/111202952
總結
以上是生活随笔為你收集整理的Qt 车牌识别 (EasyPR)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 构建iOS风格移动Web应用程序的8款开
- 下一篇: jrtplib使用注意事项