文档

AI写真:Python SDK使用说明

更新时间:

使用Python SDK调用AI写真的算法服务接口进行模型训练和写真制作。通过SDK,您可以定制LoRA模型,并根据模板制作写真。本文为您介绍使用Python SDK调用接口之前的准备工作以及使用示例。

前提条件

  • 已准备好Python环境,环境依赖Python 3.4及其以上版本。

  • 已准备好5-20张训练图片和1张模板图片,用于模型训练和写真制作。图片格式支持.jpg.jpeg.png等。

    • 如果进行单人写真制作,模板图片中包含单张人脸即可。多张训练图片中的人脸属于同一个人。

    • 如果进行多人写真制作,模板图片中需包含多张人脸,且人脸数量与模型训练的model_id数量一致。

    • 请确保训练图片和模板图片的尺寸大于512×512像素。

准备工作

  1. 安装Python SDK,命令如下:

    wget https://ai-service-data.oss-cn-beijing.aliyuncs.com/python-sdk/ai_service_python_sdk-1.1.3-py3-none-any.whl
    pip install ai_service_python_sdk-1.1.3-py3-none-any.whl
  2. 初始化Client。

    使用以下命令,进行环境初始化:

    from ai_service_python_sdk.client.api_client import ApiClient
    client = ApiClient('<HOST>', '<YOUR-APPID>', '<YOUR-TOKEN>')

    您需要根据实际情况,替换以下参数值。

    参数

    描述

    <HOST>

    服务端地址:http://ai-service.ce8cc13b6421545749e7b4605f3d02607.cn-hangzhou.alicontainer.com

    <YOUR-APPID>

    开通AI写真后,您可以直接在AI写真页面查看AppId。

    <YOUR-TOKEN>

    开通AI写真后,您可以直接在AI写真页面查看Token。

调用代码示例

AI写真是一个资源消耗量较大的服务,主要包括模型训练和写真制作两个环节。模型训练通常需要几分钟的响应时间,而写真制作则只需要数十秒即可完成。AI写真的接口调用流程图如下:

image

各个接口的请求、响应代码示例和端到端的请求代码示例如下:

核验请求(aigc_images_check)

  • 请求代码示例如下:

    from ai_service_python_sdk.client.api_client import ApiClient
    from ai_service_python_sdk.client.api.ai_service_aigc_images_api import AIGCImagesApi
    
    host = 'http://ai-service.ce8cc13b6421545749e7b4605f3d02607.cn-hangzhou.alicontainer.com'
    appId = 'YOUR-APPID'
    token = 'YOUR-TOKEN'
    
    client  = ApiClient(host, appId, token)
    api    = AIGCImagesApi(client)  # noqa: E501
    
    # 输入训练的图片,以URL形式存在。
    images = [
        'https://xxx/0.jpg',
        'https://xxx/1.jpg'
    ]
    response = api.aigc_images_check(images, <model_name>, <configure>)
    
    # 请求流水号。
    request_id = response.request_id
    # 请求状态。
    code = response.code
    # 请求状态具体信息。
    message = response.message
    # 请求返回内容。
    data = response.data
    # 打印返回结果。
    print(response)

    参数说明如下:

    参数

    描述

    appId

    配置为在AI写真页面查到的AppId。

    token

    配置为在AI写真页面查到的Token。

    images

    配置为图片URL地址,多个URL地址使用半角逗号(,)分隔。

    response

    请分别为该参数配置下列输入值:

    • <model_name>:模型名称,默认输入空字符串,例如''

    • <configure>:模型返回配置,默认为None,例如:None。目前没有额外的配置。

  • 响应结果示例如下:

    {
        "request_id":"07988c97-caa4-4512-a2b2-e9173c1a03c6",
        "code":"OK",
        "message":"success",
        "data":{
            "check_results":[
                {
                    "code":1,
                    "frontal":true,
                    "message":"success",
                    "url":"https://xxx/0.jpg"
                },{
                    "code":1,
                    "frontal":false,
                    "message":"success",
                    "url":"https://xxx/1.jpg"
                }
            ],
            "cost_time":0.47095775604248047,
            "images":["https://xxx/0.jpg","https://xxx/1.jpg"],
            "request_id":"07988c97-caa4-4512-a2b2-e9173c1a03c6"}}

    返回结果中的各字段说明如下:

    字段

    描述

    request_id

    请求流水号,STRING类型。

    code

    请求状态码,STRING类型,取值如下:

    • OK:表示请求成功。

    • error:表示请求失败。

    message

    请求状态的详细信息。如果返回结果为success表示执行成功,对于其他返回结果,请根据具体的返回内容来确定。

    data

    返回内容详情,JSON Object类型。内部字段说明如下:

    • check_results:表示输入的每张图片的检测结果。每张图片对应一个字典,该字典一共有三个Key,分别为:

    • cost_time:本次API调用花费的服务端计算时长。

    • images:核验的图片URL列表,List类型。

    • request_id:请求流水号,STRING类型。

    check_results的message字段的可能取值

    message可能值

    状态码

    描述

    success

    1

    表示符合要求。

    Image decode error

    2

    无法下载或解码图像。

    Number of face is not 1

    3

    人脸数量不为1。

    Image detect error

    4

    人脸检测异常。

    Image encoding error

    5

    将人脸编码为特征向量时出错,表示无法检测到人脸。

    This photo is not the same person in photos

    6

    如果只出现了这个错误,表示多张图片中的人脸不属于同一个人。

模型发起训练(aigc_images_train)

  • 请求代码示例如下:

    from ai_service_python_sdk.client.api_client import ApiClient
    from ai_service_python_sdk.client.api.ai_service_aigc_images_api import AIGCImagesApi
    
    host = 'http://ai-service.ce8cc13b6421545749e7b4605f3d02607.cn-hangzhou.alicontainer.com'
    appId = 'YOUR-APPID'
    token = 'YOUR-TOKEN'
    
    client  = ApiClient(host, appId, token)
    api     = AIGCImagesApi(client)  # noqa: E501
    
    # 输入训练的图片,以URL形式存在。
    images = [
        'https://xxx/0.jpg',
        'https://xxx/1.jpg',
        'https://xxx/2.jpg',
        'https://xxx/3.jpg',
        'https://xxx/4.jpg',
        'https://xxx/5.jpg'
    ]
    response = api.aigc_images_train(images, <model_name>, <configure>)
    
    # 请求流水号。
    request_id = response.request_id
    # 请求状态。
    code = response.code
    # 请求状态具体信息。
    message = response.message
    # 请求返回内容。
    data = response.data
    # job id
    job_id = response.data['job_id']
    # model_id
    model_id = response.data['model_id']
    # 打印返回结果。
    print(response)

    参数说明如下:

    参数

    描述

    appId

    配置为在AI写真页面查到的AppId。

    token

    配置为在AI写真页面查到的Token。

    images

    配置为训练模型使用的训练图片的URL地址,多个URL地址之间使用半角逗号(,)分隔。

    response

    请分别为该参数配置下列输入值:

    • <model_name>:模型名称,默认输入空字符串,例如''

    • <configure>:模型返回配置,默认为None,例如:None。目前没有额外的配置。

  • 响应结果示例如下:

    {'code': 'OK',
     'data': {'job_id': 11***, 'model_id': 'fa4ba43a-df55-45a4-9c31-bb0dc1e5****'},
     'message': 'success',
     'request_id': 'de314ef5-114d-4db1-b54a-332d5300780b'}

    返回结果中的各字段说明如下:

    字段

    描述

    request_id

    请求流水号,STRING类型。

    code

    请求状态码,STRING类型,取值如下:

    • OK:表示请求成功。

    • error:表示请求失败。

    message

    请求状态的详细信息。如果返回结果为success表示执行成功,对于其他返回结果,请根据具体的返回内容来确定。

    data

    返回内容详情,JSON Object类型。内部字段说明如下:

    • job_id:任务ID,INT类型。

    • model_id:本次模型训练的模型ID,是长度为36的字符串编码,STRING类型。

    您需要将上述返回结果中的job_idmodel_id保存到本地。 后续,您可以使用job_id查询训练结果,使用model_id发起写真制作服务请求。

训练结果查询(get_async_job)

  • 请求代码示例如下:

    from ai_service_python_sdk.client.api_client import ApiClient
    from ai_service_python_sdk.client.api.ai_service_job_api import AiServiceJobApi
    
    host = 'http://ai-service.ce8cc13b6421545749e7b4605f3d02607.cn-hangzhou.alicontainer.com'
    appId = 'YOUR-APPID'
    token = 'YOUR-TOKEN'
    client = ApiClient(host, appId, token)
    ai_service_job_api = AiServiceJobApi(client)
    # 结果查询。
    result = ai_service_job_api.get_async_job(<YOUR-JOB-ID>)
    # 打印返回结果。
    print(result)

    参数说明如下:

    参数

    描述

    appId

    配置为在AI写真页面查到的AppId。

    token

    配置为在AI写真页面查到的Token。

    result

    需要将<YOUR-JOB-ID>替换为模型发起训练(aigc_images_train)接口返回的job_id。

  • 响应结果示例如下:

    • 当模型训练未执行完成时,响应结果如下:

      {'code': 'OK',
       'data': {'job': {'Result': '',
                        'app_id': '2******6',
                        'create_time': '2023-08-22T16:43:35.36+08:00',
                        'id': 11***,
                        'message': 'model requesting',
                        'state': 1,
                        'type': 'Image'}},
       'message': 'success',
       'request_id': '8639143a-e147-4107-8e25-fcdeae24b0c5'}
    • 当模型训练执行完成后,响应结果如下:

      {'code': 'OK',
       'data': {'job': {'Result': '{"cost_time":1589.0886301994324, "states": [{"code":1,"frontal":false,"message":"success","url":"xxx.jpg"}],"model_id":"fa4ba43a-df55-45a4-9c31-bb0dc1e5****"}',
                        'app_id': '2******6',
                        'create_time': '2023-08-22T15:54:41.046+08:00',
                        'id': 11***,
                        'message': 'success',
                        'state': 2,
                        'type': 'Image'}},
       'message': 'success',
       'request_id': '93b77f4b-56cb-4120-b45b-f5c88941bff5'}

    返回结果中的各字段说明如下:

    参数

    描述

    request_id

    请求流水号,STRING类型。

    code

    请求状态码,STRING类型。取值如下:

    • OK:表示请求成功。

    • error:表示请求失败。

    message

    请求状态的详细信息。如果返回结果为success,则表示执行成功,对于其他返回结果,请根据具体的返回内容来确定。

    data

    返回数据详情,JSON Object类型。内部字段说明如下:

    job字段说明

    字段

    描述

    id

    任务ID,即job_id。

    app_id

    用户的AppId。

    state

    任务状态码,INT类型,取值如下:

    • 0:任务初始化。

    • 1:任务执行中。

    • 2:任务执行成功。

    • 3:任务执行失败。

    message

    任务执行信息。

    create_time

    任务创建时间。

    Result

    模型返回结果。

    Result字段说明

    字段

    描述

    cost_time

    本次训练消耗的总时间。

    states

    表示输入的每张图片的检测结果。

    model_id

    模型ID,即模型训练返回的model_id。

    states字段说明

    字段

    描述

    code

    状态码,INT类型,取值如下:

    • 0:表示未完成。

    • 1:表示成功。

    frontal

    图片中的人脸是否为正面,bool类型。

    message

    图片核验的结果信息,STRING类型。

    url

    对应的图片URL地址,STRING类型。

  • 训练错误码说明

    • 请求服务错误码如下:

      HTTP状态码

      code

      message

      说明

      400

      PARAMETER_ERROR

      not found appid

      appId填写错误。

      EXCEEDED_QUOTA_ERROR

      exceeded quota

      该账户的调用次数额度已用完。

      401

      PARAMETER_ERROR

      sign error

      token填写错误。

      404

      PARAMETER_ERROR

      model not found

      对应的模型服务未部署。

    • 结果查询错误码如下:

      HTTP状态码

      code

      message

      说明

      462

      error

      Invalid input data

      输⼊数据解析错误。

      Image not provided

      未提供训练图⽚。

      Make dir in oss Error

      创建OSS⽂件夹失败,请检查是否挂载OSS。

      Image process error

      图像预处理出错。

      469

      error

      Training - Not get best template image

      训练异常退出导致没有⽣成参考图⽚。

      Training - Not get lora weight

      训练异常退出导致没有⽣成LoRA的权重。

写真制作

  • 请求代码示例如下:

    单人写真制作请求接口(aigc_images_create)

    import base64
    
    import cv2
    import numpy as np
    from ai_service_python_sdk.client.api.ai_service_aigc_images_api import \
        AIGCImagesApi  # noqa: E501
    from ai_service_python_sdk.client.api_client import ApiClient
    
    def decode_image_from_base64jpeg(base64_image):
        image_bytes = base64.b64decode(base64_image)
        np_arr = np.frombuffer(image_bytes, np.uint8)
        image = cv2.imdecode(np_arr, cv2.IMREAD_COLOR)
        return image
    
    host    = "http://ai-service.ce8cc13b6421545749e7b4605f3d02607.cn-hangzhou.alicontainer.com"
    appId 	= 'YOUR-APPID'
    token 	= 'YOUR-TOKEN'
    
    client  = ApiClient(host, appId, token)
    api     = AIGCImagesApi(client)  # noqa: E501
    
    response = api.aigc_images_create(
        '<Your-Model-ID>',
        '<url>',
        '<model_name>', <configure>
    )
    # 请求流水号。
    request_id = response.request_id
    # 请求状态。
    code = response.code
    # 请求状态具体信息。
    message = response.message
    # 请求返回内容。
    data = response.data
    print(response)
    image = data['image']
    image = decode_image_from_base64jpeg(image)
    cv2.imwrite("1.jpg", image)
    print(data['cost_time'])

    参数说明如下:

    参数

    描述

    appId

    配置为在AI写真页面查到的AppId。

    token

    配置为在AI写真页面查到的Token。

    response

    请分别为该参数配置下列输入值:

    • <Your-Model-ID>:替换为模型发起训练(aigc_images_train)接口返回的model_id。

    • <url>:替换为模板图片的URL路径,该图片包含单张人脸。例如https://xxx/single_template.jpg

    • <model_name>:模型名称,默认输入空字符串,例如''

    • <configure>:模型返回配置,默认为None,例如:None。内部字段说明,请参见configure内部字段说明

    configure内部字段说明

    configure内部参数

    类型

    是否必选

    描述

    lora_weights

    FLOAT

    LoRA强度,取值范围为0.5~1.0,默认值为0.9。

    理论上当值越大时,生成的图像越接近目标。但值太大容易导致图像失真。

    first_diffusion_steps

    INT

    第一次Stable Diffusion的步数,取值范围为20~50,默认值为50。

    不建议修改,值过低会导致图像失真。

    first_denoising_strength

    FLOAT

    第一次图像重建的强度,人物脸部的重建强度。取值范围为0.0~1.0,默认值为0.45。

    值越大进行重建的次数越多,理论上,值越大,生成图像中的人脸与目标图像的相似度越高。然而,过高的值可能导致图像失真问题。

    second_diffusion_steps

    INT

    第二次Stable Diffusion的步数。取值范围为20~50,默认值为30。

    不建议修改,值过低会导致图像失真。

    second_denoising_strength

    FLOAT

    第二次图像重建的强度,人物脸部边缘的重建强度。取值范围为0.0~1.0,默认值为0.30。

    值太大会导致图片不协调。

    more_like_me

    FLOAT

    更像本人的强度,人像融合的比例。取值范围为0.0~1.0,默认值为0.50。

    值越大越像本人,但值太大会导致图片真实感降低。

    crop_face_preprocess

    BOOL

    是否裁剪图像后进行重建:

    • True(默认值)

    • False

    apply_face_fusion_before

    BOOL

    是否进行第一次人像融合:

    • True(默认值):开启后会进行人像融合。

    • False:关闭后会导致相似度降低。

    apply_face_fusion_after

    BOOL

    是否进行第二次人像融合:

    • True(默认值):开启后会进行人像融合。

    • False:关闭后会导致相似度降低。

    color_shift_middle

    BOOL

    是否进行第一次颜色矫正:

    • True(默认值):开启后会进行颜色矫正,使得输出图片的肤色更像模板。

    • False:关闭后不会矫正颜色,存在颜色偏差的可能。

    color_shift_last

    BOOL

    是否进行第二次颜色矫正:

    • True(默认值):开启后会进行颜色矫正,使得输出图片的肤色更像模板。

    • False:关闭后不会矫正颜色,存在颜色偏差的可能。

    background_restore

    BOOL

    是否重建背景:

    • True:开启后会进行背景重建。理论上使图像更加自然,但也会改变背景并且增加生成图像的耗时。

    • False(默认值):关闭背景重建功能。

    skin_retouching_bool

    BOOL

    是否进行皮肤平滑处理:

    • True:开启后会对皮肤进行平滑和亮度处理,会使图片看起来更加美观,但可能会导致皮肤过白的效果。

    • False(默认值):关闭后可以提高皮肤的质感。

    photo_enhancement_bool

    BOOL

    是否进行人像增强处理:

    • True(默认值):开启后会进行人像修复或超分处理,用于提高生成图片的质量。

    • False:关闭人像增强处理。

    photo_enhancement_method

    STR

    人像增强方式,取值如下:

    • photo_fix(默认值):进行图像修复,可能会导致图像失真,但它可以修复图像中不合理的部分,这可能会导致一些皮肤质感的损失。

    • super_resolution:仅进行图像超分处理,会更大程度的保留原图。

    makeup_transfer

    BOOL

    是否进行妆容迁移:

    • True:开启妆容迁移功能后,可以防止图像过于素颜,但也有可能导致图像与用户实际样貌有一些不符。

    • False(默认值):关闭妆容迁移功能。

    makeup_transfer_ratio

    FLOAT

    进行妆容迁移的强度,取值范围为0.0~1.0,默认值为0.5。

    理论上值越大迁移的比例也就越大,生成的妆容也越接近模板。但这可能导致图像和用户实际样貌有一些差异。

    face_shape_match

    BOOL

    是否进行脸型适配:

    • True:开启后,控制的强度会减弱,使得生成图像中的脸型和皮肤质感更加贴近用户的实际特征。

    • False(默认值):关闭脸型适配功能。

    ipa_control

    BOOL

    是否进行ipa(ip-adapter)控制:

    • True:开启后会提高人像的相似度,使其更像参考图片。

    • False(默认值):关闭ipa控制功能。

    ipa_weight

    FLOAT

    表示ipa(ip-adapter)的控制强度。取值范围为0.0~1.0,默认值为0.5。理论上当值越大时,生成的图像越接近目标。但值太大容易导致图像失真。

    style_name

    STRING

    用于设置生成的图像风格,取值如下:

    • Realistic(默认值):真实风格。

    • Anime:漫画风格。

    lcm_accelerate

    BOOL

    是否进行lcm(latent code manipulation )加速:

    • False(默认值):不进行lcm加速。

    • True:进行Icm加速。

    sharp_ratio

    FLOAT

    表示锐化程度,取值范围为0.0~1.0,默认值为0.15。适当的值可以提高图像清晰度。值过高会导致图像失真。

    多人写真制作请求接口(aigc_images_create_by_multi_model_ids)

    import base64
    import cv2
    import numpy as np
    from ai_service_python_sdk.client.api.ai_service_aigc_images_api import \
        AIGCImagesApi  # noqa: E501
    from ai_service_python_sdk.client.api_client import ApiClient
    
    def decode_image_from_base64jpeg(base64_image):
        image_bytes = base64.b64decode(base64_image)
        np_arr = np.frombuffer(image_bytes, np.uint8)
        image = cv2.imdecode(np_arr, cv2.IMREAD_COLOR)
        return image
    
    host    = "http://ai-service.ce8cc13b6421545749e7b4605f3d02607.cn-hangzhou.alicontainer.com"
    appId 	= 'YOUR-APPID'
    token 	= 'YOUR-TOKEN'
    
    client  = ApiClient(host, appId, token)
    api     = AIGCImagesApi(client)  # noqa: E501
    
    response = api.aigc_images_create_by_multi_model_ids(
        ['<Your-Model-ID1>', '<Your-Model-ID2>'],
        '<url>',
        '<model_name>', <configure>
    )
    # 请求流水号。
    request_id = response.request_id
    # 请求状态。
    code = response.code
    # 请求状态具体信息。
    message = response.message
    # 请求返回内容。
    data = response.data
    print(response)
    image = data['image']
    image = decode_image_from_base64jpeg(image)
    cv2.imwrite("1.jpg", image)
    print(data['cost_time'])

    参数说明如下:

    参数

    描述

    appId

    配置为在AI写真页面查到的AppId。

    token

    配置为在AI写真页面查到的Token。

    response

    请在该参数中分别配置以下传入的值:

    • <Your-Model-ID1><Your-Model-ID2>:分别替换为模型发起训练(aigc_images_train)接口返回的model_id。

    • <url>:替换为模板图片的URL路径,该图片包含多张人脸,且人脸数量和所给的Model_id一致。例如http://xxx/multi_template.jpg

    • <model_name>:模型名称,默认输入空字符串,例如''

    • <configure>:模型返回配置,默认为None,例如:None。内部字段说明,请参见configure内部字段说明

    configure内部字段说明

    configure内部参数

    类型

    是否必选

    描述

    lora_weights

    FLOAT

    LoRA强度,取值范围为0.5~1.0,默认值为0.9。

    理论上当值越大时,生成的图像越接近目标。但值太大容易导致图像失真。

    first_diffusion_steps

    INT

    第一次Stable Diffusion的步数,取值范围为20~50,默认值为50。

    不建议修改,值过低会导致图像失真。

    first_denoising_strength

    FLOAT

    第一次图像重建的强度,人物脸部的重建强度。取值范围为0.0~1.0,默认值为0.45。

    值越大,进行重建的次数越多,理论上当值越大时,生成的图像越接近目标。但值太大容易导致图像失真。

    second_diffusion_steps

    INT

    第二次Stable Diffusion的步数。取值范围为20~50,默认值为30。

    不建议修改,过低会导致图像失真。

    second_denoising_strength

    FLOAT

    第二次图像重建的强度,人物脸部边缘的重建强度。取值范围为0.0~1.0,默认值为0.30。

    值太大会导致图片不协调。

    more_like_me

    FLOAT

    更像本人的强度,人像融合的比例。取值范围为0.0~1.0,默认值为0.50。

    值越大越像本人,但值太大会导致图片真实感降低。

    crop_face_preprocess

    BOOL

    是否裁剪图像后进行重建:

    • True(默认值)

    • False

    apply_face_fusion_before

    BOOL

    是否进行第一次人像融合:

    • True(默认值):开启后会进行人像融合。

    • False:关闭后会导致人像相似度降低。

    apply_face_fusion_after

    BOOL

    是否进行第二次人像融合:

    • True(默认值):开启后会进行人像融合。

    • False:关闭后会导致人像相似度降低。

    color_shift_middle

    BOOL

    是否进行第一次颜色矫正:

    • True(默认值):开启后会进行颜色矫正,使得输出图片的肤色更像模板。

    • False:关闭后不会进行矫正颜色,存在颜色偏差的可能。

    color_shift_last

    BOOL

    是否进行第二次颜色矫正:

    • True(默认值):开启后会进行颜色矫正,使得输出图片的肤色更像模板。

    • False:关闭后不会进行矫正颜色,存在颜色偏差的可能。

    background_restore

    BOOL

    是否重建背景:

    • True:开启后会进行背景重建。理论上使图像更加自然,但也会改变背景并且增加生成图像的耗时。

    • False(默认值):关闭背景重建功能。

    skin_retouching_bool

    BOOL

    是否进行皮肤平滑处理:

    • True:开启后会对皮肤进行平滑和亮度处理,会使图片看起来更加美观,但可能会导致皮肤过白的效果。

    • False(默认值):关闭后可以提高皮肤的质感。

    photo_enhancement_bool

    BOOL

    是否进行人像增强处理:

    • True(默认值):开启后会进行人像修复或超分处理,用于提高生成图片的质量。

    • False:关闭人像增强处理。

    photo_enhancement_method

    STR

    人像增强方式,取值如下:

    • photo_fix(默认值):进行图像修复,可能会导致图像失真,但它可以修复图像中不合理的部分,这可能会导致一些皮肤质感的损失。

    • super_resolution:仅进行图像超分处理,会更大程度的保留原图。

    makeup_transfer

    BOOL

    是否进行妆容迁移:

    • True:开启妆容迁移功能后,可以防止图像过于素颜,但也有可能导致图像与用户实际样貌有一些不符。

    • False(默认值):关闭妆容迁移功能。

    makeup_transfer_ratio

    FLOAT

    进行妆容迁移的强度,取值范围为0.0~1.0,默认值为0.5。

    理论上值越大迁移的比例也就越大,生成的妆容也越接近模板。但这可能导致图像和用户实际样貌有一些差异。

    face_shape_match

    BOOL

    是否进行脸型适配:

    • True:开启后,控制的强度会减弱,使得生成图像中的脸型和皮肤质感更加贴近用户的实际特征。

    • False(默认值):关闭脸型适配功能。

    ipa_control

    BOOL

    是否进行IPA控制:

    • True:开启后会提高人像的相似度,但容易受参考图片的影响。

    • False(默认值):关闭IPA控制功能。

    ipa_weight

    FLOAT

    表示IPA的控制强度。取值范围为0.0~1.0,默认值为0.5。理论上当值越大时,生成的图像越接近目标。但值太大容易导致图像失真。

    style_name

    STRING

    用于设置生成的图像风格,取值如下:

    • Realistic(默认值):真实风格。

    • Anime:漫画风格。

    lcm_accelerate

    BOOL

    是否进行Icm加速:

    • False(默认值):不进行Icm加速。

    • True:进行Icm加速。

    sharp_ratio

    FLOAT

    表示锐化程度,取值范围为0.0~1.0,默认值为0.15。适当的值可以提高图像清晰度,值过高会导致图像失真。

  • 响应结果示例如下:

    {
      'code': 'OK',
      'data': {
          'cost_time': 21.705406427383423,
          'image': '/9j/4AAQSkZJRgABAQAAAQABAAD/.............2wBDAAgGBgcGBQgHBwcJCQgK',
      		'model_id': 'fa4ba43a-df55-45a4-9c31-bb0dc1e5****'
      },
      'message': 'success',
      'request_id': 'df5454ca-07ec-4a15-be50-7beaba42f36b'
    }

    返回结果中的各字段说明如下:

    字段

    描述

    request_id

    请求流水号,STRING类型。

    code

    请求状态码:

    • OK:表示请求成功。

    • error:表示请求失败。

    message

    请求状态的详细信息。如果返回结果为success表示执行成功,对于其他返回结果,请根据具体的返回内容来确定。

    data

    返回内容详情,JSON Object类型。内部字段说明如下:

    • model_id:用户的模型ID。

    • image:生成AI写真的参考模板图片,Base64编码。

    • cost_time:写真制作消耗的时间,FLOAT类型。

  • 相关错误码说明

    • 请求服务错误码如下:

      HTTP状态码

      code

      message

      说明

      400

      PARAMETER_ERROR

      not found appid

      appId填写错误。

      EXCEEDED_QUOTA_ERROR

      exceeded quota

      该账户的调用次数额度已用完。

      401

      PARAMETER_ERROR

      sign error

      token填写错误。

      404

      PARAMETER_ERROR

      model not found

      对应的模型服务未部署。

    • 结果查询错误码如下:

      HTTP状态码

      code

      message

      说明

      462

      error

      Invalid input data. Please check the input dict.

      输⼊数据解析错误。

      mage not provided. Please check the template_image.

      未提供写真制作的模板图⽚。

      Prompts get error. Please check the model_id.

      请检查提供的model_id格式。

      Roop image decord error. Pleace check the user's lora is trained or not.

      Roop图片不存在,请检查是否已经完成模型训练。

      Template image decord error. Please Give a new template.

      模板图片解码错误,请提供⼀张新的模板图片。

      There is not face in template. Please Give a new template.

      模板图像不存在⼈脸,请提供一个新的模板图片。

      Template image process error. Please Give a new template.

      模板图⽚预处理错误,请提供⼀张新的模板图片。

      469

      error

      First Face Fusion Error, Can't get face in template image.

      第⼀次⼈脸融合出错。

      First Stable Diffusion Process error. Check the webui status.

      第⼀次Stable Diffusion处理出错。

      Second Face Fusion Error, Can't get face in template image.

      第⼆次⼈脸融合出错。

      Second Stable Diffusion Process error. Check the webui status.

      第⼆次Stable Diffusion处理出错。

      Please confirm if the number of faces in the template corresponds to the user ID.

      请检查所给的model_id数量与人脸数量是否相符。

      Third Stable Diffusion Process error. Check the webui status.

      背景处理出错,请更换模板。

      500

      error

      Face id image decord error. Pleace check the user's lora is trained or not.

      用户上传的图片解码异常,请检查是否已经完成模型训练。

端到端流程示例代码

端到端流程的代码示例如下。当代码执行成功后,会在当前目录生成AI写真制作图片。

from ai_service_python_sdk.client.api_client import ApiClient
from ai_service_python_sdk.client.api.ai_service_aigc_images_api import AIGCImagesApi
from ai_service_python_sdk.client.api.ai_service_job_api import AiServiceJobApi
import logging
import sys
import time
import base64
import cv2
import numpy as np

host    = "http://ai-service.ce8cc13b6421545749e7b4605f3d02607.cn-hangzhou.alicontainer.com"
appId 	= 'YOUR-APPID'
token 	= 'YOUR-TOKEN'

def decode_image_from_base64jpeg(base64_image):
    image_bytes = base64.b64decode(base64_image)
    np_arr = np.frombuffer(image_bytes, np.uint8)
    image = cv2.imdecode(np_arr, cv2.IMREAD_COLOR)
    return image

def Check(client, images):
    # 核验请求。
    response = api.aigc_images_check(images, '', None)
    # 请求流水号。
    request_id = response.request_id
    # 请求状态。
    code = response.code
    # 请求状态具体信息。
    message = response.message
    # 请求返回内容。
    data = response.data

    # 打印返回结果。
    if code != "OK":
        logging.error(f"aigc_images_check failed,request id is {request_id}")
        logging.error(message)
        sys.exit(-1)
    else:
        for check_result in data['check_results']:
            if check_result['code'] != 1:
                logging.error(f"check {check_result['url']} failed, message is {check_result['message']}")
                sys.exit(-1)
        logging.info("check images done")


def Train(client, images):
    # 训练请求。
    response = api.aigc_images_train(images, '', None)
    request_id = response.request_id
    code = response.code
    message = response.message
    data = response.data
    # 打印返回结果。
    if code != "OK":
        logging.error(f"aigc_images_train failed, request id is {request_id}")
        logging.error(message)
        sys.exit(-1)
    else:  
        # job id
        job_id = response.data['job_id']
        # model_id
        model_id = response.data['model_id']
        logging.info(f"train job_id is {job_id}")
        logging.info(f"train moded_id is {model_id}")

    if isinstance(job_id, int):
        while True:
            ai_service_job_api = AiServiceJobApi(client)
            response = ai_service_job_api.get_async_job(job_id)
            request_id = response.request_id
            code = response.code
            message = response.message
            data = response.data
            
            if code != "OK":
                logging.error(f"get_async_job failed, request id is {request_id}")
                logging.error(message)
                sys.exit(-1)
            else:
                state = data["job"]["state"]
                if state == 2:
                    logging.info(f"model {model_id} trained successfully")
                    break
                elif state != 3:
                    logging.info(f"training model {model_id}")
                    time.sleep(10)
                else:
                    logging.error(f"model {model_id} trained failed")
                    logging.error(f"message: {message}")
                    break
        if state != 2:
            sys.exit(-1)
    return model_id

def Create(model_id, template_image):
    # create image。
    response = api.aigc_images_create(model_id, template_image,'', None)
    # 请求流水号。
    request_id = response.request_id
    # 请求状态。
    code = response.code
    # 请求状态具体信息。
    message = response.message
    # 请求返回内容。
    data = response.data
    if code != "OK":
        logging.error(f"aigc_images_create failed, model_id is {model_id}")
        sys.exit(-1)
    else:
        image = data['image']
        image = decode_image_from_base64jpeg(image)
        cv2.imwrite("single_out.jpg", image)
        logging.info(f"single create {data['cost_time']}")

def CreateMulti(model_ids, template_image):
    response = api.aigc_images_create_by_multi_model_ids(
        model_ids,
        template_image,
        '', None
    )
    # 请求流水号。
    request_id = response.request_id
    # 请求状态。
    code = response.code
    # 请求状态具体信息。
    message = response.message
    # 请求返回内容。
    data = response.data
    if code != "OK":
        logging.error(f"aigc_images_create_by_multi_model_ids failed, model_id is {model_id}")
        sys.exit(-1)
    else:
        image = data['image']
        image = decode_image_from_base64jpeg(image)
        cv2.imwrite("multi_out.jpg", image)
        logging.info(f"multi create cost time {data['cost_time']}")

if __name__ == "__main__":
    client = ApiClient(host, appId, token)

    api = AIGCImagesApi(client)  # noqa: E501
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

    # 输入训练的图片,以URL形式存在。
    images = [
        'https://xxx/0.jpg',
        'https://xxx/1.jpg',
        'https://xxx/2.jpeg',
        'https://xxx/3.jpeg',
    ]
    #check
    Check(client, images)
    
    model_id = Train(client, images)
    
    template_image = 'https://xxx/single_template.jpg'
    Create(model_id, template_image)
    #read the image single_out.jpg
    
    model_ids = [model_id, model_id]
    multi_template_image = 'https://xxx/multi_template.jpg'
    CreateMulti(model_ids, multi_template_image)
    #read the image multi_out.jpg

参数说明如下:

参数

描述

appId

配置为在AI写真页面查到的AppId。

token

配置为在AI写真页面查到的Token。

images

配置为训练模型使用的图片URL地址,多个URL地址之间使用半角逗号(,)分隔。

template_image

模板图片的URL地址,包含单张人脸。用于单人写真制作。

multi_template_image

模板图片的URL地址,包含多张人脸,且人脸数量和所给的model_id一致。用于多人写真制作。