Platform for AI (PAI) は、AI Portrait サービスのアルゴリズムサービス操作を呼び出して、モデルのトレーニングとポートレートの作成を行うことができる Python 用 AI Portrait SDK を提供しています。 SDK を使用すると、カスタム LoRA モデルを設定し、テンプレート画像に基づいてポートレートを作成できます。 このトピックでは、Python 用 AI Portrait SDK を使用して関連操作を呼び出す前に完了する必要がある準備について説明します。 また、操作の呼び出し例も示します。
前提条件
Python 環境が準備されていること。 Python 3.4 以降がサポートされています。
モデルのトレーニングとポートレートの作成のために、5 ~ 20 枚のトレーニング画像と 1 枚のテンプレート画像が準備されていること。 次の画像形式がサポートされています。
.jpg、.jpeg、.png。 各画像のサイズが 512 × 512 ピクセル以上であることを確認してください。単一人物ポートレート: テンプレート画像には人物の顔が含まれている必要があります。 複数のトレーニング画像の顔は同じ人物に属しています。
複数人物ポートレート: テンプレート画像には複数の顔が含まれている必要があり、顔の数はモデルのトレーニングに指定された model_id パラメーターの値と同じである必要があります。
準備
次のコマンドを実行して、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クライアントを初期化します。
次のコマンドを実行して、環境を初期化します。
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>
アプリケーション ID。 AI Portrait をアクティブ化すると、[AI Portrait] ページでアプリケーション ID を確認できます。
<YOUR-TOKEN>
トークン。 AI Portrait をアクティブ化すると、[AI Portrait] ページでトークンを確認できます。
サンプルコード
AI Portrait はリソースを大量に消費するサービスであり、モデルのトレーニングとポートレートの作成プロセスが含まれます。 モデルのトレーニングには通常数分かかりますが、ポートレートの作成には数十秒しかかかりません。 次の図は、API 操作を呼び出して AI ポートレートを作成するプロセスを示しています。
以下のセクションでは、関連する API 操作のサンプルリクエストとサンプルレスポンス、およびエンドツーエンドプロセスのサンプルコードを示します。
チェックリクエスト (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>) # リクエストの ID。 request_id = response.request_id # リクエストのステータス。 code = response.code # リクエストステータスの詳細。 message = response.message # モデルサービスから返されたコンテンツ。 data = response.data # 戻り値を表示します。 print(response)次の表に、主要なパラメーターを示します。
パラメーター
説明
appId
アプリケーション ID。 AI Portrait サービスをアクティブ化すると、[AI Portrait] ページでアプリケーション ID を確認できます。
token
トークン。 AI Portrait サービスをアクティブ化すると、[AI Portrait] ページでトークンを確認できます。
images
チェックする画像の URL。 複数の URL はカンマ (,) で区切ります。
response
レスポンスパラメーターには、次のフィールドが含まれています。
<model_name>: モデルの名前。 デフォルトでは、空の文字列が使用されます。 例:
''。<configure>: 返される設定項目。 デフォルト値:
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
リクエスト ID。 STRING 型です。
code
リクエストのステータスコード。 STRING 型です。 有効な値:
OK: リクエストは成功しました。
error: リクエストは失敗しました。
message
リクエストステータスの詳細。 リクエストが成功した場合、success が返されます。 他のシナリオでは、別のメッセージが返されます。
data
返されたデータの詳細。 JSON Object 型です。 パラメーター:
check_results: 各入力画像の検出結果。 各画像は、url、message、frontal のキーを含む辞書に対応します。
url: 画像の URL。
message: 画像の検出の詳細。 考えられる値については、「check_results の message フィールドの有効な値」を参照してください。
frontal: 画像の顔が正面を向いているかどうかを示します。
cost_time: サーバーが API を呼び出すのに必要な時間。
images: チェックされる画像の URL。 値は LIST 型です。
request_id: リクエストの ID。 値は STRING 型です。
モデルトレーニングの開始 (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>) # リクエストの ID。 request_id = response.request_id # リクエストのステータス。 code = response.code # リクエストステータスの詳細。 message = response.message # モデルサービスから返されたコンテンツ。 data = response.data # タスク ID job_id = response.data['job_id'] # モデル ID model_id = response.data['model_id'] # 戻り値を表示します。 print(response)次の表に、主要なパラメーターを示します。
パラメーター
説明
appId
アプリケーション ID。 AI Portrait サービスをアクティブ化すると、[AI Portrait] ページでアプリケーション ID を確認できます。
token
トークン。 AI Portrait サービスをアクティブ化すると、[AI Portrait] ページでトークンを確認できます。
images
トレーニング画像の URL。 複数の URL はカンマ (,) で区切ります。
response
レスポンスパラメーターには、次のフィールドが含まれています。
<model_name>: モデルの名前。 デフォルトでは、空の文字列が使用されます。 例:
''。<configure>: 返される設定項目。 デフォルト値:
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
リクエスト ID。 STRING 型です。
code
リクエストのステータスコード。 STRING 型です。 有効な値:
OK: リクエストは成功しました。
error: リクエストは失敗しました。
message
リクエストステータスの詳細。 リクエストが成功した場合、success が返されます。 他のシナリオでは、別のメッセージが返されます。
data
返されたデータの詳細。 JSON Object 型です。 パラメーター:
job_id: タスクの ID。 値は INT 型です。
model_id: トレーニングで使用されるモデルの ID。 ID は長さ 36 文字の文字列です。
上記のレスポンスの 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
アプリケーション ID。 AI Portrait サービスをアクティブ化すると、[AI Portrait] ページでアプリケーション ID を確認できます。
token
トークン。 AI Portrait サービスをアクティブ化すると、[AI Portrait] ページでトークンを確認できます。
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
リクエスト ID。 STRING 型です。
code
リクエストのステータスコード。 STRING 型です。 有効な値:
OK: リクエストは成功しました。
error: リクエストは失敗しました。
message
リクエストステータスの詳細。 リクエストが成功した場合、success が返されます。 他のシナリオでは、別のメッセージが返されます。
data
返されたデータの詳細。 JSON Object 型です。 内部フィールドについては、このトピックの以下のセクションを参照してください。
関連エラーコードの説明
リクエストエラーコード
HTTP ステータスコード
code
message
説明
400
PARAMETER_ERROR
not found appid
アプリケーション ID が無効です。
EXCEEDED_QUOTA_ERROR
exceeded quota
アカウントのサービス呼び出しのクォータが使い果たされました。
401
PARAMETER_ERROR
sign error
トークンが無効です。
404
PARAMETER_ERROR
model not found
リクエストされたモデルサービスはデプロイされていません。
レスポンスエラーコード
HTTP ステータスコード
code
message
説明
462
error
Invalid input data
入力データの解析中にエラーが発生しました。
Image not provided
トレーニング用の画像が提供されていません。
Make dir in oss Error
Object Storage Service フォルダーの作成に失敗しました。 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> ) # リクエストの ID。 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
アプリケーション ID。 AI Portrait サービスをアクティブ化すると、[AI Portrait] ページでアプリケーション ID を確認できます。
token
トークン。 AI Portrait サービスをアクティブ化すると、[AI Portrait] ページでトークンを確認できます。
response
レスポンスパラメーターには、次のフィールドが含まれています。
<Your-Model-ID>: 値を、aigc_images_train 操作から返されたモデル ID に置き換えます。
<url>: 値を、単一の顔を含むテンプレート画像の URL に置き換えます。 例:
https://xxx/single_template.jpg。<model_name>: モデルの名前。 デフォルトでは、空の文字列が使用されます。 例:
''。<configure>: 返される設定項目。 デフォルト値:
None。 内部フィールドについては、「configure フィールドのパラメーター」を参照してください。
複数人物ポートレートの作成 (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> ) # リクエストの ID。 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
アプリケーション ID。 AI Portrait サービスをアクティブ化すると、[AI Portrait] ページでアプリケーション ID を確認できます。
token
トークン。 AI Portrait サービスをアクティブ化すると、[AI Portrait] ページでトークンを確認できます。
response
レスポンスパラメーターには、次のフィールドが含まれています。
<Your-Model-ID1> と <Your-Model-ID2>: 値を、aigc_images_train 操作から返されたモデル ID に置き換えます。
<url>: 値を、複数の顔を含むテンプレート画像の URL に置き換えます。 画像内の顔の数は、モデルトレーニングに指定された model_id パラメーターの値と同じである必要があります。 例:
http://xxx/multi_template.jpg。<model_name>: モデルの名前。 デフォルトでは、空の文字列が使用されます。 例:
''。<configure>: 返される設定項目。 デフォルト値:
None。 内部フィールドについては、「configure フィールドのパラメーター」を参照してください。
サンプルレスポンス:
{ '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
リクエスト 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
アプリケーション ID が無効です。
EXCEEDED_QUOTA_ERROR
exceeded quota
アカウントのサービス呼び出しのクォータが使い果たされました。
401
PARAMETER_ERROR
sign error
トークンが無効です。
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.
モデル 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.
2 番目のポートレートマージ中にエラーが発生しました。
Second Stable Diffusion Process error. Check the webui status.
Stable Diffusion を使用した 2 番目の画像生成中にエラーが発生しました。
Please confirm if the number of faces in the template corresponds to the user ID.
指定したユーザー 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 CreateMulti(model_ids, template_image):
response = api.aigc_images_create_by_multi_model_ids(
model_ids,
template_image,
'', None
)
# リクエストの ID。
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(client, images)
model_id = Train(client, images)
template_image = 'https://xxx/single_template.jpg'
Create(model_id, template_image)
# single_out.jpg 画像を読み込みます
model_ids = [model_id, model_id]
multi_template_image = 'https://xxx/multi_template.jpg'
CreateMulti(model_ids, multi_template_image)
# multi_out.jpg 画像を読み込みます
次の表に、パラメーターを示します。
パラメーター | 説明 |
appId | アプリケーション ID。 AI Portrait サービスをアクティブ化すると、 [AI Portrait] ページでアプリケーション ID を確認できます。 |
token | トークン。 AI Portrait サービスをアクティブ化すると、[AI Portrait] ページでトークンを確認できます。 |
images | トレーニング画像の URL。 複数の URL はカンマ (,) で区切ります。 |
template_image | 単一の顔を含むテンプレート画像の URL。 テンプレート画像は、単一人物ポートレートを生成するために使用されます。 |
multi_template_image | 複数の顔を含むテンプレート画像の URL。 顔の数は、指定するモデル ID の数と同じである必要があります。 テンプレート画像は、複数人物ポートレートを生成するために使用されます。 |