生活随笔
收集整理的這篇文章主要介紹了
PaddleOCR实现车牌识别系统
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
效果展示
如何實現
1.OpenCV環境:個人采用的是OpeCV-440-release版本,網上有很多相關教程
2.PaddleOCR: 這里需要3個文件
models:識別模型下載
paddle_inference_install_dir:預測庫下載
PaddleOCR-release-2.0:PaddleOCR 2.0源碼下載
models下載
預測庫下載:2.0.0版本迅雷下載鏈接
***PaddleOCR-release-2.0:***
接下來在下圖文件夾中建立一個build文件夾
利用CMake編譯PaddleOCR源碼:添加好路徑后,依次點擊Configure,Genrate即可
點擊ocr_system.sln進入項目中,將ocr_system設為啟動項
我簡單修改了一下main函數,如果采用我的main函數記得同時將在ocr_rec.h和ocr_rec.cpp中的run函數參數列表末尾添加上vector<vector>&result,這里是因為我想讓結果返回在main函數里
#include "glog/logging.h"
#include "omp.h"
#include "opencv2/core.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/imgproc.hpp"
#include<opencv2\opencv.hpp>
#include <chrono>
#include <iomanip>
#include <iostream>
#include <vector>
#include <cstring>
#include <fstream>
#include <numeric>
#include <include/config.h>
#include <include/ocr_det.h>
#include <include/ocr_rec.h>using namespace std
;
using namespace cv
;
using namespace PaddleOCR
;int main(int argc
, char **argv
) {OCRConfig
config("config.txt");std
::string
img_path("22.jpg");cv
::Mat srcimg
= cv
::imread(img_path
, cv
::IMREAD_COLOR
);if (srcimg
.empty()){cerr
<< "圖片打開失敗" << endl
;return -1;}resize(srcimg
,srcimg
,cv
::Size(640,640));imshow("檢測圖",srcimg
);DBDetector
det(config
.det_model_dir
, config
.use_gpu
, config
.gpu_id
,config
.gpu_mem
, config
.cpu_math_library_num_threads
,config
.use_mkldnn
, config
.max_side_len
, config
.det_db_thresh
,config
.det_db_box_thresh
, config
.det_db_unclip_ratio
,config
.visualize
, config
.use_tensorrt
, config
.use_fp16
);Classifier
*cls
= nullptr;if (config
.use_angle_cls
== true) {cls
= new Classifier(config
.cls_model_dir
, config
.use_gpu
, config
.gpu_id
,config
.gpu_mem
, config
.cpu_math_library_num_threads
,config
.use_mkldnn
, config
.cls_thresh
,config
.use_tensorrt
, config
.use_fp16
);}CRNNRecognizer
rec(config
.rec_model_dir
, config
.use_gpu
, config
.gpu_id
,config
.gpu_mem
, config
.cpu_math_library_num_threads
,config
.use_mkldnn
, config
.char_list_file
,config
.use_tensorrt
, config
.use_fp16
);auto start
= std
::chrono
::system_clock
::now();std
::vector
<std
::vector
<std
::vector
<int>>> boxes
;det
.Run(srcimg
, boxes
);system("cls");vector
<vector
<string
>>result
;rec
.Run(boxes
, srcimg
, cls
,result
); auto it_result
= result
.begin();while (it_result
!= result
.end()){auto it_str
= (*it_result
).begin();while (it_str
!= (*it_result
).end()){cout
<< *it_str
++;}cout
<< endl
;++it_result
;}auto end
= std
::chrono
::system_clock
::now();auto duration
= std
::chrono
::duration_cast
<std
::chrono
::microseconds
>(end
- start
);std
::cout
<< "Cost "<< double(duration
.count()) *std
::chrono
::microseconds
::period
::num
/std
::chrono
::microseconds
::period
::den
<< "s" << std
::endl
;Mat img
= imread("ocr_vis.png");imshow("檢測結果圖",img
);waitKey(0);return 0;
}
最后想要讓我們的代碼運行起來還需要一些條件
config.txt中需要修改三處位置,分別指向我們下載好的識別模型
這里為了方便,我將三個模型名字改了一下,因為我將models和ppocr_keys_v1.txt都直接放入放入當前目錄了,所以寫的是相對路徑。ppocr_keys_v1.txt在PaddleOCR-release-2.0\ppocr\utils下,最后我們添加需要識別的圖片和在main函數里修改圖片路徑,點擊運行就可以出現文章開頭的識別效果啦
更多的功能可以在這基礎上進行擴展,如UI,交互等
參考博客:https://blog.csdn.net/stq054188/article/details/114002913
總結
以上是生活随笔為你收集整理的PaddleOCR实现车牌识别系统的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。