最近用到百度飛槳的 PaddleOCR,研究了一下PaddleOCR的服務(wù)化部署,簡單記錄一些部署過程和碰到的問題。
基礎(chǔ)環(huán)境
- paddlepaddle 2.5.2
- python 3.7
- paddlehub 2.1.0
- PaddleOCR 2.6
- pip 20
#查看 python 版本
python --version
#查看pip版本
pip --version
#查看paddlepaddle版本
pip show paddlepaddle
部署過程中也嘗試多次,不同版本遇到的問題不盡相同,這里選取其中一組進(jìn)行部署說明
使用 docker部署paddlepaddle2.5.2
容器
-
PaddleOCR
依賴飛槳環(huán)境運(yùn)行,所以需要先安裝paddlepaddle
環(huán)境,默認(rèn)docker
已經(jīng)安裝,執(zhí)行腳本獲取paddlepaddle2.5.2
鏡像并自動創(chuàng)建名稱為ppocr
的容器,網(wǎng)絡(luò)順暢的話很快就可以下載完成,下載完成后執(zhí)行attach
命令就可以進(jìn)入容器繼續(xù)操作。官方paddlepaddle2.5.2容器內(nèi)python版本為3.7,pip版本為20,默認(rèn)即可。
參數(shù)說明# 下載并創(chuàng)建容器 docker run -p 9997:9997 --name ppocr -itd -v $PWD:/paddle registry.baidubce.com/paddlepaddle/paddle:2.5.2 /bin/bash # 進(jìn)入容器 docker attach ppocr
參數(shù) 說明 -p 指定 docker 映射的端口 -name 指定容器的名稱 -
docker
部分常用管理命令#查看容器情況 docker ps -a #停止容器 docker stop ppocr #啟動容器 docker start ppocr #查看所有鏡像 docker images
以下操作都在容器內(nèi)進(jìn)行
安裝paddlehub
- 進(jìn)入容器后執(zhí)行腳本安裝paddlehub,版本為2.1.0
pip3 install paddlehub==2.1.0 --upgrade -i https://mirror.baidu.com/pypi/simple
- 安裝過程中會提示
typing-extensions
版本過低,要求版本要大于4.6.1,卸載當(dāng)前版本安裝指定版本,安裝完成后再次執(zhí)行上述命令安裝paddlehub,安裝時(shí)間較長等待安裝完成接口。#卸載當(dāng)前包 pip uninstall typing-extensions #安裝4.6.1版本 pip3 install typing-extensions==4.6.1
安裝PaddleOCR 2.6.0
PaddleOCR 使用 2.6.0版本
- 首先從gitee獲取PaddleOCR代碼,PaddleOCR在gitee倉庫的最新版本為2.6.0,在 github倉庫的最新版本為2.7.1,2.7.1依賴 python 版本需要>=3.8,此處需要注意.
cd /home git clone https://gitee.com/paddlepaddle/PaddleOCR.git
- 代碼下載完成后進(jìn)入PaddleOCR文件夾內(nèi)執(zhí)行腳本安裝依賴包
cd /home/PaddleOCR #安裝依賴包 pip3 install -r requirements.txt -i https://mirror.baidu.com/pypi/simple
hubserving
服務(wù)配置
hubserving服務(wù)部署目錄下包括文本檢測、文本方向分類,文本識別、文本檢測+文本方向分類+文本識別3階段串聯(lián),版面分析、表格識別和PP-Structure七種服務(wù)包,可以按需安裝使用,使用前需要下載對應(yīng)模型并進(jìn)行配置,以下已文本檢測+文本方向分類+文本識別3階段串聯(lián)服務(wù)(ocr_system)和表格識別(structure_table)為例進(jìn)行說明。
-
文本檢測+文本方向分類+文本識別3階段串聯(lián)服務(wù)(ocr_system)配置
- 相關(guān)模型下載
cd /home/PaddleOCR mkdir inference && cd inference # 下載并解壓 OCR 文本檢測配置 wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/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 && tar -xf ch_PP-OCRv3_rec_infer.tar # 下載并解壓 OCR 文本方向分類模型 wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar && tar xf ch_ppocr_mobile_v2.0_cls_infer.tar
- 服務(wù)配置
文本檢測+文本方向分類+文本識別3階段串聯(lián)服務(wù)(ocr_system)配置文件是deploy/hubserving/ocr_system/params.py
,包含模型路徑和相關(guān)參數(shù),這里使用默認(rèn)配置即可,如果更換模型需要對應(yīng)修改配置文件。
- 相關(guān)模型下載
-
表格識別服務(wù)(structure_table)配置
- 下載中文表格識別模板
cd /home/PaddleOCR/inference #下載基于SLANet的中文表格識別模型 wget https://paddleocr.bj.bcebos.com/ppstructure/models/slanet/ch_ppstructure_mobile_v2.0_SLANet_infer.tar && tar xf ch_ppstructure_mobile_v2.0_SLANet_infer.tar
- 服務(wù)配置
structure_table
默認(rèn)配置為英文表格識別模型和英文字典,需要調(diào)整為中文識別模板和對應(yīng)的中文字典文件,修改完成保存即可。#打開配置文件 vim /home/PaddleOCR/deploy/hubserving/structure_table/param.py #調(diào)整模型文件路徑為./inference/ch_ppstructure_mobile_v2.0_SLANet_infer/ #調(diào)整字典文件路徑為./ppocr/utils/dict/table_structure_dict_ch.txt
- 下載中文表格識別模板
hubserving
服務(wù)安裝
- 服務(wù)配置完成就可以安裝服務(wù)了,后續(xù)如果服務(wù)相關(guān)配置存在變動需要重新執(zhí)行以下命令安裝服務(wù)
安裝完成cd /home/PaddleOCR #安裝ocr_system服務(wù) hub install deploy/hubserving/ocr_system #安裝structure_table服務(wù) hub install deploy/hubserving/structure_table
- 錯(cuò)誤1:服務(wù)安裝時(shí)會提示
protobuf
版本過高,可以卸載當(dāng)前版本安裝指定版本3.20.2即可pip uninstall protobuf pip install protobuf==3.20.2
- 錯(cuò)誤2:服務(wù)安裝時(shí)還會提示
cannot import name 'RNNCell' from 'paddle.fluid.layers'
這是因?yàn)閜addlepaddle2.5.0后沒有fluid了,需要修改paddlehub
安裝包中的/usr/local/lib/python3.7/dist-packages/paddlehub/compat/task/text_generation_task.py
文件,將文件中paddle.fluid.layers import RNNCell ...
換成from paddle.nn import RNNCellBase
,對應(yīng)變量引入也需要修改,修改如下
hubserving
服務(wù)啟動
#以后臺形式啟動ocr_system structure_table 服務(wù)
nohup hub serving start -m ocr_system structure_table -p 9997 &
#查看啟動日志
tail -f nohup.out
**參數(shù)說明**
| 參數(shù) | 說明 |
| ------------ | ------------ |
| -m | 指定啟動的服務(wù)名稱,多個(gè)用空格隔開 |
| -p | 指定服務(wù)端口 |
啟動成功
接口訪問路徑
-
ocr_system:
http://127.0.0.1:9997/predict/ocr_system -
structure_table:
http://127.0.0.1:9997/predict/structure_table
接口說明參數(shù) 說明 請求類型 post Content-Type application/json 參數(shù)格式 {"images":["圖片 base64串"]}
吐槽
最后忍不住吐槽一下,百度的文檔真的是一言難盡,要么是代碼已經(jīng)更新文檔還是幾年前的,要么是有文檔但寫的非常簡略,新手全靠自己踩坑,學(xué)習(xí)成本太高了!文章來源:http://www.zghlxwxcb.cn/news/detail-837697.html
相關(guān)參考文檔
官方PaddleHub Serving部署文檔
PP-Structure 系列模型列表
PP-OCR系列模型列表
解決RNNCell問題參考文檔文章來源地址http://www.zghlxwxcb.cn/news/detail-837697.html
到了這里,關(guān)于PaddleOCR 服務(wù)化部署(基于PaddleHub Serving)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!