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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于PaddleOCR实现车牌识别

發(fā)布時間:2023/12/31 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于PaddleOCR实现车牌识别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于PaddleOCR的車牌識別

    • 1.方案設計
    • 2.數據處理
      • 2.1 車牌數據集介紹
      • 2.2 數據預處理
    • 3.PaddleOCR模型介紹
      • 3.1 Paddle OCR算法列表
        • 3.2 安裝PaddleOCR
        • 3.3 下載預訓練模型
      • 4.模型訓練
        • 4.1 訓練檢測模型
        • 4.2 CPU?GPU?
        • 4.3 訓練識別模型
          • GPU訓練 支持單卡,多卡訓練
        • 4.4 問題及解決方案
      • 5.模型的評估
      • 6.模型導出
      • 7.模型推理
        • 結果圖

1.方案設計

車牌識別車牌識別就是使用OCR(Optical Character Recognition,光學字符識別)技術識別各類機動車車牌信息。目前,車牌識別已廣泛應用在停車場、收費站、道路等交通設施中,提供高效便捷的車輛管理服務。OCR通常包含文本檢測和文本識別兩個子任務:
1.文字檢測: 檢測圖片中的文字位置
2. 文字識別: 對文字區(qū)域中的文字進行識別。
使用OCR來識別車牌流程如 圖1 所示,首先檢測出車牌的位置(下圖紅色框區(qū)域)、然后對檢測出來的車牌進行識別,即可得到右邊的可編輯文本:

圖1 車牌識別
我們使用飛槳PaddleOCR實現車牌識別,接下來就一起來看看實現原理及具體實現步驟吧~

2.數據處理

2.1 車牌數據集介紹

CCPD車牌數據集來源于Git里面。鏈接:https://github.com/detectRecog/CCPD
是采集人員在合肥停車場采集、手工標注得來,采集時間在早7:30到晚10:00之間。且拍攝車牌照片的環(huán)境復雜多變,包括雨天、雪天、傾斜、模糊等。CCPD數據集包含將近30萬張圖片、圖片尺寸為720x1160x3,共包含8種類型圖片,每種類型、數量及類型說明如下表:

類別說明
ccpd_base正常車牌
ccpd_db光線較暗或較亮
ccpd_challenge比較有挑戰(zhàn)性的車牌
ccpd_fn距離攝像頭較遠或較近
ccpd_np沒上牌的新車
ccpd_rotate水平傾斜20%-50%, 垂直傾斜-10%-10%
ccpd_tilt水平傾斜15%-45%,垂直傾斜15%-45%
ccpd_weather雨天、雪天或者霧天的車牌
注:圖2來源于開源車牌數據集[CCPD介紹](https://blog.csdn.net/qianbin3200896/article/details/103009221)

CCPD數據集中每張圖像的名稱包含了標注信息,例如圖片名稱為"025-95_113-154&383_386&473-386&473_177&454_154&383_363&402-0_0_22_27_27_33_16-37-15.jpg",每個名稱可以通過分隔符’-'分為幾部分,每部分解釋:

  • 1.025:車牌區(qū)域占整個畫面的比例;
  • 2.95_113: 車牌水平和垂直角度, 水平95°, 豎直113°
  • 3.154&383_386&473:標注框左上、右下坐標,左上(154, 383), 右下(386, 473)
  • 4.386&473_177&454_154&383_363&402:標注框四個角點坐標,順序為右下、左下、左上、右上
  • 5.0_0_22_27_27_33_16:車牌號碼映射關系如下: 第一個0為省份 對應省份字典provinces中的’皖’,;第二個0是該車所在地的地市一級代碼,對應地市一級代碼字典alphabets的’A’;后5位為字母和文字, 查看車牌號ads字典,如22為Y,27為3,33為9,16為S,最終車牌號碼為皖AY339S
provinces = ["皖", "滬", "津", "渝", "冀", "晉", "蒙", "遼", "吉", "黑", "蘇", "浙", "京", "閩", "贛", "魯", "豫", "鄂", "湘", "粵", "桂", "瓊", "川", "貴", "云", "藏", "陜", "甘", "青", "寧", "新"]alphabets = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W','X', 'Y', 'Z']ads = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X','Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

本實驗我們只使用正常車牌即ccpd_base的數據進行訓練。

2.2 數據預處理

1.先在項目下創(chuàng)建dataset文件夾
. …命令:mkdir dataset
2.解壓ccpd數據集壓縮包 并放到dataset文件夾下
…命令:unzip -q data/CCPD2019.zip -d dataset/CCPD
3.項目結構樹如同:

  • dataset:解壓后放在dataset文件數據里
  • log:訓練記錄
  • output訓練后的輸出模型
  • Paddle OCR:文字識別模型
  • CCPD_test1.py :數據預處理的代碼

3.將CCPD的數據格式轉換PaddleOCR檢測所需格式,創(chuàng)建CCPD_test1.py代碼如下:

import os import os.path as osp import cv2 #創(chuàng)建字典列表 ads = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X','Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']provinces = ["皖", "滬", "津", "渝", "冀", "晉", "蒙", "遼", "吉", "黑", "蘇", "浙", "京", "閩", "贛", "魯", "豫", "鄂", "湘", "粵", "桂", "瓊", "川", "貴", "云", "藏", "陜", "甘", "青", "寧", "新"]

該代碼主要是創(chuàng)建字典列表

#轉換檢測數據 #獲取原圖片的路徑+圖片標注信息 train_det = open('dataset/train_det.txt', 'w', encoding='UTF-8') dev_det = open('dataset/dev_det.txt', 'w', encoding='UTF-8')#轉換識別數據 #獲取截取車牌圖片的路徑文件+提取車牌文字的信息 train_rec = open('dataset/train_rec.txt', 'w', encoding='UTF-8') dev_rec = open('dataset/dev_rec.txt', 'w', encoding='UTF-8')if not osp.exists('dataset/img'):os.mkdir("dataset/img")

該代碼主要是創(chuàng)建檢測數據的train和val的txt文件與識別數據的train和val的文件。

  • train_det和dev_det劃分8:2 是獲取原圖片的路徑+圖片被標注信息。比如:dataset/CCPD/ccpd_db/0462-1_13-212&516_542&633-542&633_236&627_212&516_518&522-0_0_26_32_19_24_29-198-116.jpg [{“transcription”:“皖A28V05”, “points”:[[212, 516], [518, 522], [542, 633], [236, 627]]}]
  • train_rec和dev_rec劃分8:2 ,是獲取已經截取出車牌圖片的路徑+提取車牌文字的信息;比如:dataset/img/000536.jpg 皖A28V05
  • dataset/img:是用來保存截取車牌的圖片。
count = 0 total_num = len(os.listdir("dataset/home/aistudio/dataset/CCPD/ccpd_db")) #訓練樣本數 train_num = int(total_num * 0.8) # print(total_num, train_num) for item in os.listdir("dataset/home/aistudio/dataset/CCPD/ccpd_db"):path = "dataset/home/aistudio/dataset/CCPD/ccpd_db/" + item#print(path)#print(item.split("-"))a1,a2,bboxs, points, labels, a3,a4 = item.split("-")# print(a1, a2, bboxs, points, labels, a3,a4 )bboxs = bboxs.split('_')# print(bboxs)x1, y1 = bboxs[0].split('&')x2, y2 = bboxs[1].split('&')# print("x1:y1", x1,y1)# print("x2:y2", x2,y2)#提取bboxs的x坐標,y坐標bboxs_new = [int(coord) for coord in [x1, y1, x2, y2]]print(bboxs_new)#同理pointspoints = points.split("_")#print(points)points = [point.split('&') for point in points]points_ = points[2:]+points[:2]#print(points_)points = []for point in points_:points.append([int(_) for _ in point])#print(points)#同理 labellabels = labels.split('_')#print(labels)prov =provinces[int(labels[0])] #獲取車牌地區(qū)名稱#print(prov)plate_number = [ads[int(label)] for label in labels[1:]] #將數字轉換化車牌的數字labels = prov + ''.join(plate_number) #合并起來#print(labels)# 獲取檢測訓練檢測框位置line_det = path+'\t'+'[{"transcription":"%s", "points":%s}]' % (labels, str(points))line_det = line_det[:] + "\n"print(line_det)#獲取識別訓練圖片及標簽img = cv2.imread(path)#print(img)crop = img[bboxs_new[1]:bboxs_new[3], bboxs_new[0]:bboxs_new[2], :]cv2.imwrite('dataset/img/%06d.jpg' % count, crop)line_rec = 'dataset/img/%06d.jpg\t%s\n' % (count, labels)print(line_rec)# 寫入txt文件if count <= train_num:train_det.write(line_det)train_rec.write(line_rec)else:dev_det.write(line_det)dev_rec.write(line_rec)count+=1 train_det.close() dev_det.close() train_rec.close() dev_rec.close()#創(chuàng)建字典文件with open("dataset/dict.txt", "w") as f:for key in ads +provinces:f.write(key+"\n")

運行命令:python CCPD_test1.py后,項目結構里多了五個文件。如圖下:

我來給大家詳細介紹一下:

  • img文件夾:是保存截取車牌得圖片。如同下:
  • train_det,dev_det文件:保存原始圖片得路徑和標注格式信息。如圖下:
  • train_rec,dev_rec文件:是保存img文件夾下得截取車牌圖片得路徑和車牌文字信息。如圖下:
  • dic.txt文件:是保存字典列表信息:如圖下:
    -

3.PaddleOCR模型介紹

3.1 Paddle OCR算法列表

PaddleOCR中提供了如下文本檢測算法和文本識別算法列表,以及每個算法在英文公開數據集上的模型和指標,主要用于算法簡介和算法性能對比。

文本檢測算法:

文本識別算法:

考慮車牌識別中字符數量較少,而且長度也固定,且為標準的印刷字體,所以無需使用過于復雜的模型。我們選擇DBNet檢測算法和CRNN識別模型作,PaddleOCR的檢測模型目前支持兩種backbone,分別是MobileNetV3、ResNet_vd系列,本實驗兩個模型均使用MobileNetV3作為其主干網絡(Backbone)。

3.2 安裝PaddleOCR

  • 1.安裝命令:git clone clone https://github.com/PaddlePaddle/PaddleOCR
    如果因為忘了問題無法pull成功,可以選用碼云上的托管即可:
    git clone !git clone https://gitee.com/paddlepaddle/PaddleOCR
  • 2.安裝依賴
    pip install -r PaddleOCR/requirements.txt 下載并安裝

3.3 下載預訓練模型

  • 1.下載mobileNetv3的檢測預訓練模型
    wget -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x0_5_pretrained.pdparams
  • 2.下載MobileNetV3.識別預訓練模型
    !wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_none_bilstm_ctc_v2.0_train.tar
  • 3.解壓識別預訓練模型壓縮文件
    tar -xvf pretrain_models/rec_mv3_none_bilstm_ctc_v2.0_train.tar
  • 4.刪掉壓縮文件(以免占空間)
    rm -rf pretrain_models/rec_mv3_none_bilstm_ctc_v2.0_train.tar

4.模型訓練

4.1 訓練檢測模型

1.首先我們在configs/det/det_mv3_db.yml 文件中Train和Eval數據集得圖片路徑“data_dir"和標簽路徑”label_file_list".我自己修下是:

4.2 CPU?GPU?

如果你安裝的是paddle-cpu版本,或者沒有gpu顯卡的話,需要將det_mv3_db.yml配置文件中的use_gpu字段修改為false.

  • 如果你只有一個gpu顯卡的話,單機單卡訓練可以輸入命令: python tools/train.py -c configs/det/det_mv3_db.yml -o Global.pretrained_model=./pretrain_models/MobileNetV3_large_x0_5_pretrained

  • 如果你是土豪又很多gpu的話,單機多卡訓練,需要通過–gpus 參數設置使用的gpu ID。輸入命令: python -m paddle.distributed.launch --gpus ‘0,1,2,3’ tools/train.py -c configs/det/det_mv3_db.yml
    -o Global.pretrained_model=./pretrain_models/MobileNetV3_large_x0_5_pretrained

    上述指令中,通過-c 選擇訓練使用configs/det/det_db_mv3.yml配置文件。 有關配置文件的詳細解釋,請參考鏈接。您也可以通過-o參數在不需要修改yml文件的情況下,改變訓練的參數,比如,調整訓練的學習率為0.0001python tools/train.py -c configs/det/det_mv3_db.yml -o Optimizer.base_lr=0.0001

4.3 訓練識別模型

如果您是在自己的數據集上訓練的模型,并且調整了中文字符的字典文件,請注意修改配置文件configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml中的character_dict_path是否是所需要的字典文件。同時修改Train和Eval的圖片路徑data_dir和標簽路徑label_file_list。

同檢測模型,如果您安裝的是cpu版本,請將配置文件中的 use_gpu 字段修改為false

GPU訓練 支持單卡,多卡訓練

#單卡訓練(訓練周期長,不建議)
python tools/train.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml

#多卡訓練,通過–gpus參數指定卡號
python -m paddle.distributed.launch --gpus ‘0,1,2,3’ tools/train.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml

PaddleOCR支持訓練和評估交替進行, 可以在rec_chinese_lite_train_v2.0.yml中修改 eval_batch_step 設置評估頻率, 默認每500個iter評估一次。評估過程中默認將最佳acc模型,保存為 output/rec_CRNN/best_accuracy。如果驗證集很 大,測試將會比較耗時,建議減少評估次數,或訓練完再進行評估。

4.4 問題及解決方案

**1.**遇到問題:Config use_gpu cannot be set as true while you are using paddlepaddle cpu version !

解決方案:修改rec_chinese_lite_train_v2.0.yml 的use_gpu 字段為false

**2.**遇到問題:.No Images in train dataset, please ensure

解決方案:1.標注工具識別結果沒有內容, 2.修改batch_size_per_card字段

3.遇到問題:ABORT!!! Out of all 4 trainers, the trainer process with rank=[0, 1, 2, 3] was aborted. Please check its log.

**解決方案:**1.選用單卡訓練。2.在代碼里加一行:paddle.set_device(“gpu”)

5.模型的評估

當文字檢測模型和文字識別模型訓練完成后需要查看評估結果。可以執(zhí)行下面的代碼進行評估:
1.輸入命令并執(zhí)行(這是文字檢測模型的評估代碼):

python PaddleOCR/tools/eval.py -c PaddleOCR/configs/det/det_mv3_db.yml -o Global.checkpoints=output/db_mv3/best_accuracy.pdparams PostProcess.box_thresh=0.5 PostProcess.unclip_ratio=1.5

2.文字檢測模型的評估結果如下:

  • 同理,文字識別模型的評估代碼可以自己執(zhí)行

3.從上面的結果可以看出,精準度:92%,召回率96%,hmean:94%,fps:24
hmean是一個綜合指標,從先的表達式可以看出其值介與精度和召回率自己,其表達式為:

6.模型導出

將訓練好 的模型轉換成inference模型需要運行如下命令:

# 導出檢測模型 python PaddleOCR/tools/export_model.py -c PaddleOCR/configs/det/det_mv3_db.yml -o Global.pretrained_model=output/db_mv3/best_accuracy Global.save_inference_dir=inference/db_mv3/ # 導出識別模型 python PaddleOCR/tools/export_model.py -c PaddleOCR/configs/det/det_mv3_db.yml -o Global.pretrained_model=output/db_mv3/best_accuracy Global.save_inference_dir=inference/db_mv3/

生成inference文件,如圖下:

其中:-c后面設置訓練算法的yml配置文件-o配置可選參數Global.pretrained_model 參數設置待轉換的訓練模型地址,不用天津文件后綴。pdmodel,.pdopt或者。pdparams即可Global.save_inference_dir參數設置轉換模型保存的地址

轉inference模型時,使用的配置文件和訓練時使用的配置文件相同。另外,還需要設置配置文件中的Global.pretrained_model參數,其指向訓練中保存的模型參數文件。 轉換成功后,在模型保存目錄下有三個文件:
/inference/*/
├── inference.pdiparams # inference模型的參數文件
├── inference.pdiparams.info # inference模型的參數信息,可忽略
└── inference.pdmodel # inference模型的program文件

7.模型推理

在執(zhí)行預測時,需要通過參數image_dir指定單張圖像或者圖像集合的路徑、參數det_model_dir,cls_model_dirrec_model_dir分別指定檢測方向分類識別的inference模型路徑。參數use_angle_cls用于控制是否啟用方向分類模型。如果訓練時修改了文本的字典,在使用inference模型預測時,需要通過**–rec_char_dict_path**指定使用的字典路徑,并且設置 rec_char_type=ch。可視化識別結果默認保存到 ./inference_results 文件夾里面。

python3 tools/infer/predict_system.py \--image_dir="./doc/imgs/00018069.jpg" \ #要預測圖片的路徑--det_model_dir="./inference/db_mv3/" \ #加入檢測模型參數的路徑--rec_model_dir="./inference/rec_chinese_lite_v2.0/" \ #加入識別模型參數的路徑--rec_char_dict_path="../dict.txt" \ #加入字典列表的路徑--rec_char_type=ch \ #設置中文或者en--use_angle_cls=false \--output=../output/table \--vis_font_path=./doc/fonts/simfang.ttf #加入字體

結果圖

創(chuàng)作不易,求關注和點贊!!
我是一名聽力障礙人士,熱愛學習熱愛健身,想學習怎么健身的歡迎關注哈。有圖有真相!!!


總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 伊人加勒比 | av性在线| 老司机综合网 | 毛片无码免费无码播放 | 日本黄色片一级 | 91精品久久香蕉国产线看观看 | 欧美综合自拍亚洲综合图片区 | 美女扒开腿让人桶爽原神 | av天天网| 免费特黄视频 | 日本一区久久 | 亚洲一区二区观看 | 日皮在线观看 | 亚洲欲妇 | 中国大陆高清aⅴ毛片 | 少妇三级全黄 | 又黄又骚的视频 | 国产精品日韩精品 | 欧美日本韩国在线 | 国产性猛交xx乱 | 日韩电影中文字幕在线观看 | 经典杯子蛋糕日剧在线观看免费 | 成人夜色视频 | 91浏览器在线观看 | 中文人妻av久久人妻18 | 99re视频在线观看 | 亚洲国产黄色av | 国产成年人免费视频 | 国产精品无码AV | 欧美一区二区免费电影 | 亚洲欧美一区二区在线观看 | 精品一区二区三区无码视频 | 日本免费一区视频 | 无码久久精品国产亚洲av影片 | 黄网站免费大全入口 | 亚洲粉嫩 | 国产区在线视频 | 日韩一区二区三区不卡 | 国产av日韩一区二区三区精品 | 中文日韩欧美 | 欧美综合视频在线观看 | 美女狠狠干 | 国产噜噜噜噜久久久久久久久 | 一色av| 激情影院内射美女 | 欧美成人做爰猛烈床戏 | 国产日韩亚洲 | 热久久这里只有精品 | 成人福利视频 | 中文字幕33页 | 国产福利视频一区二区三区 | 性生活视频网站 | а天堂中文在线官网 | 欧美国产成人在线 | 久草福利网 | 青青av| 免费在线观看黄网站 | 在线观看亚洲 | 亚洲社区在线观看 | 天堂a在线| 日本久久中文字幕 | 97国产在线 | 日韩精品在线一区二区 | 激情伊人五月天 | 极品美女高潮出白浆 | 黑人vs日本人ⅹxxxhd | 性感美女一级片 | 国产一级黄色片子 | 91色九色| 18禁裸男晨勃露j毛免费观看 | 精品在线99 | 精品久久久噜噜噜久久久 | 国产精品igao视频 | 国产免费一区二区 | 91看片视频 | 一区二区三区四区中文字幕 | 波多野结衣潜藏淫欲 | 牛牛av在线 | 亚洲美女在线视频 | 91网站观看 | 欧美精品一级二级三级 | 美女18网站| 销魂奶水汁系列小说 | 日韩精品久久久久久久电影99爱 | 国产男女猛烈无遮挡免费视频 | 久久久久婷婷 | 国产欧美一区二区三区精华液好吗 | 秋霞三区 | 黄色一级国产 | 91国偷自产中文字幕久久 | 欧美人与禽性xxxxx杂性 | 天天在线免费视频 | 国模私拍av | 亚洲伦理网| 91av不卡 | 国产精品sm调教免费专区 | 三级小视频在线观看 | 泰剧19禁啪啪无遮挡 | 日韩免费高清一区二区 |