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":[""]
}