百度飛槳(PaddlePaddle) - PaddleOCR 文字識別簡單使用

VipSoft發表於2023-05-15

百度飛槳(PaddlePaddle)安裝
OCR 文字檢測(Differentiable Binarization --- DB)

OCR的技術路線

image
PaddleHub 預訓練模型的網路結構是 DB + CRNN, 可微的二值化模組(Differentiable Binarization,簡稱DB)
CRNN(Convolutional Recurrent Neural Network)即卷積遞迴神經網路, 是DCNN和RNN的組合

DB(Differentiable Binarization)是一種基於分割的文字檢測演算法。將二值化閾值加入訓練中學習,可以獲得更準確的檢測邊界,從而簡化後處理流程。DB演算法最終在5個資料集上達到了state-of-art的效果和效能
image

CRNN(Convolutional Recurrent Neural Network)即卷積遞迴神經網路,是DCNN和RNN的組合,專門用於識別影像中的序列式物件。與CTC loss配合使用,進行文字識別,可以直接從文字詞級或行級的標註中學習,不需要詳細的字元級的標註

image

安裝庫

Building wheel for opencv-python (pyproject.toml):https://www.cnblogs.com/vipsoft/p/17386638.html

# 安裝 PaddlePaddle
python -m pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple

# 安裝 PaddleHub Mac 電腦上終端會感覺卡死的狀態,可以新增   --verbose,檢視進度
pip install paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple  --verbose

# 該Module依賴於第三方庫shapely、pyclipper,使用該Module之前,請先安裝shapely、pyclipper
pip install shapely -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pyclipper -i https://pypi.tuna.tsinghua.edu.cn/simple

定義待預測資料

將預測圖片存放在一個檔案中 picture.txt

./images/231242.jpg
./images/234730.jpg

測試輸出

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

# 將預測圖片存放在一個檔案中(picture.txt)
with open('picture.txt', 'r') as f:
    test_img_path=[]
    for line in f:
        test_img_path.append(line.strip())
        # 顯示圖片
        img1 = mpimg.imread(line.strip())
        plt.figure(figsize=(10, 10))
        plt.imshow(img1)
        plt.axis('off')
        plt.show()

print(test_img_path) # => ['images/231242.jpg', 'images/234730.jpg']

image

載入預訓練模型

PaddleHub提供了以下文字識別模型:

移動端的超輕量模型:僅有8.1M,chinese_ocr_db_crnn_mobile

伺服器端的精度更高模型:識別精度更高,chinese_ocr_db_crnn_server。

識別文字演算法均採用CRNN(Convolutional Recurrent Neural Network)即卷積遞迴神經網路。其是DCNN和RNN的組合,專門用於識別影像中的序列式物件。與CTC loss配合使用,進行文字識別,可以直接從文字詞級或行級的標註中學習,不需要詳細的字元級的標註。該Module支援直接預測。 移動端與伺服器端主要在於骨幹網路的差異性,移動端採用MobileNetV3,伺服器端採用ResNet50_vd

import paddlehub as hub

# 載入移動端預訓練模型
# ocr = hub.Module(name="chinese_ocr_db_crnn_mobile")

# 服務端可以載入大模型,效果更好
ocr = hub.Module(name="chinese_ocr_db_crnn_server")

image

預測

PaddleHub對於支援一鍵預測的module,可以呼叫module的相應預測API,完成預測功能。
module 'numpy' has no attribute 'int'.: 解方法見:https://www.cnblogs.com/vipsoft/p/17385169.html

import paddlehub as hub
import cv2

# 載入移動端預訓練模型
ocr = hub.Module(name="chinese_ocr_db_crnn_mobile")

# 服務端可以載入大模型,效果更好 -- 【個人電腦,記憶體不夠用】
# ocr = hub.Module(name="chinese_ocr_db_crnn_server")

# 將預測圖片存放在一個檔案中(picture.txt)
test_img_path = []
with open('picture.txt', 'r') as f:
    for line in f:
        test_img_path.append(line.strip())
print("預測圖片 => ", test_img_path)

# 讀取測試資料夾test.txt中的照片路徑
np_images = [cv2.imread(image_path) for image_path in test_img_path]

results = ocr.recognize_text(
    images=np_images,  # 圖片資料,ndarray.shape 為 [H, W, C],BGR格式;
    use_gpu=False,  # 是否使用 GPU;若使用GPU,請先設定CUDA_VISIBLE_DEVICES環境變數
    output_dir='ocr_result',  # 圖片的儲存路徑,預設設為 ocr_result;
    visualization=True,  # 是否將識別結果儲存為圖片檔案;
    box_thresh=0.5,  # 檢測文字框置信度的閾值;
    text_thresh=0.5)  # 識別中文文字置信度的閾值;

for result in results:
    data = result['data']
    save_path = result['save_path']
    for infomation in data:
        print('text: ', infomation['text'], '\nconfidence: ', infomation['confidence'], '\ntext_box_position: ', infomation['text_box_position'])

輸出

"D:\Program Files\Python38\python.exe" D:/OpenSource/PaddlePaddle/OCR/OCRTest.py
預測圖片 =>  ['./images/123.jpg']
text:  中華人民共和國 
confidence:  0.9990600347518921 
text_box_position:  [[188, 37], [472, 32], [472, 65], [188, 70]]
text:  居民身份證 
confidence:  0.9996429681777954 
text_box_position:  [[171, 96], [492, 96], [492, 140], [171, 140]]
text:  簽發機關 
confidence:  0.9993374347686768 
text_box_position:  [[140, 242], [217, 242], [217, 263], [140, 263]]
text:  蘇州市公安局工業園區分局 
confidence:  0.9997307658195496 
text_box_position:  [[233, 242], [473, 242], [473, 262], [233, 262]]
text:  有效期限 
![image](https://img2023.cnblogs.com/blog/80824/202305/80824-20230509152736239-145300739.png)

image

image

image

百度飛槳:https://aistudio.baidu.com/aistudio/projectdetail/507159

相關文章