Python PaddleOCR模型訓(xùn)練及使用超詳細(xì)教程
Part1. OCR原理及開源項(xiàng)目對(duì)比
OCR英文全稱是Optical Character Recognition,中文叫做光學(xué)字符識(shí)別。是通過掃描等光學(xué)技術(shù)與計(jì)算機(jī)技術(shù)結(jié)合的方式直接從影像中提取各類數(shù)據(jù),省去人工錄入,節(jié)約成本。
原理:
為了識(shí)別一張圖片中的文字,通常包含兩個(gè)步驟:
1)文本檢測(cè):檢測(cè)出圖片中文字所在的位置;
2)文字識(shí)別:識(shí)別包含文字的圖片局部,預(yù)測(cè)具體的文字。
以下為對(duì)Github上幾個(gè)開源ocr項(xiàng)目的對(duì)比,主要分為幾個(gè)方面:新手友好度、使用便捷性、OCR識(shí)別效果。
| 項(xiàng)目名稱 | 優(yōu)點(diǎn) | 缺點(diǎn) |
|---|---|---|
| 1.cnocr | 安裝使用方便,對(duì)環(huán)境的要求不高,檢測(cè)精準(zhǔn)度和識(shí)別準(zhǔn)確率較高 | 語(yǔ)言方面有局限性,僅能識(shí)別中文簡(jiǎn)體繁體、英文、數(shù)字等,如需識(shí)別更高專業(yè)度的公式或其他語(yǔ)言需要進(jìn)行自己的訓(xùn)練。 |
| 2.easyocr | 安裝調(diào)用方便,支持識(shí)別監(jiān)測(cè)多種語(yǔ)言,識(shí)別的精確度尚可 | 對(duì)中文檢測(cè)的準(zhǔn)確度一般,對(duì)排版規(guī)整的印刷體都有較好的表現(xiàn),但對(duì)于稍有畸變或包含其他字體的圖像其效果一般;識(shí)別的速度較慢,模型較大,EasyOCR的內(nèi)存占用較高。 |
| 3.mmocr | 功能完善,包括文本檢測(cè)、文本識(shí)別、以及端到端的文本識(shí)別任務(wù)都有給出對(duì)應(yīng)的方法以及詳細(xì)的說明文檔 | 基于openmmlab的環(huán)境安裝配置較為繁瑣,不適合快速上手 |
| 4.paddleocr | 方便進(jìn)行自己的訓(xùn)練:官方給到的訓(xùn)練集非常全,也有常用的合成、標(biāo)注工具?;緷M足個(gè)性化訓(xùn)練的場(chǎng)景應(yīng)用,不需要再自己花時(shí)間找,一鍵下載就行,文檔中也有詳細(xì)的說明;識(shí)別準(zhǔn)確率較高、速度快 | 基于paddle框架,并不是目前所使用的主流框架,對(duì)未使用過的小白或是需要進(jìn)行后續(xù)開發(fā)可能不是很友好,項(xiàng)目整體比較復(fù)雜,學(xué)習(xí)成本較高 |
| 5.tesseract | tesseract具有良好的可擴(kuò)展性,用戶可以使用自定義訓(xùn)練數(shù)據(jù)來訓(xùn)練和優(yōu)化OCR模型,Tesseract還提供了API和接口,方便用戶進(jìn)行二次開發(fā)和集成 | 不是專門針對(duì)中文場(chǎng)景且相關(guān)文檔主要是英文,經(jīng)過測(cè)試感覺其對(duì)于復(fù)雜字形和字體的識(shí)別準(zhǔn)確性較低,與其他OCR相比,Tesseract的準(zhǔn)確率可能相對(duì)較低 |
Part2. PaddleOCR介紹

官方網(wǎng)址:https://github.com/PaddlePaddle/PaddleOCR
PaddleOCR是基于PaddlePaddle深度學(xué)習(xí)框架的開源OCR工具,但它提供了推理模型/訓(xùn)練模型/預(yù)訓(xùn)練模型,用戶可以直接使用推理模型進(jìn)行識(shí)別,也可以對(duì)訓(xùn)練模型或預(yù)訓(xùn)練模型進(jìn)行再訓(xùn)練。支持約80種語(yǔ)言的文本識(shí)別,并具有較高的準(zhǔn)確性和速度。
PaddleOCR的官方文檔就更加的友好,有好幾種語(yǔ)言可供選擇,講述的也更為詳細(xì),包括從什么是ocr開始到模型的各種細(xì)節(jié)都有提到。也經(jīng)常有更新和維護(hù)。


PaddleOCR其技術(shù)體系包括文字檢測(cè)、文字識(shí)別、文本方向檢測(cè)和圖像處理等模塊。以下是其優(yōu)點(diǎn):
- 高精度:PaddleOCR采用深度學(xué)習(xí)算法進(jìn)行訓(xùn)練,可以在不同場(chǎng)景下實(shí)現(xiàn)高精度的文字檢測(cè)和文字識(shí)別。
- 多語(yǔ)種支持:PaddleOCR支持多種語(yǔ)言的文字識(shí)別,包括中文、英文、日語(yǔ)、韓語(yǔ)等。同時(shí),它還支持多種不同文字類型的識(shí)別,如手寫字、印刷體、表格等。
- 高效性:PaddleOCR的訓(xùn)練和推理過程都采用了高效的并行計(jì)算方法,可大幅提高處理速度。同時(shí),其輕量化設(shè)計(jì)也使得PaddleOCR能夠在移動(dòng)設(shè)備上進(jìn)行部署,適用于各種場(chǎng)景的應(yīng)用。
- 易用性:PaddleOCR提供了豐富的API接口和文檔說明,用戶可以快速進(jìn)行模型集成和部署,實(shí)現(xiàn)自定義的OCR功能。同時(shí),其開源代碼也為用戶提供了更好的靈活性和可擴(kuò)展性。
- 魯棒性:PaddleOCR采用了多種數(shù)據(jù)增強(qiáng)技術(shù)和模型融合策略,能夠有效地應(yīng)對(duì)圖像噪聲、光照變化等干擾因素,并提高模型的魯棒性和穩(wěn)定性。
Part3. PaddleOCR模型訓(xùn)練環(huán)境搭建
語(yǔ)言環(huán)境:python
PaddleOCR可通過CPU或GPU進(jìn)行訓(xùn)練,對(duì)應(yīng)環(huán)境配置如下:

安裝模塊列表(win11):
① 安裝PaddlePaddle:pip install PaddlePaddle
先安裝PaddlePaddle再安裝PaddleOCR
需要注意的是:
如果機(jī)器安裝的是 CUDA,執(zhí)行:pip install paddlepaddle-gpu
如果機(jī)器是 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功能使用和計(jì)算
打開終端輸入nvidia-smi,看CUDA Version的版本,只要下載這個(gè)版本或者這個(gè)以下的就可以
NVIDIA官網(wǎng)(https://developer.nvidia.com/cuda-toolkit-archive)
下載CUDA Toolkit并安裝



⑤ 安裝CUDNN : 進(jìn)入以下網(wǎng)址,需要進(jìn)行注冊(cè)下載
NVIDIA官網(wǎng)(https://developer.nvidia.com/cudnn)


下載后將cudnn解壓為一個(gè)文件夾,將以下文件復(fù)制到cuda的根目錄下

![]()

在系統(tǒng)高級(jí)設(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庫(kù)所在位置:pip show ppocrlabel

2. 在PPOCRLabel文件夾下有兩個(gè).py文件是制作數(shù)據(jù)集所需的

3. PPOCRLabel根目錄下,終端運(yùn)行: python PPOCRLabel.py --lang ch
python PPOCRLabel.py --lang ch # 啟動(dòng)【普通模式】,用于打【檢測(cè)+識(shí)別】場(chǎng)景的標(biāo)簽
python PPOCRLabel.py --lang ch --kie True # 啟動(dòng)【KIE 模式】,用于打【檢測(cè)+識(shí)別+關(guān)鍵字提取】場(chǎng)景的標(biāo)簽
4. 打開后點(diǎn)擊文件,點(diǎn)擊打開目錄選擇需要打標(biāo)簽的數(shù)據(jù)集文件夾,點(diǎn)擊左下角自動(dòng)標(biāo)注

5. 然后從第一張開始檢查。漏打標(biāo)的按下Q框出字體;打標(biāo)文字錯(cuò)誤的,點(diǎn)擊方框,在右邊框里修改,并對(duì)每一個(gè)方框給出關(guān)鍵詞列表(點(diǎn)擊編輯點(diǎn)擊更改box關(guān)鍵詞信息)。支持矩形標(biāo)注和多點(diǎn)標(biāo)注,最后刪除無用信息,點(diǎn)確認(rèn)后,切換下一張快捷鍵為D,如下圖所示。

相關(guān)快捷鍵:

6. 導(dǎo)出標(biāo)記結(jié)果及識(shí)別結(jié)果
全部打標(biāo)完成之后,點(diǎn)擊文件選擇導(dǎo)出標(biāo)記結(jié)果,再點(diǎn)擊文件選擇導(dǎo)出識(shí)別結(jié)果,完成后文件夾里多出四個(gè)文件crop_img、fileState、Label、rec_gt。
- crop_img中的圖片用來訓(xùn)練文字識(shí)別模型
- fileState記錄圖片的打標(biāo)完成與否
- Label為訓(xùn)練文字檢測(cè)模型的標(biāo)簽
- rec_gt為訓(xùn)練文字識(shí)別模型的標(biāo)簽

命名為train_data文件夾存放的是打標(biāo)簽生成的文件和圖片
其結(jié)構(gòu)如下圖所示

7. 將數(shù)據(jù)集劃分(訓(xùn)練集/驗(yàn)證集/測(cè)試集)
PPOCRLabel根目錄下,終端運(yùn)行:python gen_ocr_train_val_test.py --trainValTestRatio 6:2:2 –-datasetRootPath xx --detRootPath xx --recRootPath xx
參數(shù)說明:
- trainValTestRatio 是訓(xùn)練集、驗(yàn)證集、測(cè)試集的圖像數(shù)量劃分比例,根據(jù)實(shí)際情況設(shè)定,默認(rèn)是6:2:2
- datasetRootPath 是PPOCRLabel標(biāo)注的完整數(shù)據(jù)集存放路徑。默認(rèn)路徑是 …/train_data/
- 就是步驟6的結(jié)果文件夾train_data文件夾。
- detRootPath 是輸出訓(xùn)練文字檢測(cè)的數(shù)據(jù)集存放路徑。默認(rèn)路徑是 …/train_data/det
- recRootPath 是輸出訓(xùn)練文字識(shí)別的數(shù)據(jù)集存放路徑。默認(rèn)路徑是 …/train_data/rec
輸入指令之后,在train_data文件夾下會(huì)出現(xiàn)兩個(gè)文件:
其中det是用來訓(xùn)練文字檢測(cè)的數(shù)據(jù)集,
rec是用來訓(xùn)練文字識(shí)別的數(shù)據(jù)集。

Part5. 訓(xùn)練模型
1. 按需下載文本檢測(cè)、文本識(shí)別的配置文件和訓(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)練文字檢測(cè)模型
3.1 手動(dòng)修改配置文件ch_PP-OCRv3_det_cml.yml
已列出需要修改的參數(shù),完整參數(shù)説明請(qǐng)參考
官方文檔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)練完之后會(huì)在文件夾下保存訓(xùn)練好的模型,具體保存的文件夾路徑依據(jù)配置文件:
save_model_dir: ./output/ch_PP-OCR_v3_det/ # 設(shè)置輸出訓(xùn)練模型路徑
訓(xùn)練過程中產(chǎn)生的模型稱為檢查點(diǎn)(checkpoints)模型,包含完整參數(shù),用于恢復(fù)訓(xùn)練及二次訓(xùn)練。一 個(gè)檢查點(diǎn)模型包含三個(gè)文件:
.pdopt:訓(xùn)練優(yōu)化器參數(shù)
.pdparams:訓(xùn)練網(wǎng)絡(luò)參數(shù)
.states:訓(xùn)練狀態(tài)

4. 訓(xùn)練文字識(shí)別模型(跟訓(xùn)練文字檢測(cè)模型步驟幾乎一樣)
4.1 手動(dòng)修改配置文件ch_PP-OCRv3_rec_distillation.yml
下面列出需要修改的參數(shù),修改的地方和文字檢測(cè)修改的類似。

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)練完之后會(huì)在文件夾下保存訓(xùn)練好的模型,具體保存的文件夾路徑依據(jù)配置文件:
save_model_dir: ./output/rec_ppocr_v3_distillation/
5. 斷點(diǎn)訓(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)先級(jí)高于Global.pretrained_model的優(yōu)先級(jí),即同時(shí)指定兩個(gè)參數(shù)時(shí),優(yōu)先加載Global.checkpoints指定的模型
6. 模型微調(diào)
官方講解較詳細(xì):https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/finetune.md
Part6. 轉(zhuǎn)換成推理模型并應(yīng)用
1. 轉(zhuǎn)換成推理模型
推理模型是可以直接被調(diào)用進(jìn)行識(shí)別和檢測(cè)。推理模型體積更小,在預(yù)測(cè)部署、加速推理上性能優(yōu)越、靈活方便,但不能用于恢復(fù)訓(xùn)練及二次訓(xùn)練。
執(zhí)行以下命令將訓(xùn)練好的檢測(cè)、識(shí)別模型導(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)練時(shí)使用的配置文件相同
- -o 指定配置文件中的某個(gè)參數(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') # 打開需要識(shí)別的圖片
result = paddleocr.ocr(img)
for i in range(len(result[0])):
print(result[0][i][1][0]) # 輸出識(shí)別結(jié)果識(shí)別結(jié)果:


以上就是PaddleOCR模型訓(xùn)練及使用方法,如有錯(cuò)處歡迎指正!
到此這篇關(guān)于PaddleOCR模型訓(xùn)練及使用詳細(xì)教程的文章就介紹到這了,更多相關(guān)PaddleOCR模型訓(xùn)練內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)回歸預(yù)測(cè)模型
- Python時(shí)間序列處理之ARIMA模型的使用講解
- Python中利用LSTM模型進(jìn)行時(shí)間序列預(yù)測(cè)分析的實(shí)現(xiàn)
- Python使用Ollama實(shí)現(xiàn)私有大模型知識(shí)庫(kù)
- python 機(jī)器學(xué)習(xí)之支持向量機(jī)非線性回歸SVR模型
- 用Python給文本創(chuàng)立向量空間模型的教程
- python使用tensorflow保存、加載和使用模型的方法
- python構(gòu)建指數(shù)平滑預(yù)測(cè)模型示例
- Python深度學(xué)習(xí)之Unet?語(yǔ)義分割模型(Keras)
- 深入淺析Python 中的sklearn模型選擇
- Python深度學(xué)習(xí)時(shí)序預(yù)測(cè):從數(shù)據(jù)預(yù)處理到DGCRN/Informer模型對(duì)比
相關(guān)文章
Python爬蟲之獲取心知天氣API實(shí)時(shí)天氣數(shù)據(jù)并彈窗提醒
今天我們來學(xué)習(xí)如何獲取心知天氣API實(shí)時(shí)天氣數(shù)據(jù),制作彈窗提醒,并設(shè)置成自啟動(dòng)項(xiàng)目.文中有非常詳細(xì)的代碼示例及介紹,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-05-05
一文搞懂霍夫曼樹原理及C++/Python/Java實(shí)戰(zhàn)實(shí)現(xiàn)
霍夫曼樹是一種用于數(shù)據(jù)壓縮的樹形結(jié)構(gòu),通過構(gòu)建具有最小帶權(quán)路徑長(zhǎng)度的二叉樹,實(shí)現(xiàn)高效的數(shù)據(jù)編碼,這篇文章主要介紹了霍夫曼樹原理及C++/Python/Java實(shí)戰(zhàn)實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2025-11-11
基于Python編寫一個(gè)PDF清晰度增強(qiáng)工具全解析(附完整源碼)
在日常辦公和學(xué)習(xí)中,我們經(jīng)常會(huì)遇到掃描版PDF文件模糊不清的問題,本文將介紹一款基于Python開發(fā)的PDF智能增強(qiáng)工具,它能夠通過多維度圖像處理算法自動(dòng)提升PDF文件的清晰度和可讀性,有需要的小伙伴可以了解下2026-03-03
使用python和yolo方法實(shí)現(xiàn)yolo標(biāo)簽自動(dòng)標(biāo)注
本文介紹了基于YOLOv10的自動(dòng)標(biāo)注方法,從初階的固定標(biāo)注到高階的基于YOLO檢測(cè)結(jié)果的自動(dòng)標(biāo)注,兩者相比,高階方法顯著提高了標(biāo)注的準(zhǔn)確性,并減少了人工操作的時(shí)間,</P><P>2024-11-11
關(guān)于Django Models CharField 參數(shù)說明
這篇文章主要介紹了關(guān)于Django Models CharField 參數(shù)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
零基礎(chǔ)也能看懂的python內(nèi)置csv模塊教程
這篇博客就為你介紹一個(gè)知識(shí)點(diǎn),python 內(nèi)置模塊 csv 。讓大家一文就看懂csv csv(Comma-Separated Values)文件是什么?以及python 中的 csv 文件清晰解法讀取文件寫入文件 csv 文件其它說明2021-11-11
Python數(shù)據(jù)結(jié)構(gòu)與算法中的隊(duì)列詳解(2)
這篇文章主要為大家詳細(xì)介紹了Python中的隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03

