PaddleOCR基于PaddleHub Serving的在线服务部署

官网参考文档

  • 安装python环境

使用paddlepaddle需要先安装python环境,可以通过anaconda一键安装python环境 anaconda下载地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=M&O=D

Q: 为啥用anaconda?

用 anaconda 新建一个虚拟环境(paddlepaddle 和 paddleocr 都有依赖库,以防与之前环境安装库的版本冲突)。

Linux下使用wget下载

wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.11-Linux-x86_64.sh

开始anaconda安装python环境

sh Anaconda3-2023.09-0-Linux-x86_64.sh

过程中会提示安装位置,yes选择默认,no需要自定义安装位置

手动将conda加入环境变量

vim ~/.bashrc
# 在第一行输入:
export PATH="~/anaconda3/bin:$PATH"
# 刷新环境变量
source ~/.bash_profile

验证是否能识别conda命令

conda info --envs

显示当前有base环境,则conda已加入环境变量

  • 创建conda环境

创建paddle_env的运行环境

# 此处为加速下载,使用清华源 
conda create --name paddle_env python=3.8 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

激活paddle_env环境

conda activate paddle_env

【注意】如果报以下错误就先执行conda init bash命令再重新激活paddle_env环境

  • 安装paddle

# 默认安装CPU版本 
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
  • 安装PaddleOCR whl包(好像不需要装,到时候再试一下)

pip install "paddleocr>=2.0.1"
  • 安装paddlehub

# paddlehub 需要 python>3.6.2 pip3 
install paddlehub==2.1.0 --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 安装第三方库

cd PaddleOCR 
pip3 install -r requirements.txt
  • 安装模型(需要什么模型下载什么即可)

# 进入PaddleOCR 
cd PaddleOCR 

# 创建inference目录 
mkdir inference 

# 下载 OCR 文本检测模型 
https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar 
# 解压 OCR 文本检测模型 
tar -xf ch_PP-OCRv3_det_infer.tar 

# 下载 OCR 文本识别模型 
https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar 
# 解压 OCR 文本识别模型 
tar -xf ch_PP-OCRv3_rec_infer.tar 

# 下载 方向分类器模型 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 

# 下载版面分析模型 https://paddleocr.bj.bcebos.com/ppstructure/models/layout/picodet_lcnet_x1_0_fgd_layout_infer.tar 
# 解压版面分析模型 tar -xvf picodet_lcnet_x1_0_fgd_layout_infer.tar 

# 下载表格结构识别模型 https://paddleocr.bj.bcebos.com/ppstructure/models/slanet/ch_ppstructure_mobile_v2.0_SLANet_infer.tar 
# 解压表格结构识别模型 
tar -xvf ch_ppstructure_mobile_v2.0_SLANet_infer.tar 

# 下载关键信息抽取SER模型 https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/ser_vi_layoutxlm_xfund_infer.tar 
# 解压关键信息抽取SER模型 tar -xvf ser_vi_layoutxlm_xfund_infer.tar 

# 下载关键信息抽取RE模型 https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/re_vi_layoutxlm_xfund_infer.tar 
# 解压关键信息抽取RE模型 
tar -xvf re_vi_layoutxlm_xfund_infer.tar

修改/home/PaddleOCR/deploy/hubserving/ocr_system/params.py文件

  • 安装服务模块

PaddleOCR提供5种服务模块,根据需要安装所需模块。我们只需装检测+识别串联服务ocr_system即可。

服务模块命令
检测hub install /home/PaddleOCR/deploy/hubserving/ocr_det
分类hub install /home/PaddleOCR/deploy/hubserving/ocr_cls
识别hub install /home/PaddleOCR/deploy/hubserving/ocr_rec
检测+识别串联hub install /home/PaddleOCR/deploy/hubserving/ocr_system
表格识别hub install /home/PaddleOCR/deploy/hubserving/structure_table
PP-Structurehub install /home/PaddleOCR/deploy/hubserving/structure_system
版面分析hub install /home/PaddleOCR/deploy/hubserving/structure_layout
关键信息抽取SERhub install /home/PaddleOCR/deploy/hubserving/kie_ser
关键信息抽取SER+REhub install /home/PaddleOCR/deploy/hubserving/kie_ser_re
  • 启动服务

# 方式一 启动服务 如果不加--port指定端口,默认端口就是8866 需要哪个模块,启动哪个就可以 
hub serving start -m ocr_system --port 8868 
hub serving start -m kie_ser --port 8871 
hub serving start -m kie_ser_re --port 8872 

# 方式二 后台启动命令 
# 检测+识别串联 
nohup hub serving start -m ocr_system --port 8868 & 
# 关键信息抽取
SER nohup hub serving start -m kie_ser --port 8871 & 
# 关键信息抽取SER+RE nohup hub serving start -m kie_ser_re --port 8872 & 

# 方式三 –use_multiprocess 代表启动多线程 –workers 代表线程数 一般为2*cpu-1 
nohup hub serving start -m ocr_system --use_multiprocess --workers=3 &
  • 测试

# 测试示例 
python /home/PaddleOCR/tools/test_hubserving.py --server_url=http://127.0.0.1:8868/predict/ocr_system --image_dir=/home/PaddleOCR/myimag/身份证竖排.jpg --visualize=false

需要给脚本传递2个参数:

server_url:服务地址,格式为http://[ip_address]:[port]/predict/[module_name]

例如,如果使用配置文件启动分类,检测、识别,检测+分类+识别3阶段,表格识别和PP-Structure服务

并为每个服务修改了port,那么发送请求的url将分别是:

http://127.0.0.1:8865/predict/ocr_det http://127.0.0.1:8866/predict/ocr_cls http://127.0.0.1:8867/predict/ocr_rec http://127.0.0.1:8868/predict/ocr_system http://127.0.0.1:8869/predict/structure_table http://127.0.0.1:8870/predict/structure_system http://127.0.0.1:8870/predict/structure_layout http://127.0.0.1:8871/predict/kie_ser http://127.0.0.1:8872/predict/kie_ser_re

image_dir:测试图像路径,可以是单张图片路径,也可以是图像集合目录路径

visualize:是否可视化结果,默认为False

output:可视化结果保存路径,默认为./hubserving_result

  • 关闭服务

# 指定服务端口关闭即可 
hub serving stop -p 8868 hub serving stop -p 8871
  • 报错

报错ImportError: libGL.so.1: cannot open shared object file: No such file or directory

# 下载mesa-libGL.x86_64 
yum install mesa-libGL.x86_64

报错ModuleNotFoundError: No module named 'ppocr'

# 把paddleocr下ppocr模块,复制到paddleocr同级目录 
cp -r /root/anaconda3/envs/paddle_env/lib/python3.8/site-packages/paddleocr/ppocr/ /root/anaconda3/envs/paddle_env/lib/python3.8/site-packages/

报错ModuleNotFoundError: No module named 'deploy'

# 把PaddleOCR下deploy模块,复制到python3.8/site-packages下 
cp -r /home/PaddleOCR/deploy/ /root/anaconda3/envs/paddle_env/lib/python3.8/site-packages

【注意】一定要是修改完param.py配置之后的deploy,涉及到params.py文件里模型参数的修改

报错ImportError: cannot import name 'RNNCell' from 'paddle.fluid.layers' (/root/anaconda3/envs/paddle_env/lib/python3.8/site-packages/paddle/fluid/layers/__init__.py)

paddle是2.5.1 gpu,Linux运行时cannot import name 'RNNCell' from 'paddle.fluid.layers',这是因为2.5.0后没有fluid了,这时不用降版本(因为我将版本后出现了另一个错误,这时只需要把/root/anaconda3/envs/paddle_env/lib/python3.8/site-packages/paddlehub/compat/task/text_generation_task.py这个文件

from 'paddle.fluid.layers import RNNCell 。。。换成from paddle.nn import RNNCellBase。。。对应其他同名的也做替换就可。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值