PaddleOCR 服务化部署(基于PaddleHub Serving)

基础环境

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

部署过程中也尝试多次,不同版本遇到的问题不尽相同,这里选取其中一组进行部署说明


使用 docker部署paddlepaddle2.5.2容器

PaddleOCR 依赖飞桨环境运行,所以需要先安装paddlepaddle环境,默认 docker 已经安装,执行脚本获取paddlepaddle2.5.2 镜像并自动创建名称为 ppocr的容器,网络顺畅的话很快就可以下载完成,下载完成后执行attach命令就可以进入容器继续操作。

官方paddlepaddle2.5.2容器内python版本为3.7,pip版本为20,默认即可。


# 下载并创建容器

docker run -p 8866:8866 --name ppocr -itd -v $PWD:/paddle registry.baidubce.com/paddlepaddle/paddle:2.5.2 /bin/bash


# 进入容器

docker attach ppocr

参数说明

参数 说明

-p 指定 docker 映射的端口

-name 指定容器的名称

docker 部分常用管理命令

#查看容器情况

docker ps -a


#停止容器

docker stop ppocr


#启动容器

docker  start ppocr


#查看所有镜像

docker  images

以下操作都在容器内进行

安装paddlehub

进入容器后执行脚本安装paddlehub,版本为2.1.0

pip3 install paddlehub -i https://pypi.doubanio.com/simple

安装过程中会提示typing-extensions版本过低,要求版本要大于4.6.1,卸载当前版本安装指定版本,安装完成后再次执行上述命令安装paddlehub,安装时间较长等待安装完成接口。

image

#卸载当前包

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

代码下载完成后进入PaddleOCR文件夹内执行脚本安装依赖包

cd /home/PaddleOCR

#安装依赖包

pip3 install -r requirements.txt -i https://pypi.doubanio.com/simple

hubserving服务配置

hubserving服务部署目录下包括文本检测、文本方向分类,文本识别、文本检测+文本方向分类+文本识别3阶段串联,版面分析、表格识别和PP-Structure七种服务包,可以按需安装使用,使用前需要下载对应模型并进行配置,以下已文本检测+文本方向分类+文本识别3阶段串联服务(ocr_system)和表格识别(structure_table)为例进行说明。


文本检测+文本方向分类+文本识别3阶段串联服务(ocr_system)配置


相关模型下载

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

服务配置

文本检测+文本方向分类+文本识别3阶段串联服务(ocr_system)配置文件是deploy/hubserving/ocr_system/params.py,包含模型路径和相关参数,这里使用默认配置即可,如果更换模型需要对应修改配置文件。

image

表格识别服务(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

服务配置

structure_table默认配置为英文表格识别模型和英文字典,需要调整为中文识别模板和对应的中文字典文件,修改完成保存即可。

#打开配置文件

vim /home/PaddleOCR/deploy/hubserving/structure_table/param.py

#调整模型文件路径为./inference/ch_ppstructure_mobile_v2.0_SLANet_infer/

#调整字典文件路径为./ppocr/utils/dict/table_structure_dict_ch.txt

image


hubserving服务安装

服务配置完成就可以安装服务了,后续如果服务相关配置存在变动需要重新执行以下命令安装服务

cd /home/PaddleOCR


#安装ocr_system服务

hub install deploy/hubserving/ocr_system


#安装structure_table服务

hub install deploy/hubserving/structure_table

安装完成

image

错误1:服务安装时会提示protobuf版本过高,可以卸载当前版本安装指定版本3.20.2即可

pip uninstall protobuf

pip install protobuf==3.20.2

image

错误2:服务安装时还会提示cannot import name 'RNNCell' from 'paddle.fluid.layers'

image

这是因为paddlepaddle2.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,对应变量引入也需要修改,修改如下

image

hubserving服务启动

#以后台形式启动ocr_system structure_table 服务

nohup hub serving start -m ocr_system structure_table -p 8866 &


#查看启动日志

tail -f nohup.out

**参数说明**

|  参数 |  说明 |

| ------------ | ------------ |

|  -m | 指定启动的服务名称,多个用空格隔开 |

|  -p | 指定服务端口  |

启动成功

image

接口访问路径


ocr_system: http://127.0.0.1:8866/predict/ocr_system

structure_table: http://127.0.0.1:8866/predict/structure_table

接口说明

参数 说明

请求类型 post

Content-Type application/json

参数格式 {"images":["图片 base64串"]}