PaddleOCR docker模式

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"}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容