Open Hsiayukoo opened 2 months ago
[TOC]
缩略语清单
MindSpore OCR 目前主要应用在银行,银行的业务中存在大量的版面分析、表格分析、图像中关键信息提取等可通过人工智能解决的任务。快简单的速部署 MindSpore OCR是影响客户是否愿意使用的一个关键因素,但 MindOCR 部署功能与竞品(如 PaddleOCR)进行对比的时候,差距较大。
目前 MindOCR 支持如下方式部署:
而 PaddleOCR 支持如下方式部署:
对比之下,MindSpore OCR 相较于 PaddleOCR 部署工具的差距主要在以下。
MindSpore OCR 部署工具补齐。
安装的环境要求:同 MindSpore OCR(以下简称 MindOCR) 安装的环境要求相同,deploy 模块下新增 serving 模块。(其中绿色的是已有模块,蓝色的是新增的模块)
遵守开闭原则。
硬件限制基于 MindSpore 框架硬件限制,不新增任何硬件限制。
当前,flask 当前自带的开发服务器 Werkzeug 不支持 http 2.0 协议,也就不能直接支持 gRPC,但可以通过扩展包支持 gRPC,gPRC 能提供比传统 RESTful API 更快的性能。
不涉及
MindSpore OCR 服务化部署的整体架构如下图所示(其中蓝色为新增部分)
server 模块主要包含了 flask_server、pytriton_server。提供服务部署功能,分别以 flask 和 triton 为基础框架。
本部分以 flask 为基础框架,额外支持 gRPC,也就是提供 gRPC,http 通信协议。并提供以 flask 为基础的服务化部署能力。
trtion
本部分以 triton 为基础框架,提供商用化的服务化部署能力,这部分有 2 种实现方式,(1)使用 c 语言的实现的 tirton,这部分需要首先根据 triton 提供的模板,将 MindSpore 接入 Triton 推理后端。(2)使用类似 flask 的 python 版本的 pytriton 进行服务化部署。(目前只支持 Linux 系统)
det 任务
det:文本检测推理模型 __init__:加载预训练权重或者本地 ckpt 文件,加预处理和后处理方法, __call__:img_or_path(Union(str, np.array) 输入 1 张 image_path 的list 或者RGB 图像的 nd.array return:tuple(det_res_final, data) 我们应该只需要 (det_res_final) det_res_final(dict): polys(np.array): shape like (num_polygons, 4, 2) # 如果是方形的 scores:(np.array) in shape [num_polygons],每个 polygon 的置信度 data(dict): image_ori(np.ndarray):原始的图像 in shape[h,w,c] image(np.ndarray):处理后喂给神经网络的图像 [c,h,w] shape(list): shape 和 scaling 信息 [ori_h, ori_w, scale_ratio_h,scale_ratio_w]
rec 任务
rec:文本识别模型 __init__:加载预训练权重或者本地 ckpt 文件,加预处理和后处理方法, call: img_or_path_list(List[Union(str, np.array)]) : 输入 image_path list 或者 images list,总之要是个 list ,可以是 list[str] ,也可以是 list[np.array] return: rec_res(List[tuple]):每个 tuple 都是 (text,score) ,text 是识别的 str,score 是float置信度。 比如 [(“apple”, 0.9), (“bike”, 1.0)]
sys 任务
system:检测+识别 (det + rec) __init__:加载预训练权重或者本地 ckpt 文件(rec 和 det 的),加预处理和后处理方法 call:img_or_path(Union[str, np.ndarray] 1张图像的路径或 RGB 值 return:Tuple - boxes(List): 识别出来的框,shape like [num_boxes, num_points] - texts(List[tuple]): list of (text,score) - time_profile(dict): 每个 sub_task 处理所用时间
ser 任务
ser:语义实体识别 __init__:加载预训练权重或者本地 ckpt 文件,加预处理和后处理方法, call: 输入 image_path_list(List[str]),需要 OCR 处理的图像的路径。 return:Tuple - res(List[dict]):每张图片的识别结果,大概长这样 {‘image_path’, image_path, ‘label’: ocr_info} - tot_time(float):处理所有输入图片所用时间(秒)
flask_server 总体结构如下:
POST/set_task_model/
参数:
返回值:
null
GET/get_status
null
POST/detect
发送 1 张图片类似:
url = "http://localhost:5000/detect" files = {"file": open("/path/to/your.image.jpg", "rb")} response = requests.post(url, files=files)
返回:
POST/rec
发送 1 张图片类似:
url = "http://localhost:5000/rec" files = {"file": open("/path/to/your.image.jpg", "rb")} response = requests.post(url, files=files)
POST/sys
url = "http://localhost:5000/sys" files = {"file": open("/path/to/your.image.jpg", "rb")} response = requests.post(url, files=files)
见 ser 任务返回值
POST/ser
url = "http://localhost:5000/ser" files = {"file": open("/path/to/your.image.jpg", "rb")} response = requests.post(url, files=files)
输入输出同 http API 接口。
pre_process:负责请求消息接收后,对数据进行预处理。不同的模型预处理内容不一致。
post_process:预测结果后处理,用于请求返回。不同的模型后处理方法不一样
load_model_config:读取模型配置文件
infer:调用推理后端进行推理,可以是 MindSpore ,也可以是 MindSpore Lite
logger:日志记录
同 flask server 模块。
这是准备做还是已经实现了?
MindSpore OCR 服务化部署功能设计说明书
一、修订记录
[TOC]
缩略语清单
二、简介
2.1 目的
MindSpore OCR 目前主要应用在银行,银行的业务中存在大量的版面分析、表格分析、图像中关键信息提取等可通过人工智能解决的任务。快简单的速部署 MindSpore OCR是影响客户是否愿意使用的一个关键因素,但 MindOCR 部署功能与竞品(如 PaddleOCR)进行对比的时候,差距较大。
目前 MindOCR 支持如下方式部署:
而 PaddleOCR 支持如下方式部署:
对比之下,MindSpore OCR 相较于 PaddleOCR 部署工具的差距主要在以下。
2.2 范围
2.2.1 软件名称
MindSpore OCR 部署工具补齐。
2.2.2 软件功能
三、第零层设计描述
3.1 软件系统上下文定义
安装的环境要求:同 MindSpore OCR(以下简称 MindOCR) 安装的环境要求相同,deploy 模块下新增 serving 模块。(其中绿色的是已有模块,蓝色的是新增的模块)
3.2 设计约束
3.2.1 遵循标准
遵守开闭原则。
3.2.2 硬件限制
硬件限制基于 MindSpore 框架硬件限制,不新增任何硬件限制。
3.2.3 技术限制
当前,flask 当前自带的开发服务器 Werkzeug 不支持 http 2.0 协议,也就不能直接支持 gRPC,但可以通过扩展包支持 gRPC,gPRC 能提供比传统 RESTful API 更快的性能。
3.2.4 系统配置
不涉及
四、第一层设计描述
4.1 总体结构
MindSpore OCR 服务化部署的整体架构如下图所示(其中蓝色为新增部分)
4.2 分解描述
4.2.1 模块分解
server 模块主要包含了 flask_server、pytriton_server。提供服务部署功能,分别以 flask 和 triton 为基础框架。
本部分以 flask 为基础框架,额外支持 gRPC,也就是提供 gRPC,http 通信协议。并提供以 flask 为基础的服务化部署能力。
trtion
本部分以 triton 为基础框架,提供商用化的服务化部署能力,这部分有 2 种实现方式,(1)使用 c 语言的实现的 tirton,这部分需要首先根据 triton 提供的模板,将 MindSpore 接入 Triton 推理后端。(2)使用类似 flask 的 python 版本的 pytriton 进行服务化部署。(目前只支持 Linux 系统)
五、第二层设计描述
5.1 在线推理任务的输入输出汇总
det 任务
rec 任务
sys 任务
ser 任务
5.2 flask_server 模块设计
5.2.1 总体结构
flask_server 总体结构如下:
5.2.2 http API 接口描述
参数:
返回值:
null
参数:
null
返回值:
发送 1 张图片类似:
返回:
参数:
发送 1 张图片类似:
返回:
参数:
返回:
见 ser 任务返回值
参数:
返回:
见 ser 任务返回值
5.2.3 gRCP 接口设计
输入输出同 http API 接口。
5.2.4 模块分解描述
pre_process:负责请求消息接收后,对数据进行预处理。不同的模型预处理内容不一致。
post_process:预测结果后处理,用于请求返回。不同的模型后处理方法不一样
load_model_config:读取模型配置文件
infer:调用推理后端进行推理,可以是 MindSpore ,也可以是 MindSpore Lite
logger:日志记录
5.3 pytriton server 模块设计
同 flask server 模块。