【Modelarts】如何将图片输入修改成Base64输入或URL输入

举报
刘云峰 发表于 2022/08/12 16:52:22 2022/08/12
【摘要】 本教程将会以一个准备好得model部署目录结构的方式,来讲解如何修改修改推理脚本和config.json,来适配推理不同的输入(可能是图片文件、Base64、URL),根据不同情况对推理脚本和config.json文件的部分代码按照以下指导进行修改即可。

一.环境准备

目前已经准备好一个适配好推理部署服务的架构目录文件结构,如下图。


二.修改样例

1 输入图片

1.1 需要打开config.json,将api定义中的request修改成下图所示。表示图片输入。

...
"request": {
    "data": {
        "type": "object",
        "properties": {
            "images": {
                "type": "file"
            }
        }
    },
    "Content-type": "multipart/form-data"
},
...

1.2 config.json中,dependencies中添加opencv-python的依赖。

 

1.3推理脚本(customize_service.py)部分,用opencv的方式的话需要添加第二步的依赖。

def _preprocess(self, data):
    ...
    pre_data = {}
    for k, v in data.items():
        input_batch = []
        for file_name, file_content in v.items():
            img_array = cv2.imdecode(np.fromstring(file_content.read(), np.uint8), cv2.IMREAD_COLOR)
            input_batch.append(img_array)

        pre_data[file_name] = input_batch
    return pre_data
    ...

如果使用PIL,则参考如下代码

def _preprocess(self, data):
    ...
    pre_data = {}
    for k, v in data.items():
        input_batch = []
        for file_name, file_content in v.items():
            img_array = Image.open(file_content)
            input_batch.append(img_array)

        pre_data[file_name] = input_batch
    return pre_data
    ...

2. 图片Base64输入

2.1config.json部分,将api定义中的request修改成下图所示。表示json输入。

...
"request": {
    "Content-type": "application/json",
    "data": {
        "type": "object",
        "properties": {
            "images": {
                "type": "string"
            }
        }
    }
},
...


2.2 config.json中,dependencies中添加opencv-python的依赖。

2.3推理脚本(customize_service.py)部分

def _preprocess(self, data):
    ...
    pre_data = {}
    for k, v in data.items():
        input_batch = []
        for file_name, file_content in v.items():
            base64_decode = base64.b64decode(file_content)
            
            img_array = io.BytesIO(base64_decode)
            
            img_array = cv2.imdecode(np.fromstring(img_array.read(), np.uint8), cv2.IMREAD_COLOR)
    
            input_batch.append(img_array)
    
        pre_data[k] = input_batch
        
    return pre_data
    ...

如果是PIL,参考如下代码

def _preprocess(self, data):
    ...
    pre_data = {}
    for k, v in data.items():
        input_batch = []
        for file_name, file_content in v.items():
            img_array = Image.open(io.BytesIO(base64.b64decode(file_content)))
            input_batch.append(img_array)

        pre_data[file_name] = input_batch
    return pre_data
    ...

3)URL输入(确保URL的公网可下载的)

3.1config.json部分,将api定义中的request修改成下图所示。

...
"request": {
    "Content-type": "application/json",
    "data": {
        "type": "object",
        "properties": {
            "images": {
                "type": "string"
            }
        }
    }
},
...

3.2 config.json中,dependencies中添加opencv-python的依赖。

3.3推理脚本(customize_service.py)部分

def _preprocess(self, data):
    ...
    pre_data = {}
    for k, v in data.items():
        input_batch = []
        for file_name, file_content in v.items():
            resp = urllib.request.urlopen(file_content)
    
            img_array = np.asarray(bytearray(resp.read()), dtype="uint8")
    
            img_array = cv2.imdecode(np.fromstring(img_array, np.uint8), cv2.IMREAD_COLOR)
    
            input_batch.append(img_array)
    
        pre_data[k] = input_batch
    
    return pre_data
    ...
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。