1、前言
Hello 大家好呀,我是小張~
本期將給大家介紹一個 Github 項目,用於OCR文本識別的;在之前的教程中,關於用 Python 實現OCR 識別,寫過兩篇文章:
一篇是關於 python 與 Tesseract ,詳情可參考:介紹一個Python 包 ,幾行代碼可實現 OCR 文本識別; tesseract 是基於傳統機器學習方法實現的, 對於英文字符識別還是挺棒的,但中文字符的識別效果就差強人意了~~
還有一篇是介紹了一個用於文本識別的 Github 項目Easy-OCR,相關用法詳情可參考:關於文本OCR檢測、分享一個基於深度學習技術的Python庫
Easy-OCR 是基於深度學習技術開發的,識別效果要優於 Tesserart,支持識別70+個國家語言,除了文本識別之外還能對文本塊區域完成檢測功能,並用線框將相關區域標注在原圖上
但測試后發現,該庫對於某些路標識別效果並不是很精確~
2 PaddleOCR 介紹
這篇文章呢,將介紹一個新的 Github 項目,同樣用於 OCR 識別、該項目名叫 PaddleOCR,是 Paddle 的一個分支;PaddleOCR 基於深度學習技術實現的, 所以使用時需要訓練好的權重文件,但這個不需要我們擔心,因為官方提供的有~
本小節是對 PaddleOCR 項目的簡單介紹,如果只對使用步驟感興趣的同學可以跳過本小節看第三節部分~~~
經測試 PaddleOCR 識別效果非常優秀,下面兩張圖片是從官網介紹中截取的幾張圖片
圖一
圖二
為了測試該項目的識別性能、隨后我在網上找了一張關於優惠卷的圖片,圖片中文字情況比較復雜,垂直、斜體等;還有中英文相結合,甚至還有小數點
最終測試效果如下,無論左邊圖片文本復雜度有多高,圖中文字基本都能識別到,非常Nice 👍
關於 PaddleOCR 模型 ,有以下幾個特點
- PaddleOCR 從 2020.5.14 發布,項目迭代到現在,功能一直處於在不斷完善的過程;
-
在 PaddleOCR 識別中,會依次完成三種任務:檢測、方向分類及文本識別;
-
關於預訓練權重,PaddleOCR 官網根據提供權重文件大小分為兩類:
- 一類為輕量級,(檢測+分類+識別)三類權重加起來大小一共才 9.4 M,適用於手機端和服務器部署;
- 另一類(檢測+分類+識別)三類權重內存加起來一共 143.4 MB ,適用於服務器部署;
- 無論模型是否輕量級,識別效果都能與商業效果相比,在本期教程中將選用輕量級權重用於測試;
-
支持多語言識別,目前能夠支持 80 多種語言;
-
除了能對中文、英語、數字識別之外,還能應對字體傾斜、文本中含有小數點字符等復雜情況
-
提供有豐富的 OCR 領域相關工具供我們使用,方便我們制作自己的數據集、用於訓練
- 半自動數據標注工具;
- 數據合成工具;
-
支持 pip 安裝,簡單上手;
3 PaddleOCR 使用
簡單介紹完之后,下面將手把手教大家怎么去使用 PaddleOCR,
3.1 環境介紹
介紹一下本次所用的測試環境
- os:Win10;
- Python:3.7.9;
3.2 安裝 PaddlePaddle2.0
PaddleOCR 需在 PaddlePaddle2.0 下才可以正常運行,開始之前請確保 PaddlePaddle2.0
已經安裝,
pip3 install --upgrade pip
#
python3 -m pip install paddlepaddle==2.0.0 -i https://mirror.baidu.com/pypi/simple
3.2 克隆 PaddleOCR 倉庫
用 git clone
命令或者 Download
把項目倉庫直接下載到本地
git clone https://github.com/PaddlePaddle/PaddleOCR
這里我用的是 git 命令
3.3 安裝PaddleOCR 第三方依賴包
命令行進入 PaddleOCR
文件夾下
cd PaddleOCR
安裝第三方依賴項
pip3 install -r requirements.txt
這一步驟如果報錯的話,建議把改項目放置在一個虛擬環境中再進行安裝,如果用虛擬環境的話,記得還需要安裝一下 PaddlePaddle 包
python3 -m pip install paddlepaddle==2.0.0 -i https://mirror.baidu.com/pypi/simple
3.4 下載權重文件
權重鏈接地址分別貼在下方,需依次下載到本地;檢測權重
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar
方向分類權重
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar
識別權重
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar
下載到本地之后分別進行解壓,創建一個 inference
文件夾,把前面解壓后的三個文件夾放入 inference 中,再把 inference
文件夾放入 PaddleOCR 中,最終樹形目錄結構效果如下:
**3.5 PaddleOCR 使用 **
以上環境配置好之后,就可以使用 PaddleOCR 進行識別了,在PaddleOCR 項目環境下打開終端,根據自己情況,輸入下面三種類型中的一種即可完成文本識別
**1,使用 gpu,識別單張圖片 **
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_model_dir="./inference/ch_ppocr_mobile_v2.0_det_infer/" --rec_model_dir="./inference/ch_ppocr_mobile_v2.0_rec_infer/" --cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer/" --use_angle_cls=True --use_space_char=True
2,使用 gpu ,識別多張圖片
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/" --det_model_dir="./inference/ch_ppocr_mobile_v2.0_det_infer/" --rec_model_dir="./inference/ch_ppocr_mobile_v2.0_rec_infer/" --cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer/" --use_angle_cls=True --use_space_char=True
3,不使用gpu,識別單張圖片
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_model_dir="./inference/ch_ppocr_mobile_v2.0_det_infer/" --rec_model_dir="./inference/ch_ppocr_mobile_v2.0_rec_infer/" --cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer/" --use_angle_cls=True --use_space_char=True --use_gpu=False
里面有兩個參數需要自己配置一下,參數說明:
image_dir
-> 為需要識別圖片路徑或文件夾;det_model_dir
-> 存放識別后圖片路徑或文件夾;
PaddleOCR 識別一張圖片很快,只用 CPU 的話,也只需要兩三秒
4. 數據、源碼獲取
為了方便,我已經把測試數據、項目代碼都打包在一起了,下載后完成以下兩個步驟即可正常使用(使用方法參考章節 3.5 部分)
- 創建虛擬環境;
- pip 工具安裝依賴項;
python3 -m pip install paddlepaddle==2.0.0 -i https://mirror.baidu.com/pypi/simple
# 依賴項
pip3 install -r requirements.txt
獲取方式:關注微信公號:程序員大飛 (本號),后台回復關鍵字:210612 即可
5 小總結
Paddle-OCR 屬於Paddle 框架其中的一個應用,Paddle 除了 OCR 之外還有許多其它好玩的模型,關鍵開發者提供有訓練好的預權重文件、降低了使用門檻
后期呢,我也打算將從中挑一些好玩的項目,通過博文的方式手把手教大家跑起來
好了,關於 PaddleOCR 的使用就介紹到這里了,如果內容對你有幫助的話不妨點個贊來鼓勵一下我~
最后感謝大家的閱讀,我們下期見