全部產品
Search
文件中心

Platform For AI:AI寫真:Python SDK使用說明

更新時間:Apr 10, 2025

使用Python SDK調用AI寫真的演算法服務介面進行模型訓練和寫真製作。通過SDK,您可以定製LoRA模型,並根據模板製作寫真。本文為您介紹使用Python SDK調用介面之前的準備工作以及使用樣本。

前提條件

  • 已準備好Python環境,環境依賴Python 3.4及其以上版本。

  • 已準備好5~20張訓練圖片和1張模板圖片,用於模型訓練和寫真製作。圖片格式支援.jpg.jpeg.png等,請確保圖片的尺寸大於512×512像素。

    • 單人寫真製作:模板圖片中包含單張人臉,多張訓練圖片中的人臉屬於同一個人。

    • 多人寫真製作:模板圖片中需包含多張人臉,且人臉數量與模型訓練的model_id數量一致。

準備工作

  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寫真的介面調用流程圖如下:

各個介面的請求、響應程式碼範例和端到端的請求程式碼範例如下:

核驗請求(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>:模型名稱,預設輸入Null 字元串,例如''

    • <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>:模型名稱,預設輸入Null 字元串,例如''

    • <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>:模型名稱,預設輸入Null 字元串,例如''

    • <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>:模型名稱,預設輸入Null 字元串,例如''

    • <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一致。用於多人寫真製作。