局部重绘

描述

本接口用于云端处理AI局部内容生成的请求,具体效果请看以下文档详情。

图片样例

输入图片输出图片
样张结果

图片要求

图片格式:JPG,PNG

调用信息

任务提交接口:https://openapi.meitu.com/api/v1/sdk/sync/push
任务名称(task):/v1/InPainting/468520
任务类型(task_type):formula

权限

开放平台接口签名

请求参数

是否必选参数名类型参数说明
必选paramsstring推理参数
必选init_imagesobject[]图片参数,需传两张图片,第一张原图,第二张mask图(选择需要涂抹的位置)
必选taskstring固定: /v1/InPainting/468520
必选task_typestring固定: formula
可选sync_timeoutint默认30,-1 表示不等待,同步超时时间,接口超时后使用status 返回9,使用(https://meituhub.cn/docs?id=179&f_id=11) 接口查询
可选rsp_media_typestring“jpg”:融合结果图像直接以 base64 编码方式返回
“url”:融合结果图像直接以 url 方式返回 ,默认 URL 返回

init_images 图片参数,结构说明如下

是否必选参数名类型参数说明
必选urlstring图片地址
可选profileobject多媒体参数

profile 参数,结构说明如下

是否必选参数名类型参数说明
可选media_extraobject多媒体附加参数
可选media_profilesobject多媒体描述

media_profiles 参数,结构说明如下

是否必选参数名类型参数说明
可选media_data_typestring"url":多媒体文件以 url 形式传输,
"jpg":多媒体文件以 base64 编码传输

params 中参数说明(需要转义成 string)

是否必选参数名类型参数说明
parameterString消除参数
parameter 中参数说明
是否必选参数名类型参数说明
可选rsp_media_typeString“jpg”:融合结果图像直接以 base64 编码方式返回,“url”:融合结果图像直接以 url 形式返回
可选prompt_posString正向提示词
可选seedint随机种子[-1,2147483647],若不传,则seed值随机生成
可选return_format_typeString返回图片格式,默认为’png’。可选[‘jpeg’, ‘jpg’, ‘png’, ‘webp’], 传入其它字符返回’png’格式。

输入值示例

{
    "params": "{\"parameter\":{\"rsp_media_type\":\"url\",\"prompt_pos\":\"lipstick lying on satin fabric\"}}",
    "init_images": [
        {
            "profile": {
                "media_profiles": {
                    "media_data_type": "url"
                },
                "version": "v1"
            },
            "url": "原图Image URL or Base64"
        },
        {
            "profile": {
                "media_profiles": {
                    "media_data_type": "url"
                },
                "version": "v1"
            },
            "url": "Mask URL or Base64"
        }
    ],
    "task": "/v1/InPainting/468520",
    "task_type": "formula"
}

返回值说明

成功返回值说明

字段类型参数说明
media_info_listList每个项包含一个多媒体信息(例如:图片数据以及对应信息),同上
parameterObject返回信息类型标识

 

media_info_list 中单个元素的字段说明

字段类型参数说明
media_dataString经过 base64 编码的多媒体文件数据
media_profilesObject多媒体文件的相关属性信息描述

 

parameter 中字段说明

字段类型参数说明
rsp_media_typeString'jpg',表示 media_data 是经过 base64 压缩过的图片

 

media_profiles 中字段说明

字段类型参数说明
media_data_typeString'jpg',表示 media_data 是经过 base64 压缩过的图片

失败返回值说明

字段类型说明
ErrorCodeInt错误代码
ErrorMsgString错误信息
DataString具体信息返回值示例

返回值示例

请求成功返回示例

Response Status:200

content-type 为 application/json; charset=utf-8

{
    "parameter": {
        "rsp_media_type": "jpg",
   }
	"media_info_list": [{
		"media_data": "...",
		"media_profiles": {
			"media_data_type": "jpg"
		}
	}]
}

请求失败返回示例

Response Status:400

content-type 为 application/json; charset=utf-8

{
	"ErrorCode": 20003, 
	"ErrorMsg": "detect no face", 
	"Data": null
}

当前 API 特有的错误代码与信息

ErrorCode状态代码错误信息说明
20001PROCESS_ERROR处理错误
20003DETECT_NOT_FACE人脸缺失
20004MORE_THAN_ONE_FACE人脸数大于1
20007MISSING_LANDMARK_ARGUMENTS未传入人脸点
20008UNSUITABLE_IMAGE照片不符合规范
20009UNSUPPORT_TYPE不支持的type
20010DETECT_NOT_FACE检测不到第二张图片的人脸
20011UNSUITABLE_VERTICAL_IMAGE垂直高度不满足
20012UNSUITABLE_HORIZONTAL_IMAGE水平宽度不满足
20013RESOLUTION_TOO_LARGE_ERROR分辨率过大
20014NOT_FOUND查找不到图片
20015PICTURE_OVERRUN_ERROR图片超限
20020DETECT_FACE_OUTOFIMAGE五官缺失
20021DETECT_FACE_PITCHANGLE_BIG非正脸 点头 俯仰角过大
20022DETECT_FACE_YAWANGLE_BIG非正脸 摇头 旋转角过大
20023DETECT_FACE_LOWAREA脸部占比小像素低
21001LOAD_MODEL_ERROR加载模型失败
21002HAIR_MASK_LOSS头发mask缺失
21003FACE_NUM_ERROR人脸个数错误
21004AR_PARSE_FAULTar中plist解析错误
21005AR_EEEOR_COUNTar人脸错误
21006AR_FACE_OUTar超过人脸范围
21007JSON_ERRORjson内容错误
21008BACKGROUND_IMAGE_LOSS背景图片缺失
21009BODY_MASK_LOSSbodymask缺失
21010FACE_ANGLE_ERROR人脸角度错误
21011SKIN_MASK_LOSSskinmask缺失
21012BODY_INFO_LOSS骨骼点或者外轮廓点缺失
21013RECT_OUT_IMAGE超过图片范围
30001GEN_ERROR生成错误

通用的错误代码与信息

详见 API 错误码  

调用方法

import requests
import json
import requests
from sign_sdk import sign

key = ""
secret = ""

def fetchResult(taskId):
    url = "https://openapi.meitu.com/api/v1/sdk/status?task_id="+taskId
    #key = "your api key"
    #secret = "your api secret"
    method = "GET"
    headers = {
        "Content-Type": "application/json",
        sign.HeaderHost: "openapi.meitu.com"
    }

    body = ""
    
    try:
        signer = sign.Signer(key, secret)

        signed_request = signer.sign(url,method,headers,body)
        session = requests.Session()
        response = session.send(signed_request,verify=False)
        if response.status_code==200:
            r=json.loads(response.content)
            if r["data"]["result"]["status"]=="10":
                # 任务成功
                print(r["data"]["result"]["url"])
            elif r["data"]["result"]["status"]=="2" or r["data"]["result"]["status"]=="20": 
                # 任务失败
                print(r["data"]["result"])
            else:
                # 任务进行中
                fetchResult(taskId)
        else:
            print(response.text)

    except Exception as ex:
        print(ex)

url = "http://openapi.meitu.com/api/v1/sdk/sync/push"
method = "POST"
headers = {
    "Content-Type": "application/json",
    sign.HeaderHost: "openapi.meitu.com",
}
param = {
    "parameter": {
        "rsp_media_type": "url",
        "prompt_pos": "lipstick lying on satin fabric"
    }
}
imageUrl="https://obs-open-platform.obs.cn-north-4.myhuaweicloud.com/public/resources/img"
imagePositionMask="https://obs-open-platform.obs.cn-north-4.myhuaweicloud.com/public/resources/pos"
# 
body = json.dumps({
    # 注意params 是string类型,需要json.dumps 转换一次数据结构
    "params": json.dumps(param),
    "init_images": [
# 输入原图
	{
        "url": imageUrl,
        "profiles": {
            "version": "v1"
        }
    },
# 输入Mask图片
{
        "url": imagePositionMask,
        "profiles": {
            "version": "v1"
        }
    }],
    "task": "/v1/InPainting/468520", #调用信息中的task
    "task_type": "formula" #调用信息中的task type
})

signer = sign.Signer(key, secret)
print(body)
signed_request = signer.sign(url, method, headers, body)
session = requests.Session()
response = session.send(signed_request,verify=False)

print(response.status_code)
print(response.text)
taskResult= json.loads(response.content)
taskId=taskResult["data"]["result"]["id"]

fetchResult(taskId,None)