基于 CPU 在docker 中部署PaddleOCR

2023-09-18 20:22:20

1. 拉取镜像

docker pull registry.baidubce.com/paddlepaddle/paddle:2.4.0

注:写该文章时,Paddle 最新版本为2.5.1,但是在实际安装中会出现与 PaddleHub 2.3.1版本的冲突,故采用2.4.0版本

2. 构建并进入容器

docker run --name paddle_docker -it registry.baidubce.com/paddlepaddle/paddle:2.4.0 /bin/bash

3. 安装paddlehub

pip install paddlehub==2.3.1

4. 下载paddleocr项目文件

git clone https://github.com/PaddlePaddle/PaddleOCR.git /PaddleOCR

5. 安装项目所需包

pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple

注:
如果是拉取的最新版的PaddleOCR代码(写该文章时最新版未release-2.7),pillow可能会安装不成功,10.0.0版本需要python 3.8+以上版本,经过测试安装pillow=9.5.0亦可

6. 下载并解压模型文件

mkdir -p /PaddleOCR/inference/

# 下载文本检测模型
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar -P /PaddleOCR/inference/
tar xf /PaddleOCR/inference/ch_PP-OCRv3_det_infer.tar -C /PaddleOCR/inference/

# 下载文本识别模型
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar -P /PaddleOCR/inference/
tar xf /PaddleOCR/inference/ch_PP-OCRv3_rec_infer.tar -C /PaddleOCR/inference/

 # 下载方向检测模型
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar -P /PaddleOCR/inference/
tar xf /PaddleOCR/inference/ch_ppocr_mobile_v2.0_cls_infer.tar -C /PaddleOCR/inference/

7. 安装OCR模块

hub install deploy/hubserving/ocr_system/

在这里插入图片描述

8. 启动服务

hub serving start --modules [Module1==Version1, Module2==Version2, ...] \
                    --port XXXX \
                    --use_multiprocess \
                    --workers \
参数用途
–modules/-mPaddleHub Serving预安装模型,以多个Module==Version键值对的形式列出,当不指定Version,默认选择最新版本
–port/-p服务端口,默认为8866
–use_multiprocess是否启用并发方式,默认为单进程方式,推荐多核CPU机器使用此方式,Windows操作系统只支持单进程模式
–workers在并发方式下指定的并发任务数,默认为2*cpu_count-1,其中cpu_count为CPU核数
配置文件启动(支持CPU、GPU)
hub serving start -c config.json
其中,config.json格式如下:
{
    "modules_info": {
        "ocr_system": {
            "init_args": {
                "version": "1.0.0",
                "use_gpu": true
            },
            "predict_args": {
            }
        }
    },
    "port": 8868,
    "use_multiprocess": false,
    "workers": 2
}
  • init_args中的可配参数与module.py中的_initialize函数接口一致。其中,当use_gpu为true时,表示使用GPU启动服务。
  • predict_args中的可配参数与module.py中的predict函数接口一致。

注意:

  • 使用配置文件启动服务时,其他参数会被忽略。
  • 如果使用GPU预测(即,use_gpu置为true),则需要在启动服务之前,设置CUDA_VISIBLE_DEVICES环境变量,如:export CUDA_VISIBLE_DEVICES=0,否则不用设置。
  • use_gpu不可与use_multiprocess同时为true
    在这里插入图片描述

9. 参考意见

  1. 可直接通过官方提供的Dockerfile文件部署,但是官方文件没有考虑版本问题,所以直接安装过程中可能出现各种包冲突问题。
    地址:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/deploy/docker/hubserving/cpu/Dockerfile
  2. 该部署方式默认不启用cpu加速,如果需要开启cpu加速可以去如下文件中(https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/deploy/hubserving/ocr_det/module.py)中修改enable_mkldnn参数未True,截止文章发布日期,pp-ocr-v4不支持该参数
  3. 不推荐使用默认workers,调用量较大情况下,速度会很慢,尤其在开启CPU加速情况下,cpu资源耗费会更大,请合理分配workers。
  4. worker挂掉会自动重启,内存不够会报内存溢出error

参考文件:
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/deploy/hubserving/readme.md

更多推荐

Gavin Wood 演讲全文:建设更具韧性以应变化的 Polkadot

我们非常激动能邀请到GavinWood博士来现场分享关于Polkadot的近况以及最新的进展,带来他对于《加密项目应该怎样应对当今世界的变化》的演讲分享。🚩点击视频链接观看演讲实录:https://www.youtube.com/watch?v=Yw3mQNJ5UJQ&t=1048s以下是演讲回顾:世界正改变,看到W

文举论金:黄金原油全面走势分析策略指导。

市场没有绝对,涨跌没有定势,所以,对市场行情的涨跌平衡判断就是你的制胜法宝。欲望!有句意大利谚语:让金钱成为我们忠心耿耿的仆人,否则,它就会成为一个专横跋扈的主人。空头,多头都能赚钱,唯有贪心不能赚。是你掌控欲望还是欲望掌控你?古人云:不积硅步无以至千里,不积小流无以成江海。希望这句话成为我们之间的共勉。自知!人贵自知

【HTTPS】运营商劫持、中间人攻击 与 加密

运营商劫持、中间人攻击与加密一.HTTPS是什么二.臭名昭著的"运营商劫持"三.加密1."加密"是什么2.HTTPS的工作过程3.对称加密4.非对称加密四.中间人攻击五.证书证书校验证书篡改六.完整流程一.HTTPS是什么HTTPS也是一个应用层协议.是在HTTP协议的基础上引入了一个加密层.HTTP协议内容都是按照文

C++基础第一章:头文件,输入符,输出符,控制符,换行符

第一章C++基础头文件1:头文件1.0:头文件:其中有带h和没有带h后缀的,带h后缀的是老版本的编译器,没带是新版本的编译器。#include<limits.h>#最大最小要导入这个#include<ctype.h>#字符处理函数功能#define_CRT_SECURE_NO_WARNINGS#include<iost

.NET中使用Quartz

Quartz是一个流行的开源任务调度库,它提供了强大的任务调度功能,可以方便地与.NET应用程序集成。Quartz.NET是Quartz的.NET版本,它是为.NET框架编写的,并提供了与.NET应用程序的集成。它支持各种调度策略,包括定时、间隔、日历等,可以灵活地配置和管理任务。Quartz.NET具有以下特点:开源

CodeTON Round 6 (Div 1 + Div 2, Rated, Prizes!)

CodeTONRound6(Div.1+Div.2,Rated,Prizes!)(A-E)CodeTONRound6(Div.1+Div.2,Rated,Prizes!)A.MEXanizedArray(分类讨论)可以发现当n<k或者k>x+1的时候无法构成,其余的时候贪心的用x最大化贡献即可,注意特判k==x的情况。

Go业务开发常用关注点

本文对实际开发场景中面对高频的场景,总结出来的一些处理方案,希望能对业务开发的同学提供帮助!结构体转换实际开发中会面对一个相似的数据结构,由于引用不同的包,需要开发转换到对应的结构上,本质上这些数据结构是一致的,但是所在包不同所以不能直接赋值。常规的方案大致分为下面几种:直接转换struct这种适合结构完全一致的情况,

墨天轮专访星环科技刘熙:“向量热”背后的冷思考,Hippo如何打造“先发”优势?

导读:深耕技术研发数十载,坚持自主可控发展路。星环科技一路砥砺前行、坚持创新为先,建设了全面的产品矩阵,并于2022年作为首个独立基础软件产品公司成功上市。星环科技在今年的向星力•未来技术大会上发布了分布式向量数据库TranswarpHippo以及两款领域大模型“无涯”和“求索”。关于星环科技在向量数据库领域的建树和背

MES管理系统对印刷企业来说有什么优点

在当今高度信息化的时代,许多企业,包括印刷企业,正在寻求更有效地管理其生产过程和运营的方式。在这种情况下,印刷企业MES管理系统成为了他们的首选。印刷企业MES系统在提升企业运营效率、优化生产过程、提升产品质量以及加强供应链管理等方面具有显著的优势。本文将详细探讨MES管理系统对印刷企业的优点。一、提升生产效率对于印刷

【UE 粒子练习】07——创建动画拖尾类型粒子

效果步骤1.将动画序列“Idle_ModifyBones”添加到场景中2.新建一个材质,命名为“Mat_AnimTrails”材质混合模式设置为半透明,着色模型设置为无光照,设置材质为双面材质节点如下3.新建一个粒子系统,命名为“P_AnimTrail”打开“P_AnimTrail”,添加模块“类型数据-》新建动画拖尾

【深度学习】 Python 和 NumPy 系列教程(十七):Matplotlib详解:2、3d绘图类型(3)3D条形图(3D Bar Plot)

目录一、前言二、实验环境三、Matplotlib详解1、2d绘图类型2、3d绘图类型0.设置中文字体1.线框图2.3D散点图3.3D条形图(3DBarPlot)一、前言Python是一种高级编程语言,由GuidovanRossum于1991年创建。它以简洁、易读的语法而闻名,并且具有强大的功能和广泛的应用领域。Pyth

热文推荐