百度飛槳(PaddlePaddle)

2023-06-01 15:00:16

百度飛槳(PaddlePaddle) - PP-OCRv3 文字檢測識別系統 預測部署簡介與總覽
百度飛槳(PaddlePaddle) - PP-OCRv3 文字檢測識別系統 Paddle Inference 模型推理(離線部署)
百度飛槳(PaddlePaddle) - PP-OCRv3 文字檢測識別系統 基於 Paddle Serving快速使用(服務化部署 - CentOS)
百度飛槳(PaddlePaddle) - PP-OCRv3 文字檢測識別系統 基於 Paddle Serving快速使用(服務化部署 - Docker)推薦

檢視版本 沒找到本文安裝的版本,可以跳過此步驟
https://hub.docker.com/r/paddlepaddle/paddle/tags/?page=1&name=cpu

安裝

虛機設定:CentOS 7 、 記憶體:12G、CPU:4核
映象中整合好了 Python 3.7.12 比較方便

Docker 安裝

# 切換進 opt/ppocr 目錄,後面 $PWD 掛載時會用到當前的路徑
[root@localhost ~]# cd /opt/ppocr/
[root@localhost ppocr]# pwd
/opt/ppocr
[root@localhost ppocr]# 

# 獲取映象 -- 沒有GPU環境,使用CPU跑了玩玩
[root@localhost ppocr]# docker pull registry.baidubce.com/paddlepaddle/paddle:2.2.2
# 建立一個名字為ppocr的docker容器,並將當前目錄對映到容器的/paddle目錄下
[root@localhost ppocr]# docker run --name ppocr -v $PWD:/paddle --network=host -it registry.baidubce.com/paddlepaddle/paddle:2.2.2 /bin/bash
# --name ppocr:設定 Docker 的名稱,ppocr 是自己設定的名稱;
# -it:引數說明容器已和本機互動式執行;
# -v $PWD:/paddle:指定將當前路徑(PWD 變數會展開為當前路徑的絕對路徑--Linux宿主機的路徑,所以執行命令的路徑要選好)掛載到容器內部的 /paddle 目錄;(相當於 /opt/ppocr 掛載到容器內)
# registry.baidubce.com/paddlepaddle/paddle:2.2.2:指定需要使用的 image 名稱,您可以通過docker images命令檢視;/bin/bash 是在 Docker 中要執行的命令

# ctrl+P+Q可退出docker 容器,重新進入docker 容器使用如下命令
[root@localhost ppocr]# docker exec -it ppocr /bin/bash
λ localhost /home

[root@localhost 開頭的都是在Linux 伺服器上執行
以下命令都是在容器中執行,防止混淆,下面命令省掉了 λ localhost /home

PaddleOCR 安裝

# 升級 pip 
pip install -U pip
# 容器中已經包含了 paddlepaddle 2.2.2
pip list
# 拉取 PaddleOCR 程式碼
git clone https://gitee.com/paddlepaddle/PaddleOCR.git
# 切換進入 PaddleOCR 目錄
cd PaddleOCR
# 安裝執行所需要的whl包
pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple

準備PaddleServing的執行環境,

# 安裝serving,用於啟動服務
wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_server-0.8.3-py3-none-any.whl
pip install paddle_serving_server-0.8.3-py3-none-any.whl -i https://pypi.tuna.tsinghua.edu.cn/simple

# 安裝client,用於向服務傳送請求
wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_client-0.8.3-cp37-none-any.whl
pip install paddle_serving_client-0.8.3-cp37-none-any.whl -i https://pypi.tuna.tsinghua.edu.cn/simple

# 安裝serving-app
wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_app-0.8.3-py3-none-any.whl
pip install paddle_serving_app-0.8.3-py3-none-any.whl -i https://pypi.tuna.tsinghua.edu.cn/simple

模型轉換

首先,下載PP-OCR的inference模型

cd deploy/pdserving/ 
# 下載並解壓 OCR 文字檢測模型
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar -O ch_PP-OCRv3_det_infer.tar && tar -xf ch_PP-OCRv3_det_infer.tar
# 下載並解壓 OCR 文字識別模型
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar -O ch_PP-OCRv3_rec_infer.tar &&  tar -xf ch_PP-OCRv3_rec_infer.tar

# 用安裝的paddle_serving_client把下載的inference模型轉換成易於server部署的模型格式。
# 轉換檢測模型
python -m paddle_serving_client.convert --dirname ./ch_PP-OCRv3_det_infer/ \
                                         --model_filename inference.pdmodel          \
                                         --params_filename inference.pdiparams       \
                                         --serving_server ./ppocr_det_v3_serving/ \
                                         --serving_client ./ppocr_det_v3_client/
# 轉換識別模型
python -m paddle_serving_client.convert --dirname ./ch_PP-OCRv3_rec_infer/ \
                                         --model_filename inference.pdmodel          \
                                         --params_filename inference.pdiparams       \
                                         --serving_server ./ppocr_rec_v3_serving/  \
                                         --serving_client ./ppocr_rec_v3_client/
# 檢視資料夾
ll ppocr_det_v3_client ppocr_det_v3_serving ppocr_rec_v3_serving ppocr_rec_v3_client

Paddle Serving pipeline部署

啟動服務,測試時使用,視窗關閉服務停止
python web_service.py --config=config.yml

# 啟動服務(後臺執行),執行紀錄檔儲存在log.txt
nohup python web_service.py --config=config.yml &>log.txt &
tail -f ./log.txt

重啟

# 如果容器停止,重啟容器
docker restart ppocr
# 進入容器
docker exec -it ppocr /bin/bash
# 切換目錄
cd PaddleOCR/deploy/pdserving/
# 啟動服務
python web_service.py --config=config.yml

測試

Python 讀取圖片 轉 base64 並生成 JSON

import json
import base64

img_path = r'D:\OpenSource\PaddleOCR-release-2.6\doc\imgs\00006737.jpg';
with open(img_path, 'rb') as file:
    image_data1 = file.read()
image = base64.b64encode(image_data1).decode('utf8')
data = {"key": ["image"], "value": [image]}
# 轉成 json 字串
json_str = json.dumps(data)
print(json_str)

格式如下:

{"key": ["image"], "value": ["image base64"]}

將生成的 json - 圖片base64,複製到 Postman 中執行如下

參考 :
https://www.paddlepaddle.org.cn/documentation/docs/zh/install/docker/linux-docker.html
https://www.paddlepaddle.org.cn/tutorials/projectdetail/3946013
https://gitee.com/paddlepaddle/PaddleOCR/blob/release/2.6/doc/doc_ch/installation.md
https://gitee.com/paddlepaddle/PaddleOCR/blob/release/2.6/deploy/pdserving/README_CN.md