日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

PaddleOCR实现车牌识别系统

發(fā)布時(shí)間:2023/12/10 windows 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PaddleOCR实现车牌识别系统 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

效果展示


如何實(shí)現(xiàn)

1.OpenCV環(huán)境:個(gè)人采用的是OpeCV-440-release版本,網(wǎng)上有很多相關(guān)教程
2.PaddleOCR: 這里需要3個(gè)文件

models:識別模型下載
paddle_inference_install_dir:預(yù)測庫下載
PaddleOCR-release-2.0:PaddleOCR 2.0源碼下載

models下載
預(yù)測庫下載:2.0.0版本迅雷下載鏈接
***PaddleOCR-release-2.0:***
接下來在下圖文件夾中建立一個(gè)build文件夾

利用CMake編譯PaddleOCR源碼:添加好路徑后,依次點(diǎn)擊Configure,Genrate即可

點(diǎn)擊ocr_system.sln進(jìn)入項(xiàng)目中,將ocr_system設(shè)為啟動項(xiàng)

我簡單修改了一下main函數(shù),如果采用我的main函數(shù)記得同時(shí)將在ocr_rec.h和ocr_rec.cpp中的run函數(shù)參數(shù)列表末尾添加上vector<vector>&result,這里是因?yàn)槲蚁胱尳Y(jié)果返回在main函數(shù)里

#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); //輸出結(jié)果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("檢測結(jié)果圖",img);waitKey(0);return 0; }

最后想要讓我們的代碼運(yùn)行起來還需要一些條件

config.txt中需要修改三處位置,分別指向我們下載好的識別模型

這里為了方便,我將三個(gè)模型名字改了一下,因?yàn)槲覍odels和ppocr_keys_v1.txt都直接放入放入當(dāng)前目錄了,所以寫的是相對路徑。ppocr_keys_v1.txt在PaddleOCR-release-2.0\ppocr\utils下,最后我們添加需要識別的圖片和在main函數(shù)里修改圖片路徑,點(diǎn)擊運(yùn)行就可以出現(xiàn)文章開頭的識別效果啦
更多的功能可以在這基礎(chǔ)上進(jìn)行擴(kuò)展,如UI,交互等
參考博客:https://blog.csdn.net/stq054188/article/details/114002913

總結(jié)

以上是生活随笔為你收集整理的PaddleOCR实现车牌识别系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。