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

最近用到百度飞桨的 PaddleOCR,研究了一下PaddleOCR的服务化部署,简单记录一些部署过程和碰到的问题。

基础环境
  • paddlepaddle 2.5.2
  • python 3.7
  • paddlehub 2.1.0
  • PaddleOCR 2.6
  • pip 20
BASH 复制代码
#查看 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,默认即可。

    BASH 复制代码
    # 下载并创建容器
    docker run -p 9997:9997 --name ppocr -itd -v $PWD:/paddle registry.baidubce.com/paddlepaddle/paddle:2.5.2 /bin/bash
    
    # 进入容器
    docker attach ppocr

    参数说明

    参数 说明
    -p 指定 docker 映射的端口
    -name 指定容器的名称
  • docker 部分常用管理命令

    BASH 复制代码
    #查看容器情况
    docker ps -a
    
    #停止容器
    docker stop ppocr
    
    #启动容器
    docker  start ppocr
    
    #查看所有镜像
    docker  images

以下操作都在容器内进行

安装paddlehub

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

    BASH 复制代码
    pip3 install paddlehub==2.1.0 --upgrade -i https://mirror.baidu.com/pypi/simple
  • 安装过程中会提示typing-extensions版本过低,要求版本要大于4.6.1,卸载当前版本安装指定版本,安装完成后再次执行上述命令安装paddlehub,安装时间较长等待安装完成接口。

    BASH 复制代码
    #卸载当前包
    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,此处需要注意.

    BASH 复制代码
    cd /home
    git clone https://gitee.com/paddlepaddle/PaddleOCR.git
  • 代码下载完成后进入PaddleOCR文件夹内执行脚本安装依赖包

    BASH 复制代码
    cd /home/PaddleOCR
    #安装依赖包
    pip3 install -r requirements.txt -i https://mirror.baidu.com/pypi/simple

hubserving服务配置

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

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

    • 相关模型下载

      BASH 复制代码
      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,包含模型路径和相关参数,这里使用默认配置即可,如果更换模型需要对应修改配置文件。

  • 表格识别服务(structure_table)配置

    • 下载中文表格识别模板

      BASH 复制代码
      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默认配置为英文表格识别模型和英文字典,需要调整为中文识别模板和对应的中文字典文件,修改完成保存即可。

      BASH 复制代码
      #打开配置文件
      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

hubserving服务安装

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

    BASH 复制代码
    cd /home/PaddleOCR
    
    #安装ocr_system服务
    hub install deploy/hubserving/ocr_system
    
    #安装structure_table服务
    hub install deploy/hubserving/structure_table

    安装完成

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

    BASH 复制代码
    pip uninstall protobuf
    pip install protobuf==3.20.2
  • 错误2:服务安装时还会提示cannot import name 'RNNCell' from 'paddle.fluid.layers'

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

hubserving服务启动

BASH 复制代码
#以后台形式启动ocr_system structure_table 服务
nohup hub serving start -m ocr_system structure_table -p 9997 &

#查看启动日志
tail -f nohup.out
**参数说明**
|  参数 |  说明 |
| ------------ | ------------ |
|  -m | 指定启动的服务名称,多个用空格隔开 |
|  -p | 指定服务端口  |

启动成功

接口访问路径



相关参考文档

官方PaddleHub Serving部署文档
PP-Structure 系列模型列表
PP-OCR系列模型列表
解决RNNCell问题参考文档

相关推荐
qq_529025291 小时前
Torch.gather
python·深度学习·机器学习
IT古董1 小时前
【漫话机器学习系列】017.大O算法(Big-O Notation)
人工智能·机器学习
海棠AI实验室2 小时前
AI的进阶之路:从机器学习到深度学习的演变(三)
人工智能·深度学习·机器学习
古希腊掌管学习的神3 小时前
[搜广推]王树森推荐系统——矩阵补充&最近邻查找
python·算法·机器学习·矩阵
martian6653 小时前
【人工智能数学基础篇】——深入详解多变量微积分:在机器学习模型中优化损失函数时应用
人工智能·机器学习·微积分·数学基础
人机与认知实验室4 小时前
人、机、环境中各有其神经网络系统
人工智能·深度学习·神经网络·机器学习
古希腊掌管学习的神8 小时前
[机器学习]XGBoost(3)——确定树的结构
人工智能·机器学习
没了对象省了流量ii9 小时前
本地高精度OCR!由GPT-4o-mini驱动的开源OCR!
ocr
海棠AI实验室11 小时前
AI的进阶之路:从机器学习到深度学习的演变(一)
人工智能·深度学习·机器学习