前言
之前我基于PaddleServing方式来做PaddleOCR的服务部署文档。
今天我开始看PP-Structure文档,官方文档对其的服务化部署方式是使用PaddleHub Serving的方式,该方式既能够发布PP-Structure相关的版面分析,表格识别,版面恢复,关键信息信息收取等能力,也支持发布PP-OCR相关的文本检测,文本识别,文本方向分类等能力,故这种部署方式更加通用。
安装环境
服务器Linux版本:CentOS 7.9 64位
服务器CPU&内存:2C4G
服务器公网IP:130.24.57.130
环境准备
首先Linux系统还是推荐使用docker环境来部署。
使用Docker部署的方式优点就是对应的软件版本都已经帮你安排好,无须再下载对应的环境软件,比如python就直接帮你下载好了,解决了软件版本匹配维护的问题。
对应的docker镜像选择可以到DockerHub获取与你机器适配的镜像。
由于我的机器是x86 64位,所以要选择没有gpu的最新版本
OK,然后我们登录到服务器上,下载对应的docker镜像。如果之前机器上没有安装docker可以首先安装下docker环境。
# 拉取镜像
docker pull paddlepaddle/paddle:2.4.1
# 创建一个名字为ppocr的docker容器,并将当前目录映射到容器的/paddle目录下
# 如果您希望在CPU环境下使用docker,使用docker而不是nvidia-docker创建docker
sudo docker run --name ppocr -v $PWD:/paddle --network=host -it paddlepaddle/paddle:2.4.1 /bin/bash
运行完后输入如下命令查看是否docker启动成功
docker ps -a
返回结果如下:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
09152a912a40 paddlepaddle/paddle:2.4.1 "/bin/bash" 20 hours ago Up 3 hours ppocr
STATUS下面是UP状态,即说明启动成功
docker启动成功后,我们就可以进入docker内部
sudo docker container exec -it ppocr /bin/bash
进入docker内部后,我们可以查看下python的版本号
可以看到Paddle的Docker环境默认是配置了3.7版本的Python。
随后就要进入docker内部,继续下载PaddleOCR的git代码到服务器本地
git clone https://github.com/PaddlePaddle/PaddleOCR
随后需要安装PaddleOCR依赖的库
cd PaddleOCR/
pip install -r requirements.txt --upgrade -i https://mirror.baidu.com/pypi/simple
随后需要安装paddlehub
# 安装paddlehub
# paddlehub 需要 python>3.6.2
pip3 install paddlehub==2.1.0 --upgrade -i https://mirror.baidu.com/pypi/simple
随后下载对应的推理模型到本地的PaddleOCR/inference文件夹下,所以首先需要创建inference文件夹
cd PaddleOCR
mkdir inference
cd inference/
这样就可以将所有推理模型下载到inference文件夹下面了。其中涉及到的推理模型可以在PP-OCR和PP-Structure直接下载。
文本检测模型
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar && tar -xf ch_PP-OCRv3_det_infer.tar && rm -rf ch_PP-OCRv3_det_infer.tar
文本识别模型
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar && tar -xf ch_PP-OCRv3_rec_infer.tar && rm -rf ch_PP-OCRv3_rec_infer.tar
文本方向分类器模型
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 && rm -rf ch_ppocr_mobile_v2.0_cls_infer.tar
版面分析模型
wget https://paddleocr.bj.bcebos.com/ppstructure/models/layout/picodet_lcnet_x1_0_fgd_layout_cdla_infer.tar && tar -xf picodet_lcnet_x1_0_fgd_layout_cdla_infer.tar && rm -rf picodet_lcnet_x1_0_fgd_layout_cdla_infer.tar
表格结构识别模型
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 && rm -rf ch_ppstructure_mobile_v2.0_SLANet_infer.tar
关键信息抽取SER模型
wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/ser_vi_layoutxlm_xfund_infer.tar && tar -xf ser_vi_layoutxlm_xfund_infer.tar && rm -rf ser_vi_layoutxlm_xfund_infer.tar
关键信息抽取RE模型
wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/re_vi_layoutxlm_xfund_infer.tar && tar -xf re_vi_layoutxlm_xfund_infer.tar && rm -rf re_vi_layoutxlm_xfund_infer.tar
最后安装对应的服务模块。
# 先回到PaddleOCR的根目录
cd PaddleOCR/
# 安装检测服务模块:
hub install deploy/hubserving/ocr_det/
# 或,安装分类服务模块:
hub install deploy/hubserving/ocr_cls/
# 或,安装识别服务模块:
hub install deploy/hubserving/ocr_rec/
# 或,安装检测+识别串联服务模块:
hub install deploy/hubserving/ocr_system/
# 或,安装表格识别服务模块:
hub install deploy/hubserving/structure_table/
# 或,安装PP-Structure服务模块:
hub install deploy/hubserving/structure_system/
# 或,安装版面分析服务模块:
hub install deploy/hubserving/structure_layout/
# 或,安装关键信息抽取SER服务模块:
hub install deploy/hubserving/kie_ser/
# 或,安装关键信息抽取SER+RE服务模块:
hub install deploy/hubserving/kie_ser_re/
安装成功如下:
启动服务
命令行命令启动(仅支持CPU)
启动命令:(由于服务器配置较低,单进程方式启动)
cd PaddleOCR/
hub serving start --modules ocr_system
这样就完成了一个服务化API的部署,使用默认端口号8866。
服务端发布成功后,可以在本机输入如下命令,确认端口是否发布成功
netstat -ntulp
看到上面端口发布,即表示服务端发布成功!!!
当需要发布 kie_ser 和 kie_ser_re等PP-structure相关服务时候,需要提前将XFUND数据集下载到服务器本地,要不会在部署的时候报如下错误
##### 下载XFUND数据集 ############
cd PaddleOCR/
mkdir train_data
cd train_data
# 下载与解压数据
wget https://paddleocr.bj.bcebos.com/ppstructure/dataset/XFUND.tar && tar -xf XFUND.tar
发布kie_ser服务
cd PaddleOCR/
hub serving start --modules ocr_system
上图说明发布服务成功了。
在发布kie_ser_re服务的时候,貌似非常吃内存,由于我的服务器配置较低,在分配内存失败了,没有起来,查资料貌似至少需要8G以上。
客户端发送预测请求
在本地机器上下载PaddleOCR的代码
git clone https://github.com/PaddlePaddle/PaddleOCR
# 进入到工作目录
cd PaddleOCR/
# 客户端测试脚本命令:
python tools/test_hubserving.py --server_url=http://130.24.57.130:8866/predict/kie_ser --image_dir=doc/imgs/00006737.jpg
客户端测试成功