首页 > 其他分享 >PaddleOCR 服务化部署(基于PaddleHub Serving)

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

时间:2024-03-08 17:56:42浏览次数:26  
标签:Serving PaddleHub tar 服务化 PaddleOCR ch 版本 文本 安装

最近用到百度飞桨的 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问题参考文档

标签:Serving,PaddleHub,tar,服务化,PaddleOCR,ch,版本,文本,安装
From: https://www.cnblogs.com/barros/p/18061216

相关文章

  • paddlehub下载时onnx下载失败
    0前言我下载paddlehub的时候(pipinstallpaddlehub)遇到了这个问题。实际上pipinstallonnx=1.8.1的时候也会有这个问题。note:Thiserrororiginatesfromasubprocess,andislikelynotaproblemwithpipERROR:FailedbuildingwheelforonnxailedtobuildonnxIR......
  • tensorflow serving: REST request
    1.savetrainedmodel#inmodulefileoftfxcomponenttrainerdef_apply_preprocessing(raw_features,tft_layer):transformed_features=tft_layer(raw_features)if_LABEL_KEYinraw_features:transformed_label=transformed_features.pop(_......
  • OpenShift Knative Serving 配置服务(1)
    自动缩放Knative提供了基于Kubernetes的自动缩放功能,根据指标(如CPU利用率、内存使用量等)自动调整Pod的副本数,以实现弹性和高可用性。Knative的KnativeServing的组件,用于管理应用程序的生命周期,在KnativeServing中,可以配置自动缩放规则,以指定应用程序的缩放行为。通过配置自动......
  • 利用PaddleHub 进行人脸检测识别、并对图片进行抠图
    利用PaddleHub进行人脸检测识别、并对图片进行抠图 本文是利用百度的飞桨平台的paddle进行人脸的检测和抠图,但是里面也有一些小问题,特记录一下笔记,以便以后观看学习。环境:python3.9飞桨是2.5.2(截稿期是最新版)工具:PyCharm代码如下:#Thisisas......
  • 「智造」第10期:浅谈工业互联网加速企业服务化转型
    01价值引领在新型工业化和数智化技术发展趋势之下,柔性化生产、网络化协同、服务化延伸促使制造企业的生产方式发生转变,数据资产、平台技术、生态能力成为了重要的生产要素。目标都是要为企业实现价值提升、业务的增长和创新。无论是纵向的从采购、制造到营销的运营管理链路,还是横向......
  • Go - Serving Through HTTPS
    Problem: YouwanttoserveyourwebapplicationthroughHTTPS.Solution: Usethehttp.ListenAndServeTLSfunctiontoserveyourwebapplicationthroughHTTPS. HTTPSisnothingmorethanlayeringHTTPontopoftheTransportSecurityLayer(TLS).Thenet......
  • Go - Serving Static Files
    Problem: Youwanttoservestaticfilessuchasimages,CSS,andJavaScriptfiles.Solution: Usethehttp.FileServerfunctiontoservestaticfiles. funcmain(){dir:=http.Dir("./static")fs:=http.FileS......
  • knative serving 流量管理
    创建客户端#kubectlrunclient--image=ikubernetes/admin-box-it--rm--restart=Never--command-nknative-demo--/bin/bashroot@client/#创建应用hello-world-v1.yamlapiVersion:serving.knative.dev/v1kind:Servicemetadata:name:helloworld-gonames......
  • knative serving 域名映射
    创建应用hello-world.yamlapiVersion:serving.knative.dev/v1kind:Servicemetadata:name:helloworld-gonamespace:knative-demospec:template:spec:containers:-image:ghcr.dockerproxy.com/knative/helloworld-go:latestenv......
  • 运行 Knative Serving demo 应用
    创建ns#kubectlcreatensknative-demonamespace/knative-democreated创建应用hello-world.yamlapiVersion:serving.knative.dev/v1kind:Servicemetadata:name:helloworld-gonamespace:knative-demospec:template:spec:containers:......