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


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

    基础环境
    • 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 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 部分常用管理命令
      #查看容器情况
      docker ps -a
      #停止容器
      docker stop ppocr
      #启动容器
      docker start ppocr
      #查看所有镜像
      docker images

    以下操作都在容器内进行

    安装paddlehub

    • 进入容器后执行脚本安装paddlehub,版本为2.1.0
      pip3 install paddlehub==2.1.0 --upgrade -i https://mirror.baidu.com/pypi/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://mirror.baidu.com/pypi/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 9997 &
    #查看启动日志
    tail -f nohup.out
    **参数说明**
    | 参数 | 说明 |
    | ------------ | ------------ |
    | -m | 指定启动的服务名称,多个用空格隔开 |
    | -p | 指定服务端口 |

    启动成功
    image
    接口访问路径

    image
    image

    吐槽

    最后忍不住吐槽一下,百度的文档真的是一言难尽,要么是代码已经更新文档还是几年前的,要么是有文档但写的非常简略,新手全靠自己踩坑,学习成本太高了!


    相关参考文档

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

  • 相关阅读:
    (三十二)巧用CSS3之金粒摇
    2022.08.08_每日一题
    后台开发核心技术与应用实践看书笔记(二):面向对象的C++
    【活着活着就老了-冯唐】阅后
    各种业务场景调用API代理的API接口教程
    iPhone 可以DIY了?苹果推出自助维修计划
    Mac可以卸载掉系统自带的软件吗 Mac第三方软件无法卸载是为什么
    【CTF Web】CTFShow 数据库恶意下载 Writeup(目录扫描+mdb文件泄露+Access脱库)
    MySQL的常用函数
    架构师的 36 项修炼1 开篇词:7分钟Get技术人进阶技巧
  • 原文地址:https://www.cnblogs.com/barros/p/18061216