使用Python SDK調用AI寫真的算法服務接口進行模型訓練和寫真制作。通過SDK,您可以定制LoRA模型,并根據模板制作寫真。本文為您介紹使用Python SDK調用接口之前的準備工作以及使用示例。
前提條件
已準備好Python環境,環境依賴Python 3.4及其以上版本。
已準備好5-20張訓練圖片和1張模板圖片,用于模型訓練和寫真制作。圖片格式支持
.jpg
、.jpeg
、.png
等。如果進行單人寫真制作,模板圖片中包含單張人臉即可。多張訓練圖片中的人臉屬于同一個人。
如果進行多人寫真制作,模板圖片中需包含多張人臉,且人臉數量與模型訓練的model_id數量一致。
請確保訓練圖片和模板圖片的尺寸大于512×512像素。
準備工作
安裝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
初始化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>:模型名稱,默認輸入空字符串,例如
''
。<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,分別為:
url:圖片的URL地址。
message:圖片檢測詳情。可能取值請參見check_results的message字段的可能取值。
frontal:圖片中的人臉是否為正面。
cost_time:本次API調用花費的服務端計算時長。
images:核驗的圖片URL列表,List類型。
request_id:請求流水號,STRING類型。
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_id和model_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類型。內部字段說明如下:
字段
描述
id
任務ID,即job_id。
app_id
用戶的AppId。
state
任務狀態碼,INT類型,取值如下:
0:任務初始化。
1:任務執行中。
2:任務執行成功。
3:任務執行失敗。
message
任務執行信息。
create_time
任務創建時間。
Result
模型返回結果。
字段
描述
cost_time
本次訓練消耗的總時間。
states
表示輸入的每張圖片的檢測結果。
model_id
模型ID,即模型訓練返回的model_id。
字段
描述
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內部參數
類型
是否必選
描述
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內部參數
類型
是否必選
描述
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一致。用于多人寫真制作。 |