PaddleOCR docker模式

2023-07-15  本文已影响0人  水他

PaddleCloud基于 Tekton 为OCR模型套件提供了镜像持续构建的能力,并支持CPU、GPU以及常见CUDA版本的镜像。 您可以查看 PaddleOCR 镜像仓库 来获取所有的镜像列表。 同时我们也将PP-OCRv3识别模型的训练与推理实战案例放置到了AI Studio平台上,您可以点击 PP-OCRv3识别训推一体项目实战 在平台上快速体验。

PP-OCR是一个实用的超轻量OCR系统。主要由DB文本检测、检测框矫正和CRNN文本识别三部分组成。

image.png

PaddleServing 服务化部署框架是什么?

Paddle Serving依托深度学习框架PaddlePaddle旨在帮助深度学习开发者和企业提供高性能、灵活易用的工业级在线推理服务。Paddle Serving支持RESTful、gRPC、bRPC等多种协议,提供多种异构硬件和多种操作系统环境下推理解决方案,和多种经典预训练模型示例。

image.png

一、启动容器

拉取预安装paddlepaddle的镜像

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

image.png

clone paddleOCR代码

git clone https://gitee.com/paddlepaddle/PaddleOCR

启动并进入docker容器:

docker run --name ppocr \ -v $PWD:/paddle \ --network=host \ -it registry.baidubce.com/paddlepaddle/paddle:2.4.2 /bin/bash

二、安装依赖和部署模型

安装paddleOCR的python依赖

cd /paddle/PaddleOCR 
python -V 
  python 3.7.13 
pip3 install -r requirements.txt
image.png

安装服务模块

PaddleOCR提供3种服务模块,分别为检测、识别、检测+识别,根据需要安装所需模块。(这里我们是安装的ocr_system)

pip uninstall typing-extensions -y 
pip uninstall flask-babel -y 
pip uninstall astroid -y 

pip install astroid==2.11.6 
pip install flask-babel==2.0.0 
pip install typing-extensions==4.7.1
# 安装paddlehub(用于启动服务) 
pip3 install paddlehub 
# 安装检测+识别串联服务模块:
 hub install ./deploy/hubserving/ocr_system/ 
# 或,只安装检测服务模块:
 hub install deploy/hubserving/ocr_det/ 
# 或,只安装识别服务模块:
 hub install deploy/hubserving/ocr_rec/
image.png image.png

下载并安装模型

下载PPOCR的inference模型:

# 切换到 OCR 的 inference 目录 
mkdir /paddle/PaddleOCR/inference
 cd /paddle/PaddleOCR/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/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar -O ch_ppocr_mobile_v2.0_cls_infer.tar && tar -xf ch_ppocr_mobile_v2.0_cls_infer.tar 
# 下载并解压 OCR 文本识别模型 
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar -O ch_PP-OCRv3_rec_infer.tar && tar -xf ch_PP-OCRv3_rec_infer.tar

修改参数文件 - 模型路径

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

image.png

三、启动模型服务

修改启动配置文件,不使用gpu

此时启动后端口为8868,需注意use_multiprocess 和user_gpu不能同时为true。

vi /paddle/PaddleOCR/deploy/hubserving/ocr_system/config.json

image.png

如果gpu = true,可以修改显存占用的配置

vi /paddle/PaddleOCR/deploy/hubserving/ocr_system/module.py

image.png

启动paddleocr服务(hubserving启动),

# config文件启动 
hub serving start -c deploy/hubserving/ocr_system/config.json 

# 命令行方式启动 
hub serving start -m ocr_system -modules k==v --port 8866 --use_multiporcess false --workers 1

命令行方式启动参数:

参数 用途 
--modules/-m PaddleHub Serving预安装模型,以多个Module==Version键值对的形式列出当不指定Version时,默认选择最新版本 
--port/-p 服务端口,默认为8866 
--use_multiprocess 是否启用并发方式,默认为单进程方式,推荐多核CPU机器使用此方式,Windows操作系统只支持单进程方式 
--workers 在并发方式下指定的并发任务数,默认为2*cpu_count-1,其中cpu_count为CPU核数

四、测试

4.1 通过test_hubserving.py文件验证

docker exec -it ppocr bash python /paddle/PaddleOCR/tools/test_hubserving.py --server_url http://127.0.0.1:8868/predict/ocr_system --image_dir /paddle/PaddleOCR/doc/imgs/

image.png

4.2 通过python请求request单个文件测试

python ocr.py

import requests
import json
import base64


def cv2_to_base64(image):
    return base64.b64encode(image).decode('utf8')

headers = {"Content-type": "application/json"}

img = open(r'/paddle/id3.jpg', 'rb').read()

b = cv2_to_base64(img)
data = {'images': [cv2_to_base64(img)]}
       

r = requests.post(url='http://127.0.0.1:8868/predict/ocr_system', headers=headers, data=json.dumps(data))
# data数据写入文件
#with open('data.txt', 'w') as f:
#    f.write(json.dumps(data))

# 打印data数据和返回结果
print(data) 
print(r.json()["results"][0])
image.png

4.3 通过curl命令测试

计算待识别图片的Base64编码,可以通过免费的在线工具实现,如:http://tool.chinaz.com/tools/imgtobase/,也可以通过python的cv2_to_base64包实现。

或者直接使用\deploy\docker\hubserving路径下的sample_request.txt样例。

# 服务请求
curl -H "Content-Type:application/json" -X POST --data "{\"images\": [\"填入图片Base64编码(需要删除'data:image/jpg;base64,')\"]}" http://localhost:8868/predict/ocr_system
# 服务返回
{"msg":"","results":[[{"confidence":0.8403433561325073,"text":"约定","text_region":[[345,377],[641,390],[634,540],[339,528]]},{"confidence":0.8131805658340454,"text":"最终相遇","text_region":[[356,532],[624,530],[624,596],[356,598]]}]],"status":"0"}
上一篇下一篇

猜你喜欢

热点阅读