PaddleOCR使用docker安装部署,离线制作镜像,本地化http接口调用

PaddleOCR使用docker安装部署,CPU使用方式,本地化http接口调用

首先看下最终实现的效果,实现三方接口直接调用
在这里插入图片描述

一、搭建docker

1、Linux服务器搭建docker环境

参考方案:本地部署docker

2、windows机器安装docker desktop

直接下载安装,重点是更新wsl2

二、使用官方 Docker 镜像安装

1.制作paddleOCR基础镜像

1.1 拉取Ubuntu镜像:
docker pull ubuntu:22.04
docker run -it --name=myUbuntu -d ubuntu:22.04

在这里插入图片描述

1.2 进入容器
docker exec -it myUbuntu /bin/bash
1.3 开始安装依赖
# 安装依赖
apt-get update && apt-get install -y --no-install-recommends python3.10 python3-pip git wget  unzip  && apt-get clean all  && rm -rf /var/lib/apt/lists/*
 
# 安装vi
apt-get update && apt-get install -y --no-install-recommends \
    vim && apt-get clean all  && \
    rm -rf /var/lib/apt/lists/*
 
# 安装gcc 和 g++ 11.4.0
apt-get update && apt-get install -y --no-install-recommends \
    gcc-11 g++-11 && apt-get clean all  && \
    rm -rf /var/lib/apt/lists/*
 
# 为 gcc-11 和 g++-11 建立软连接
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100 && \
    update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100
 
# 安装paddlehub 使用清华镜像https://pypi.tuna.tsinghua.edu.cn/simple
pip3.10 install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple && \
pip3.10 install paddlehub --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple
 
# 下载PaddleOCR
wget https://github.com/PaddlePaddle/PaddleOCR/archive/refs/tags/v2.7.5.tar.gz && \
    tar -zxvf v2.7.5.tar.gz && \
    mv PaddleOCR-2.7.5 PaddleOCR \
    && rm -rf v2.7.5.tar.gz \
    && cd PaddleOCR \
    && pip3.10 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple \
    && mkdir -p /PaddleOCR/inference/ \
    && wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar && \
    tar xf ch_ppocr_mobile_v2.0_det_infer.tar -C /PaddleOCR/inference/ && \
    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 -C /PaddleOCR/inference/ && \
    wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar && \
    tar xf ch_ppocr_mobile_v2.0_rec_infer.tar -C /PaddleOCR/inference/ \
    && rm -rf ch_ppocr_mobile_v2.0_det_infer.tar \
    && rm -rf ch_ppocr_mobile_v2.0_cls_infer.tar \
    && rm -rf ch_ppocr_mobile_v2.0_rec_infer.tar
 
# 安装paddleocr 2.7.5 使用清华镜像https://pypi.tuna.tsinghua.edu.cn/simple
pip3.10 install -i https://pypi.tuna.tsinghua.edu.cn/simple paddleocr==2.7.5
 
# 安装paddlepaddle 2.5.2 使用清华镜像https://pypi.tuna.tsinghua.edu.cn/simple
pip3.10 install -i https://pypi.tuna.tsinghua.edu.cn/simple paddlepaddle==2.5.2
 
# 安装paddleclas 使用清华镜像https://pypi.tuna.tsinghua.edu.cn/simple
pip3.10 install  -i https://pypi.tuna.tsinghua.edu.cn/simple paddleclas==2.5.2
 
# 安装 opencv-python 使用清华镜像https://pypi.tuna.tsinghua.edu.cn/simple
pip3.10 install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python==4.6.0.66
 
1.4 测试是否下载完成
paddleocr --image_dir=ppstructure/docs/table/table.jpg --type=structure --layout=false

如果报错

Traceback (most recent call last):
  File "/usr/local/bin/paddleocr", line 5, in <module>
    from paddleocr.paddleocr import main
  File "/usr/local/lib/python3.10/dist-packages/paddleocr/__init__.py", line 14, in <module>
    from .paddleocr import *
  File "/usr/local/lib/python3.10/dist-packages/paddleocr/paddleocr.py", line 575, in <module>
    class PaddleOCR(predict_system.TextSystem):
NameError: name 'predict_system' is not defined

修改:/usr/local/lib/python3.10/dist-packages/paddleocr/目录下的文件paddleocr.py
在开始引入包predict_system,引入:

from tools.infer import predict_system

引入位置
再次执行:上面命令,成功如下:
在这里插入图片描述

1.5 制作paddlehub基础镜像

退出容器
在这里插入图片描述
提交成基础镜像

docker commit myUbuntu paddle-ocr:base

在这里插入图片描述
在这里插入图片描述

2. 制作paddlehub基础镜像

2.1 首先进入上面的基础镜像
# 启动paddle-ocr容器
docker run -it --name=ocr -d paddle-ocr:base /bin/bash
 
#然后进入容器
docker exec -it ocr /bin/bash
2.2 安装表格模型

修改相关配置

cd /PaddleOCR/deploy/hubserving/structure_table
vim params.py

在这里插入图片描述
修改内容:table_model_dir 和table_char_dict_path

#cfg.table_model_dir = './inference/en_ppocr_mobile_v2.0_table_structure_infer/'
cfg.table_model_dir = './inference/ch_ppstructure_mobile_v2.0_SLANet_infer/'
#cfg.table_char_dict_path = './ppocr/utils/dict/table_structure_dict.txt'
cfg.table_char_dict_path = './ppocr/utils/dict/table_structure_dict_ch.txt'
2.3 检查模型是否存在

因为有迭代的原因有些模型可能没有下载完成,这时可以根据实际情况,去单独下载

模型	路径
检测模型	./inference/PP-OCRv3_mobile_det_infer/
识别模型	./inference/ch_PP-OCRv3_rec_infer/
方向分类器	./inference/ch_ppocr_mobile_v2.0_cls_infer/
版面分析模型	./inference/picodet_lcnet_x1_0_fgd_layout_infer/
表格结构识别模型	./inference/ch_ppstructure_mobile_v2.0_SLANet_infer/
关键信息抽取SER模型	./inference/ser_vi_layoutxlm_xfund_infer/
关键信息抽取RE模型	./inference/re_vi_layoutxlm_xfund_infer/

下载方法

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
#下载基于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
#下载PP-Structure 系列模型
wget https://paddleocr.bj.bcebos.com/ppstructure/models/layout/picodet_lcnet_x1_0_fgd_layout_infer.tar && tar -xf picodet_lcnet_x1_0_fgd_layout_infer.tar
2.4 安装模型
# 指定路径
cd /PaddleOCR
 
#PP-Structure
hub install deploy/hubserving/structure_system
 
#表格识别
hub install deploy/hubserving/structure_table
 
#表格版面分析
hub install deploy/hubserving/structure_layout
2.5 解决报错

2.5.1 上述过程可能出现报错:
在这里插入图片描述
降低aistudio_sdk版本

pip3.10 install aistudio_sdk==0.2.5

注意后续出现类似
cannot import name ‘download’ from 'aistudio_sdk.hub’的报错,就降低对应版本

在这里插入图片描述
降低paddle2onnx版本

pip3.10 show paddle2onnx
pip3.10 install paddle2onnx==1.0.5

问题解决完成 再次执行 2.4 安装模型
在这里插入图片描述

2.6 启动服务

执行启动命令:

 hub serving start -m structure_table --port 8888 --use_multiprocess --workers

注意:如果在启动遇到如下错误,则提示缺少模型
在这里插入图片描述
则去./inference目录下 执行下面命令下载解压

cd /PaddleOCR/inference/
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar
tar xf ch_PP-OCRv3_rec_infer.tar

然后再执行

hub install deploy/hubserving/structure_table/

再次启动:

 hub serving start -m structure_table --port 8866 --use_multiprocess --workers

成功
在这里插入图片描述

3.文字识别模型部署

3.1修改配置

我们在上面步骤已经下载了
ch_PP-OCRv3_det_infer 等模型
我们再下载 ch_PP-OCRv3_rec_infer(高精度版本),配置不高可不下载

wget https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_rec_infer.tar
tar xf ch_PP-OCRv4_rec_infer.tar

进入修改配置

cd PaddleOCR
vi deploy/hubserving/ocr_system/params.py

修改

cfg.rec_model_dir = "./inference/ch_PP-OCRv4_rec_infer/"

在这里插入图片描述

3.2 开始安装

执行

hub install deploy/hubserving/ocr_system

成功结果
在这里插入图片描述

3.3 启动文字服务
hub serving start -m ocr_system \
                  --port 8889 \
                  --use_multiprocess \
                  --workers 

成功
在这里插入图片描述

4.轻量级版面分析模型‌安装

4.1 修改配置

下载解压 picodet_lcnet_x1_0_fgd_layout_cdla_infer

wget https://paddleocr.bj.bcebos.com/ppstructure/models/layout/picodet_lcnet_x1_0_fgd_layout_cdla_infer.tar
tar -xvf picodet_lcnet_x1_0_fgd_layout_cdla_infer.tar

修改配置

vi deploy/hubserving/structure_layout/params.py
 #cfg.layout_model_dir = './inference/picodet_lcnet_x1_0_fgd_layout_infer/'
    cfg.layout_model_dir = './inference/picodet_lcnet_x1_0_fgd_layout_cdla_infer/'
    #cfg.layout_dict_path = './ppocr/utils/dict/layout_dict/layout_publaynet_dict.txt'
    cfg.layout_dict_path = './ppocr/utils/dict/layout_dict/layout_cdla_dict.txt'

在这里插入图片描述

4.2 开始安装
hub install deploy/hubserving/structure_layout

在这里插入图片描述

4.3 启动
hub serving start --modules structure_layout --port 8890 --use_multiprocess --workers

在这里插入图片描述

5.制作最终运行镜像

5.1 退出容器,提交镜像
exit
docker commit ocr ocr-paddlehub:v1.0.0

在这里插入图片描述

5.2 制作Dockerfile
vi Dockerfile

填入下面代码

FROM ocr-paddlehub:v1.0.0
 
WORKDIR /PaddleOCR
# 暴露8808 端口
EXPOSE 8808 
 
#启动模型
CMD ["/bin/bash", "-c", "hub serving start --modules structure_table ocr_system structure_layout --port 8866 --use_multiprocess --workers 4"]

执行命令

docker build -t ocr-server:v1.0.0 .

查看镜像
在这里插入图片描述
导出镜像:

docker save ocr-server:v1.0.0 -o ocr-server.tar

以上镜像制作完成!!
部分参考:PaddleHub的Docker镜像

6.演示将镜像到目标服务器使用

导入镜像

docker load -i ocr-server.tar

启动

docker run -p 8808:8810 --name=ocr-server -d ocr-server:v1.0.0

测试:

1. ‌ocr_system‌
‌功能‌:核心文本识别模块,用于检测并识别图像中的通用文字内容24。
‌输出‌:返回识别出的文本内容及其位置坐标(text_region)和置信度(confidence)4。
‌应用场景‌:适用于自然场景文字识别(如牌匾、标语)或文档中的普通段落文本56。
2. ‌structure_table‌
‌功能‌:表格结构化识别模块,专门解析图像中的表格区域并提取行列逻辑23。
‌输出‌:默认返回表格的HTML格式字符串(html),包含单元格位置和内容的结构化数据24。
‌技术原理‌:结合图像分割(行列检测)和语义关系抽取,重建表格框架38。
‌应用场景‌:财务报表、合同表格等高结构化文档解析13。
3. ‌structure_layout‌
‌功能‌:版面分析模块,识别文档中的多类型区域(如文本、表格、图像、标题)及其布局关系14。
‌输出‌:返回区域类型(type)、坐标(bbox)及关联内容(如表格区域链接structure_table)46。
‌技术原理‌:基于深度学习的图像分割与分类,划分不同功能区域68。
‌应用场景‌:发票、火车票、合同等多元素混合版面解析26。

使用测试工具测试

访问路径
http://localhost:8030/predict/ocr_system
http://localhost:8030/predict/structure_table‌
http://localhost:8030/predict/structure_layout‌

参数
{
    "images":[""]
}

在这里插入图片描述

### 使用Docker安装PaddleOCR #### 准备工作 确保本地环境已经正确配置好Docker服务。对于Linux系统,可以通过命令`docker -v`来验证是否成功安装并启动了Docker服务[^1]。 #### 获取预构建的PaddleOCR镜像 可以直接从官方仓库拉取预先构建好的PaddleOCR Docker镜像,这一步骤简单快捷,适合大多数用户快速上手尝试PaddleOCR的功能: ```bash docker pull paddlepaddle/paddleocr:latest ``` 此命令会下载最新版本的PaddleOCR镜像到本地机器中[^2]。 #### 启动容器 获取镜像之后,就可以创建一个新的容器实例来运行PaddleOCR应用。下面是一条典型的用于启动带有默认参数的PaddleOCR容器的命令: ```bash docker run -dp 8866:8866 --name paddle_ocr paddlepaddle/paddleocr:latest ``` 这条指令指定了端口映射(主机上的8866端口对应容器内的8866端口),以及给新创建的容器命名为`paddle_ocr`。 #### 自定义构建过程 对于有特殊需求的应用场景,比如想要集成额外功能或是调整软件栈配置,则可以选择自行编写Dockerfile文件来自定义构建流程。完成自定义设置后,利用如下命令基于当前目录下的Dockerfile构建新的镜像: ```bash docker build -t custom-paddle-ocr . ``` 这里假设用户的项目根目录下存在名为`Dockerfile`的文件,并且希望最终得到的镜像名称为`custom-paddle-ocr`[^3]。 #### 运行自定义镜像 一旦完成了自定义镜像制作,便可以按照之前介绍的方式启动它,在此基础上还可以进一步指定更多选项满足特定业务逻辑的要求: ```bash docker run -d -it -p 9000:9000 --name my_custom_paddle_ocr custom-paddle-ocr ``` 上述例子展示了如何将宿主机的9000端口绑定至容器内部的服务接口,并赋予该容器一个易于辨识的名字`my_custom_paddle_ocr`。 #### 设置入口点脚本 为了简化操作或者实现自动化处理任务的目的,可以在Dockerfile里设定一条或多条执行语句作为容器启动后的初始动作。例如,让容器一启动就自动调用某个Python程序来进行光学字符识别作业: ```json CMD ["python", "/path/to/your_script.py"] ``` 这段JSON风格的语法片段应当被放置于Dockerfile的最后一行位置,其中路径部分需替换成为实际存在的可执行文件所在的位置[^5]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值