基础环境
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 8866:8866 --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 -i https://pypi.doubanio.com/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://pypi.doubanio.com/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 8866 &
#查看启动日志
tail -f nohup.out
**参数说明**
| 参数 | 说明 |
| ------------ | ------------ |
| -m | 指定启动的服务名称,多个用空格隔开 |
| -p | 指定服务端口 |
启动成功
image
接口访问路径
ocr_system: http://127.0.0.1:8866/predict/ocr_system
structure_table: http://127.0.0.1:8866/predict/structure_table
接口说明
参数 说明
请求类型 post
Content-Type application/json
参数格式 {"images":["图片 base64串"]}