Python PaddleOCR模型訓(xùn)練及使用超詳細教程
Part1. OCR原理及開源項目對比
OCR英文全稱是Optical Character Recognition,中文叫做光學(xué)字符識別。是通過掃描等光學(xué)技術(shù)與計算機技術(shù)結(jié)合的方式直接從影像中提取各類數(shù)據(jù),省去人工錄入,節(jié)約成本。
原理:
為了識別一張圖片中的文字,通常包含兩個步驟:
1)文本檢測:檢測出圖片中文字所在的位置;
2)文字識別:識別包含文字的圖片局部,預(yù)測具體的文字。
以下為對Github上幾個開源ocr項目的對比,主要分為幾個方面:新手友好度、使用便捷性、OCR識別效果。
項目名稱 | 優(yōu)點 | 缺點 |
---|---|---|
1.cnocr | 安裝使用方便,對環(huán)境的要求不高,檢測精準(zhǔn)度和識別準(zhǔn)確率較高 | 語言方面有局限性,僅能識別中文簡體繁體、英文、數(shù)字等,如需識別更高專業(yè)度的公式或其他語言需要進行自己的訓(xùn)練。 |
2.easyocr | 安裝調(diào)用方便,支持識別監(jiān)測多種語言,識別的精確度尚可 | 對中文檢測的準(zhǔn)確度一般,對排版規(guī)整的印刷體都有較好的表現(xiàn),但對于稍有畸變或包含其他字體的圖像其效果一般;識別的速度較慢,模型較大,EasyOCR的內(nèi)存占用較高。 |
3.mmocr | 功能完善,包括文本檢測、文本識別、以及端到端的文本識別任務(wù)都有給出對應(yīng)的方法以及詳細的說明文檔 | 基于openmmlab的環(huán)境安裝配置較為繁瑣,不適合快速上手 |
4.paddleocr | 方便進行自己的訓(xùn)練:官方給到的訓(xùn)練集非常全,也有常用的合成、標(biāo)注工具?;緷M足個性化訓(xùn)練的場景應(yīng)用,不需要再自己花時間找,一鍵下載就行,文檔中也有詳細的說明;識別準(zhǔn)確率較高、速度快 | 基于paddle框架,并不是目前所使用的主流框架,對未使用過的小白或是需要進行后續(xù)開發(fā)可能不是很友好,項目整體比較復(fù)雜,學(xué)習(xí)成本較高 |
5.tesseract | tesseract具有良好的可擴展性,用戶可以使用自定義訓(xùn)練數(shù)據(jù)來訓(xùn)練和優(yōu)化OCR模型,Tesseract還提供了API和接口,方便用戶進行二次開發(fā)和集成 | 不是專門針對中文場景且相關(guān)文檔主要是英文,經(jīng)過測試感覺其對于復(fù)雜字形和字體的識別準(zhǔn)確性較低,與其他OCR相比,Tesseract的準(zhǔn)確率可能相對較低 |
Part2. PaddleOCR介紹
官方網(wǎng)址:https://github.com/PaddlePaddle/PaddleOCR
PaddleOCR是基于PaddlePaddle深度學(xué)習(xí)框架的開源OCR工具,但它提供了推理模型/訓(xùn)練模型/預(yù)訓(xùn)練模型,用戶可以直接使用推理模型進行識別,也可以對訓(xùn)練模型或預(yù)訓(xùn)練模型進行再訓(xùn)練。支持約80種語言的文本識別,并具有較高的準(zhǔn)確性和速度。
PaddleOCR的官方文檔就更加的友好,有好幾種語言可供選擇,講述的也更為詳細,包括從什么是ocr開始到模型的各種細節(jié)都有提到。也經(jīng)常有更新和維護。
PaddleOCR其技術(shù)體系包括文字檢測、文字識別、文本方向檢測和圖像處理等模塊。以下是其優(yōu)點:
- 高精度:PaddleOCR采用深度學(xué)習(xí)算法進行訓(xùn)練,可以在不同場景下實現(xiàn)高精度的文字檢測和文字識別。
- 多語種支持:PaddleOCR支持多種語言的文字識別,包括中文、英文、日語、韓語等。同時,它還支持多種不同文字類型的識別,如手寫字、印刷體、表格等。
- 高效性:PaddleOCR的訓(xùn)練和推理過程都采用了高效的并行計算方法,可大幅提高處理速度。同時,其輕量化設(shè)計也使得PaddleOCR能夠在移動設(shè)備上進行部署,適用于各種場景的應(yīng)用。
- 易用性:PaddleOCR提供了豐富的API接口和文檔說明,用戶可以快速進行模型集成和部署,實現(xiàn)自定義的OCR功能。同時,其開源代碼也為用戶提供了更好的靈活性和可擴展性。
- 魯棒性:PaddleOCR采用了多種數(shù)據(jù)增強技術(shù)和模型融合策略,能夠有效地應(yīng)對圖像噪聲、光照變化等干擾因素,并提高模型的魯棒性和穩(wěn)定性。
Part3. PaddleOCR模型訓(xùn)練環(huán)境搭建
語言環(huán)境:python
PaddleOCR可通過CPU或GPU進行訓(xùn)練,對應(yīng)環(huán)境配置如下:
安裝模塊列表(win11):
① 安裝PaddlePaddle:pip install PaddlePaddle
先安裝PaddlePaddle再安裝PaddleOCR
需要注意的是:
如果機器安裝的是 CUDA,執(zhí)行:pip install paddlepaddle-gpu
如果機器是 CPU,執(zhí)行: pip install PaddlePaddle
② 安裝PaddleOCR whl包:pip install PaddleOCR
③ 安裝圖形標(biāo)注工具:pip install PPOCRLabel 或在官網(wǎng)下載
https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.7
如果用GPU訓(xùn)練,還需安裝CUDA和CUDNN:
④ 安裝CUDA:訓(xùn)練中用于加速GPU功能使用和計算
打開終端輸入nvidia-smi,看CUDA Version的版本,只要下載這個版本或者這個以下的就可以
NVIDIA官網(wǎng)(https://developer.nvidia.com/cuda-toolkit-archive)
下載CUDA Toolkit并安裝
⑤ 安裝CUDNN : 進入以下網(wǎng)址,需要進行注冊下載
NVIDIA官網(wǎng)(https://developer.nvidia.com/cudnn)
下載后將cudnn解壓為一個文件夾,將以下文件復(fù)制到cuda的根目錄下
在系統(tǒng)高級設(shè)置中添加如下環(huán)境變量:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\bin C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\include C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\lib C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\libnvvp
Part4. 制作數(shù)據(jù)集
PPOCRLabel就是跟PaddleOCR配套的標(biāo)注工具
前面在介紹環(huán)境搭建過程中已下載,直接可以使用
1. 先查看下載的ppocrlabel庫所在位置:pip show ppocrlabel
2. 在PPOCRLabel文件夾下有兩個.py文件是制作數(shù)據(jù)集所需的
3. PPOCRLabel根目錄下,終端運行: python PPOCRLabel.py --lang ch
python PPOCRLabel.py --lang ch # 啟動【普通模式】,用于打【檢測+識別】場景的標(biāo)簽
python PPOCRLabel.py --lang ch --kie True # 啟動【KIE 模式】,用于打【檢測+識別+關(guān)鍵字提取】場景的標(biāo)簽
4. 打開后點擊文件,點擊打開目錄選擇需要打標(biāo)簽的數(shù)據(jù)集文件夾,點擊左下角自動標(biāo)注
5. 然后從第一張開始檢查。漏打標(biāo)的按下Q框出字體;打標(biāo)文字錯誤的,點擊方框,在右邊框里修改,并對每一個方框給出關(guān)鍵詞列表(點擊編輯點擊更改box關(guān)鍵詞信息)。支持矩形標(biāo)注和多點標(biāo)注,最后刪除無用信息,點確認后,切換下一張快捷鍵為D,如下圖所示。
相關(guān)快捷鍵:
6. 導(dǎo)出標(biāo)記結(jié)果及識別結(jié)果
全部打標(biāo)完成之后,點擊文件選擇導(dǎo)出標(biāo)記結(jié)果,再點擊文件選擇導(dǎo)出識別結(jié)果,完成后文件夾里多出四個文件crop_img、fileState、Label、rec_gt。
- crop_img中的圖片用來訓(xùn)練文字識別模型
- fileState記錄圖片的打標(biāo)完成與否
- Label為訓(xùn)練文字檢測模型的標(biāo)簽
- rec_gt為訓(xùn)練文字識別模型的標(biāo)簽
命名為train_data文件夾存放的是打標(biāo)簽生成的文件和圖片
其結(jié)構(gòu)如下圖所示
7. 將數(shù)據(jù)集劃分(訓(xùn)練集/驗證集/測試集)
PPOCRLabel根目錄下,終端運行:python gen_ocr_train_val_test.py --trainValTestRatio 6:2:2 –-datasetRootPath xx --detRootPath xx --recRootPath xx
參數(shù)說明:
- trainValTestRatio 是訓(xùn)練集、驗證集、測試集的圖像數(shù)量劃分比例,根據(jù)實際情況設(shè)定,默認是6:2:2
- datasetRootPath 是PPOCRLabel標(biāo)注的完整數(shù)據(jù)集存放路徑。默認路徑是 …/train_data/
- 就是步驟6的結(jié)果文件夾train_data文件夾。
- detRootPath 是輸出訓(xùn)練文字檢測的數(shù)據(jù)集存放路徑。默認路徑是 …/train_data/det
- recRootPath 是輸出訓(xùn)練文字識別的數(shù)據(jù)集存放路徑。默認路徑是 …/train_data/rec
輸入指令之后,在train_data文件夾下會出現(xiàn)兩個文件:
其中det是用來訓(xùn)練文字檢測的數(shù)據(jù)集,
rec是用來訓(xùn)練文字識別的數(shù)據(jù)集。
Part5. 訓(xùn)練模型
1. 按需下載文本檢測、文本識別的配置文件和訓(xùn)練模型
官方網(wǎng)址:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/models_list.md
2. 在PaddleOCR-release-2.7目錄下新建pretrain_models文件夾,存放前面下載的配置文件和訓(xùn)練模型
3. 訓(xùn)練文字檢測模型
3.1 手動修改配置文件ch_PP-OCRv3_det_cml.yml
已列出需要修改的參數(shù),完整參數(shù)説明請參考
官方文檔https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/config.md
3.2 開始訓(xùn)練
在PaddleOCR-release-2.7根目錄下,執(zhí)行命令開始訓(xùn)練:
python tools/train.py -c pretrain_models/ch_PP-OCRv3_det_cml.yml
模型訓(xùn)練完之后會在文件夾下保存訓(xùn)練好的模型,具體保存的文件夾路徑依據(jù)配置文件:
save_model_dir: ./output/ch_PP-OCR_v3_det/ # 設(shè)置輸出訓(xùn)練模型路徑
訓(xùn)練過程中產(chǎn)生的模型稱為檢查點(checkpoints)模型,包含完整參數(shù),用于恢復(fù)訓(xùn)練及二次訓(xùn)練。一 個檢查點模型包含三個文件:
.pdopt:訓(xùn)練優(yōu)化器參數(shù)
.pdparams:訓(xùn)練網(wǎng)絡(luò)參數(shù)
.states:訓(xùn)練狀態(tài)
4. 訓(xùn)練文字識別模型(跟訓(xùn)練文字檢測模型步驟幾乎一樣)
4.1 手動修改配置文件ch_PP-OCRv3_rec_distillation.yml
下面列出需要修改的參數(shù),修改的地方和文字檢測修改的類似。
4.2 開始訓(xùn)練
在PaddleOCR-release-2.7根目錄下,執(zhí)行命令開始訓(xùn)練:
python tools/train.py -c pretrain_models/ch_PP-OCRv3_rec_distillation.yml
模型訓(xùn)練完之后會在文件夾下保存訓(xùn)練好的模型,具體保存的文件夾路徑依據(jù)配置文件:
save_model_dir: ./output/rec_ppocr_v3_distillation/
5. 斷點訓(xùn)練
如果訓(xùn)練程序中斷,希望加載訓(xùn)練中斷的模型從而恢復(fù)訓(xùn)練,可以通過指定Global.checkpoints指定要加載的模型路徑:
python tools/train.py -c pretrain_models/ch_PP-OCRv3_rec_distillation.yml -o Global.checkpoints=./your/trained/model
注意:Global.checkpoints的優(yōu)先級高于Global.pretrained_model的優(yōu)先級,即同時指定兩個參數(shù)時,優(yōu)先加載Global.checkpoints指定的模型
6. 模型微調(diào)
官方講解較詳細:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/finetune.md
Part6. 轉(zhuǎn)換成推理模型并應(yīng)用
1. 轉(zhuǎn)換成推理模型
推理模型是可以直接被調(diào)用進行識別和檢測。推理模型體積更小,在預(yù)測部署、加速推理上性能優(yōu)越、靈活方便,但不能用于恢復(fù)訓(xùn)練及二次訓(xùn)練。
執(zhí)行以下命令將訓(xùn)練好的檢測、識別模型導(dǎo)出為推理模型:
python tools/export_model.py -c pretrain_models/ch_PP-OCRv3_det_cml.yml -o Global.pretrained_model=./output/ch_PP-OCR_v3_det/latest Global.save_inference_dir=./inference_model/det_model/
python tools/export_model.py -c pretrain_models/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model=./output/rec_ppocr_v3_distillation/latest Global.save_inference_dir=./inference_model/rec_model/
參數(shù)說明:
- -c 指定導(dǎo)出模型使用的配置文件,需與訓(xùn)練時使用的配置文件相同
- -o 指定配置文件中的某個參數(shù),即在不修改配置文件的情況下修改參數(shù)
- Global.pretrained_model 此處是指要導(dǎo)出模型的參數(shù)文件路徑
- Global.save_inference_dir 指導(dǎo)出模型的保存路徑
結(jié)果:
2. 模型使用
import cv2 from paddleocr import PaddleOCR paddleocr = PaddleOCR(lang='ch', show_log=False, enable_mkldnn=True, det_model_dir=f'D:\\PaddleOCR-release-2.7\\inference_model\\det_model\\Teacher', rec_model_dir=f'D:\\PaddleOCR-release-2.7\\inference_model\\rec_model\\Teacher') # 推理模型路徑 img = cv2.imread('ch2.jpg') # 打開需要識別的圖片 result = paddleocr.ocr(img) for i in range(len(result[0])): print(result[0][i][1][0]) # 輸出識別結(jié)果
識別結(jié)果:
以上就是PaddleOCR模型訓(xùn)練及使用方法,如有錯處歡迎指正!
到此這篇關(guān)于PaddleOCR模型訓(xùn)練及使用詳細教程的文章就介紹到這了,更多相關(guān)PaddleOCR模型訓(xùn)練內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python+ChatGPT實現(xiàn)5分鐘快速上手編程
最近一段時間chatGPT火爆出圈!無論是在互聯(lián)網(wǎng)行業(yè),還是其他各行業(yè)都賺足了話題。俗話說:“外行看笑話,內(nèi)行看門道”,今天從chatGPT個人體驗感受以及如何用的角度來分享一下2023-02-02在unittest中使用 logging 模塊記錄測試數(shù)據(jù)的方法
今天小編就為大家分享一篇在unittest中使用 logging 模塊記錄測試數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11Python用內(nèi)置模塊來構(gòu)建REST服務(wù)與RPC服務(wù)實戰(zhàn)
這篇文章主要介紹了Python用內(nèi)置模塊來構(gòu)建REST服務(wù)與RPC服務(wù)實戰(zhàn),python在網(wǎng)絡(luò)方面封裝一些內(nèi)置模塊,可以用很簡潔的代碼實現(xiàn)端到端的通信,比如HTTP、RPC服務(wù),下文實戰(zhàn)詳情,需要的朋友可以參考一下2022-09-09Python本地cache不當(dāng)使用導(dǎo)致內(nèi)存泄露的問題分析與解決
最近在項目開發(fā)中遇到了本地cache不當(dāng)使用導(dǎo)致的一個內(nèi)存泄露問題,所以本文主要分析了問題出現(xiàn)的原因已經(jīng)解決方法,需要的小伙伴可以參考下2023-08-08Pygame游戲開發(fā)之太空射擊實戰(zhàn)敵人精靈篇
相信大多數(shù)8090后都玩過太空射擊游戲,在過去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來自己動手實現(xiàn)它,在編寫學(xué)習(xí)中回顧過往展望未來,下面開始講解敵人精靈的使用2022-08-08