本文介绍人物实例分割模型的输入输出参数。人物实例分割运用了检测和分割技术,不仅能够在图像中识别出不同的对象,而且还能准确地画出每一个对象边界的像素级掩码(mask)。
相关指南:人物实例分割
- 本文档仅适用于“中国大陆(北京)”地域,需使用“中国大陆(北京)”地域的API Key。 
- image-instance-segmentation 模型当前仅提供免费体验,免费额度用完后不可调用且不支持付费。 
模型概览
| 模型名 | 免费额度(查看) | 计费单价 | 限流(含主账号与RAM子账号) | |
| 任务下发接口QPS限制 | 同时处理中任务数量 | |||
| image-instance-segmentation | 500张 | 目前仅供免费体验。 免费额度用完后不可调用,敬请关注后续动态。 | 2 | 1 | 
前提条件
您需要已获取API Key并配置API Key到环境变量。
HTTP调用
为了减少等待时间并且避免请求超时,服务采用异步方式提供。您需要发起两个请求:
- 创建任务:首先发送一个请求创建人物实例分割任务,该请求会返回任务ID。 
- 根据任务ID查询结果:使用上一步获得的任务ID,查询模型生成的结果。 
步骤1:创建任务获取任务ID
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis
| 请求头(Headers) | 人物实例分割 | 
| Content-Type string 必选 请求内容类型。固定为 | |
| Authorization string 必选 推荐您使用阿里云百炼API-Key,也可填DashScope API-Key。例如:Bearer d1xxx2a。 | |
| X-DashScope-Async string 必选 是否开启异步处理。必须开启异步处理,设置为 | |
| 请求体(Request Body) | |
| model string 必选 调用模型。 | |
| input object 必选 输入图像的基本信息,比如图像URL。 | 
| 响应 | 成功响应异常响应 | 
| output object 任务输出信息。 | |
| code string 接口错误码。接口成功请求不会返回该参数。 | |
| message string 接口错误信息。接口成功请求不会返回该参数。 | |
| request_id(可选)string 本次请求的系统唯一码。 | 
步骤2:根据任务ID查询结果
GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}
| 请求头(Headers) | 获取任务结果 | 
| Authorization string 必选 API-Key,例如:Bearer d1**2a。 | |
| URL路径参数(Path parameters) | |
| task_id string 必选 任务id。 | 
| 响应 | 任务执行成功对于本模型,任务在结束之后的状态会持续保留24小时以备客户随时查询,24小时之后,任务将从系统中清除,相关的结果也将一并清除;对应的,任务生成的结果为图像的URL地址,出于安全考虑,该URL的下载有效期也是24小时,需要用户在获取任务结果后根据需要及时使用或者转存。 任务执行中任务执行失败 | 
| request_id string 本次请求的系统唯一码。 | |
| status_code int 200(HTTPStatus.OK)表示请求成功,否则表示请求失败,可以通过code获取错误码,通过message字段获取错误详细信息。 | |
| code string 如果失败表示错误码,参考错误码表。 | |
| message string 如果失败,内容为失败详细信息。 | |
| output object 任务输出信息。 | |
| usage object 输出信息统计。 | 
补充:如何从人物实例分割掩码图中获取保留人物和待擦除人物掩码图?
以下代码示例将得到的人物实例分割结果图拆分成擦除区域图以及保留区域图,后续调用图像擦除模型擦除不需要的人像。
| 原图 | 人物实例分割结果 | 保留区域 | 擦除区域 | 
| 
 | 
 mask.png | 
 reserve.png | 
 remove.png | 
import cv2
import numpy as np
def get_remove_mask(mask_path, remove_mask_path, reserve_ids=[]):
    mask = cv2.imread(mask_path)
    instance_num = int(mask.max())
    new_mask = np.zeros((mask.shape[0], mask.shape[1], 3))
    for i in range(1, instance_num+1):
        if i in reserve_ids:
            continue
        new_mask[mask[:, :, 0] == i] = (255, 255, 255)
    cv2.imwrite(remove_mask_path, new_mask.astype(np.uint8))
def get_reserve_mask(mask_path, reserve_mask_path, reserve_ids=[]):
    mask = cv2.imread(mask_path)
    instance_num = int(mask.max())
    new_mask = np.zeros((mask.shape[0], mask.shape[1], 3))
    for i in range(1, instance_num + 1):
        if i in reserve_ids:
            new_mask[mask[:,:,0] == i]  = (255, 255, 255)
    cv2.imwrite(reserve_mask_path, new_mask.astype(np.uint8))
if __name__ == '__main__':
    mask_path = 'mask.png'
    remove_mask_path = 'remove.png'
    reserve_mask_path = 'reserve.png'
    get_remove_mask(mask_path, remove_mask_path, reserve_ids=[1])
    get_reserve_mask(mask_path, reserve_mask_path, reserve_ids=[1])
    错误码
如果模型调用失败并返回报错信息,请参见错误信息进行解决。
此API还有特定状态码,具体如下所示。
| HTTP状态码 | 接口错误码(code) | 接口错误信息(message) | 含义说明 | 
| 400 | InvalidParameter.JsonPhrase | input json error | 输入JSON错误 | 
| 400 | InvalidParameter.FileDownload | oss download error | 输入图像下载失败 | 
| 400 | InvalidParameter.ImageFormat | read image error | 读取图像失败 | 
| 400 | InvalidParameter.ImageContent | The image content does not comply with green network verification. | 图像内容不合规 | 
| 400 | InvalidParameter | the parameters must conform to the specification: xxx | 输入参数超出范围 | 
| 500 | InternalError.Algo | algorithm process error | 算法错误 | 
| 500 | InternalError.FileUpload | oss upload error | 文件上传失败 | 



