日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

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_resultsmessage字段的可能取值

    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一致。用于多人寫真制作。