AI ポートレートソリューションを使用すると、独自の Low-Rank Adaptation (LoRA) モデルを自動的にトレーニングし、その LoRA モデルとテンプレートイメージを使用して、パーソナライズされた AI ポートレートを生成できます。Elastic Algorithm Service (EAS) は、Platform for AI (PAI) が提供するモデルサービスプラットフォームです。AI ポートレートソリューションは、EAS オンラインモデルサービスとしてデプロイ可能なアルゴリズムプロセスを定義し、AI ポートレートを生成するための関連 API 操作を提供します。このトピックでは、EAS オンラインモデルサービスをデプロイし、サービスを呼び出して AI ポートレートを生成する方法について説明します。
背景情報
EAS の特徴
EAS は、PAI が提供するモデルサービスプラットフォームです。AI ポートレートソリューションでは、EAS の以下の主要な特徴が使用されます。
カスタムイメージを使用して、検証サービス、トレーニングサービス、予測サービスなどのモデルサービスをデプロイします。EAS は、AI ポートレートソリューションのアルゴリズムプロセスに基づいて、イメージ検証、LoRA トレーニング、およびイメージ生成の API サービスを提供し、サービスの GPU インスタンスに対する負荷分散と自動スケーリングをサポートします。
サービス用の非同期キューを設定します。キューの消費状況をクエリおよび管理し、キューにプッシュされるデータの優先順位を設定できます。詳細については、「非同期推論サービス」をご参照ください。
Python および Java 用の SDK を使用してサービスを呼び出します。ビジネス固有のカスタムパラメーターを渡すことができます。詳細については、「SDK」をご参照ください。
AI ポートレートソリューションのアルゴリズムプロセス
イメージが準拠していることを確認するために、イメージの予備チェックを実行します。
イメージを前処理し、イメージの品質をチェックし、LoRA を使用してモデルを自動的にトレーニングおよび評価し、最適化されたモデルを生成します。
テンプレートイメージを前処理します。
最初の拡散でイメージを生成します。
2 番目の拡散でイメージを生成します。
前提条件
Virtual Private Cloud (VPC) が作成され、その VPC のインターネットアクセスが有効化されていること。
VPC、vSwitch、およびセキュリティグループが作成されていること。詳細については、「IPv4 CIDR ブロックを持つ VPC の作成」および「セキュリティグループの作成」をご参照ください。
VPC にインターネット NAT ゲートウェイが作成されていること。Elastic IP アドレス (EIP) がゲートウェイに関連付けられ、SNAT エントリがゲートウェイに設定されていること。詳細については、「インターネット NAT ゲートウェイの SNAT 機能を使用したインターネットアクセス」をご参照ください。
EAS が有効化され、デフォルトのワークスペースが作成されていること。詳細については、「PAI の有効化とデフォルトワークスペースの作成」をご参照ください。
Resource Access Management (RAM) ユーザーとしてモデルサービスをデプロイする場合、その RAM ユーザーに EAS の管理権限が付与されていることを確認してください。詳細については、「EAS の使用に必要な権限の付与」をご参照ください。
モデルトレーニングとポートレート作成のために、5〜20 枚のトレーニングイメージと 1 枚のテンプレートイメージが準備されていること。サポートされているイメージフォーマットは
.jpg、.jpeg、.pngです。各イメージのサイズが 512 x 512 ピクセル以上であることを確認してください。1 人のポートレート:テンプレートイメージには 1 人の顔が含まれている必要があります。複数のトレーニングイメージの顔は同一人物のものである必要があります。
複数人のポートレート:テンプレートイメージには複数の顔が含まれている必要があり、顔の数はモデルトレーニングで指定された `model_id` パラメーターの値と同じである必要があります。
制限事項
AI ポートレートソリューションは、中国 (北京) およびシンガポールリージョンでのみサポートされています。
EAS オンラインモデルサービスのデプロイ
検証サービスのデプロイ
-
PAI コンソールにログインします。ページ上部でリージョンを選択します。次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS)] をクリックします。
-
[サービスのデプロイ] をクリックします。[カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。
Custom Deployment ページで、以下の主要なパラメーターを設定します。
Basic Information セクションで、ページ上の指示に従ってサービス名をカスタマイズします。例:photog_check。
Environment Information セクションで、以下のパラメーターを設定します。
パラメーター
説明
Deployment Method
Image-based Deployment を選択し、Asynchronous Queue を選択します。
Image Configuration
Image Address を選択し、テキストボックスにイメージアドレスを入力します。
中国 (北京) リージョンのイメージアドレス:
registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:check.1.0.0.pubシンガポールリージョンのイメージアドレス:
registry.ap-southeast-1.aliyuncs.com/mybigpai/photog_pub:check.1.0.0.pub
Mount storage
以下のいずれかのマウント方法を設定します。
OSS
[Uri]:ご自身の OSS バケットパスを選択します。例:
oss://examplebucket/Mount Path:
/photog_ossに設定します。
NAS
Select File System:NAS ファイルシステムを選択します。
Mount Target:NAS マウントポイントを選択します。
File System Path:マウントする NAS のソースパスに設定します。例:
/Mount Path:
/photog_ossに設定します。
Command
python app.pyに設定します。Port Number
7860 に設定します。
Resource Information セクションで、以下のパラメーターを設定します。
パラメーター
説明
Resource Type
Public Resources を選択します。
Deployment
GPU タイプ GU30 シリーズを選択します。推奨は
ml.gu7i.c32m188.1-gu30です。Configure a system disk
120 GiB に設定します。
[非同期キュー] セクションで、以下のパラメーターを設定します。
パラメーター
説明
Resource Type
Public Resource Group を選択します。
Deployment
以下のパラメーターを設定します。
最小インスタンス数:1
vCPU:8 コア
メモリ:64 GB
Maximum Data for A Single Input Request
キュー内の各リクエストのストレージ容量不足を防ぐため、20480 KB に設定します。
Maximum Data for A Single Output
Network Information セクションで、作成した VPC、vSwitch、およびセキュリティグループを選択します。
Service Configuration セクションで、Edit ボタンをクリックし、以下の設定を追加します。以下の完全な設定例を参照して、新しいパラメーターを追加できます。
フィールド
新しいパラメーター
metadata
以下を追加します。
"rpc": { "keepalive": 3600000, "worker_threads": 1 }keepalive:単一リクエストの最大処理時間 (ミリ秒単位)。3600000 に設定します。
worker_threads:各インスタンスで EAS が同時リクエスト処理に使用するスレッド数。
デフォルトは 5 です。これは、キューに入った最初の 5 つのタスクが同じインスタンスに割り当てられることを意味します。リクエストが順序通りに処理されるように、このパラメーターを 1 に設定します。
queue
障害発生後の再配信を防ぐために
"max_delivery": 1を追加します。完全な設定例:
{ "metadata": { "name": "photog_check", "instance": 1, "rpc": { "keepalive": 3600000, "worker_threads": 1 }, "type": "Async" }, "cloud": { "computing": { "instance_type": "ml.gu7i.c32m188.1-gu30", "instances": null }, "networking": { "vswitch_id": "vsw-2ze4o9kww55051tf2****", "security_group_id": "sg-2ze0kgiee55d0fn4****", "vpc_id": "vpc-2ze5hl4ozjl4fo7q3****" } }, "features": { "eas.aliyun.com/extra-ephemeral-storage": "100Gi" }, "queue": { "cpu": 8, "max_delivery": 1, "min_replica": 1, "memory": 64000, "resource": "", "source": { "max_payload_size_kb": 20480 }, "sink": { "max_payload_size_kb": 20480 } }, "storage": [ { "oss": { "path": "oss://examplebucket/", "readOnly": false }, "properties": { "resource_type": "code" }, "mount_path": "/photog_oss" } ], "containers": [ { "image": "registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:check.1.0.0.pub", "script": "python app.py", "port": 7860 } ] }
Deploy をクリックします。
Service StatusがRunningの場合、サービスは正常にデプロイされています。
トレーニングサービスのデプロイ
-
PAI コンソールにログインします。ページ上部でリージョンを選択します。次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS)] をクリックします。
-
[サービスのデプロイ] をクリックします。[カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。
Custom Deployment ページで、以下の主要なパラメーターを設定します。
Basic Information セクションで、ページ上の指示に従ってサービス名をカスタマイズします。例:
photog_train_pmmlEnvironment Information セクションで、以下のパラメーターを設定します。
パラメーター
説明
Deployment Method
Image-based Deployment を選択し、Asynchronous Queue を選択します。
Image Configuration
Image Address を選択し、テキストボックスにイメージアドレスを入力します。
中国 (北京) リージョンのイメージアドレス:
registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:train.1.0.0.pubシンガポールリージョンのイメージアドレス:
registry.ap-southeast-1.aliyuncs.com/mybigpai/photog_pub:train.1.0.0.pub
Mount storage
以下のいずれかのマウント方法を設定します。
OSS
[Uri]:ご自身の OSS バケットパスを選択します。これは検証サービスで選択した OSS パスと同じである必要があります。例:
oss://examplebucket/Mount Path:
/photog_ossに設定します。
NAS
Select File System:NAS ファイルシステムを選択します。
Mount Target:NAS マウントポイントを選択します。
File System Path:マウントする必要がある NAS のソースパスに設定します。例:
/Mount Path:
/photog_ossに設定します。
Command
python app.pyに設定します。Port Number
7860 に設定します。
Resource Information セクションで、以下のパラメーターを設定します。
パラメーター
説明
Resource Type
Public Resources を選択します。
Deployment
GPU タイプには、GU30 シリーズのタイプを選択します。
ml.gu7i.c32m188.1-gu30を推奨します。Configure a system disk
120 GiB に設定します。
Asynchronous Queue セクションで、以下のパラメーターを設定します。
パラメーター
説明
Resource Type
Public Resources を選択します。
Deployment
以下のパラメーターを設定します。
最小インスタンス数:1
vCPU:8 コア
メモリ:64 GB
Maximum Data for A Single Input Request
キュー内の各リクエストのストレージ容量不足を避けるため、20480 KB に設定します。
Maximum Data for A Single Output
Network Information セクションで、作成した VPC、vSwitch、およびセキュリティグループを選択します。
Service Configuration セクションで、Edit をクリックし、以下の設定を追加します。以下の完全な設定例を参照して、新しいパラメーターを追加できます。
フィールド
新しいパラメーター
autoscaler
(オプション) 水平自動スケーリング設定。詳細については、「水平自動スケーリング」をご参照ください。
"behavior": { "scaleDown": { "stabilizationWindowSeconds": 60 } }, "max": 5, "min": 1, "strategies": { "queue[backlog]": 1 }metadata
以下のパラメーターを追加します。
"rpc": { "keepalive": 3600000, "worker_threads": 1 }keepalive:単一リクエストの最大処理時間 (ミリ秒単位)。3600000 に設定します。
worker_threads:各インスタンスで EAS が同時リクエスト処理に使用するスレッド数。
デフォルト値は 5 です。これは、キューに入った最初の 5 つのタスクが同じインスタンスに割り当てられることを意味します。リクエストが順序通りに処理されるように、このパラメーターを 1 に設定します。
queue
障害発生後の再配信を防ぐために
"max_delivery": 1を追加します。完全な設定例:
{ "autoscaler": { "behavior": { "scaleDown": { "stabilizationWindowSeconds": 60 } }, "max": 5, "min": 1, "strategies": { "queue[backlog]": 1 } }, "metadata": { "name": "photog_train_pmml", "instance": 1, "rpc": { "keepalive": 3600000, "worker_threads": 1 }, "type": "Async" }, "cloud": { "computing": { "instance_type": "ml.gu7i.c32m188.1-gu30", "instances": null }, "networking": { "vswitch_id": "vsw-2ze4o9kww55051tf2****", "security_group_id": "sg-2ze0kgiee55d0fn4****", "vpc_id": "vpc-2ze5hl4ozjl4fo7q3****" } }, "features": { "eas.aliyun.com/extra-ephemeral-storage": "120Gi" }, "queue": { "cpu": 8, "max_delivery": 1, "min_replica": 1, "memory": 64000, "resource": "", "source": { "max_payload_size_kb": 20480 }, "sink": { "max_payload_size_kb": 20480 } }, "storage": [ { "oss": { "path": "oss://examplebucket/", "readOnly": false }, "properties": { "resource_type": "code" }, "mount_path": "/photog_oss" } ], "containers": [ { "image": "registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:train.1.0.0.pub", "script": "python app.py", "port": 7860 } ] }
Deploy をクリックします。
Service Status が Running になると、サービスは正常にデプロイされています。
予測サービスのデプロイ
-
PAI コンソールにログインします。ページ上部でリージョンを選択します。次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS)] をクリックします。
-
[サービスのデプロイ] をクリックします。[カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。
Custom Deployment ページで、以下の主要なパラメーターを設定します。
Basic Information セクションで、ページ上の指示に従ってサービス名をカスタマイズします。例:photog_pre_pmml。
Environment Information セクションで、以下のパラメーターを設定します。
パラメーター
説明
Deployment Method
Image-based Deployment を選択し、Asynchronous Queue にチェックを入れます。
Image Configuration
Image Address を選択し、テキストボックスにイメージアドレスを入力します。AI ポートレート予測サービスと WebUI 予測サービスの両方のイメージアドレスを設定する必要があります。このセクションでは、AI ポートレート予測サービスのイメージアドレスのみを設定します。WebUI 予測サービスのイメージアドレスは、後でサービス設定セクションで設定します。サポートされているイメージのリストは以下の通りです。このソリューションでは、中国 (北京) リージョンのイメージアドレスを選択します。
中国 (北京) リージョンのイメージアドレス:
AI ポートレート予測サービス:
registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:infer.1.0.0.pubWebUI 予測サービス:
eas-registry-vpc.cn-beijing.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:3.2
シンガポールリージョンのイメージアドレス
AI ポートレート予測サービス:
registry.ap-southeast-1.aliyuncs.com/mybigpai/photog_pub:infer.1.0.0.pubWebUI 予測サービス:
eas-registry-vpc.ap-southeast-1.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:3.2
Mount storage
以下のいずれかのマウント方法を設定します。このソリューションでは OSS マウントを選択します。
OSS
[Uri]:ご自身の OSS バケットパスを選択します。これは検証サービスで選択した OSS パスと同じである必要があります。例:
oss://examplebucket/Mount Path:
/photog_ossに設定します。
NAS
Select File System:NAS ファイルシステムを選択します。
Mount Target:NAS マウントポイントを選択します。
File System Path:マウントする NAS のソースパスに設定します。例:
/Mount Path:
/photog_ossに設定します。
WebUI に必要なモデルファイルをダウンロードして解凍し、以下のスクリーンショットに示すレイアウトに従って、ご自身の OSS バケットパス
oss://examplebucket/photog_oss/webuiまたは NAS パス/photog_oss/webuiに保存します。OSS バケットパスへのファイルのアップロード方法の詳細については、「ossutil 1.0」をご参照ください。NAS パスへのファイルのアップロード方法の詳細については、「Linux ECS インスタンスへのファイルシステムのマウント」および「ファイルの管理」をご参照ください。
Environment Variable
Add をクリックして、以下の 2 つの環境変数を追加します。
変数名:
URL。変数値:http://127.0.0.1:8000変数名:
AUTHORIZATION。変数値:=
Command
python app.pyに設定します。Port Number
7860 に設定します。
Resource Information セクションで、以下のパラメーターを設定します。
パラメーター
説明
Resource Type
Public Resources を選択します。
Deployment
GPU GU30 シリーズタイプを選択します。推奨は
ml.gu7i.c32m188.1-gu30です。Configure a system disk
120 GiB に設定します。
Asynchronous Queue セクションで、以下のパラメーターを設定します:
パラメーター
説明
Resource Type
Public Resources を選択します。
Deployment
以下のパラメーターを設定します。
最小インスタンス数:1
vCPU:8 コア
メモリ:64 GB
Maximum Data for A Single Input Request
20480 KB に設定します。これにより、キュー内の各リクエストのストレージ容量不足を防ぎます。
Maximum Data for A Single Output
Network Information セクションで、作成した VPC、vSwitch、およびセキュリティグループを選択します。
Service Configuration セクションで、以下の設定を追加します。以下の完全な設定例を参照して、新しいパラメーターを追加できます。
フィールド
新しいパラメーター
metadata
以下のパラメーターを追加します。
"rpc": { "keepalive": 3600000, "worker_threads": 1 }keepalive:単一リクエストの最大処理時間 (ミリ秒単位)。3600000 に設定します。
worker_threads:各インスタンスで EAS が同時リクエスト処理に使用するスレッド数。
デフォルトは 5 です。これは、キューに入った最初の 5 つのタスクが同じインスタンスに割り当てられることを意味します。リクエストが順序通りに処理されるように、このパラメーターを 1 に設定することを推奨します。
containers
以下のパラメーターを追加します。
{ "image": "eas-registry-vpc.cn-beijing.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:3.2", "port": 8000, "script": "./webui.sh --listen --port 8000 --skip-version-check --no-hashing --no-download-sd-model --skip-install --api --filebrowser --sd-dynamic-cache --data-dir /photog_oss/photog/webui/" }これらは、WebUI 予測サービスのイメージと、対応する実行コマンドおよびポート番号を表します。
queue
障害発生後の再配信を防ぐために、パラメーター
"max_delivery": 1を追加します。完全な設定例:
{ "metadata": { "name": "photog_pre_pmml", "instance": 1, "rpc": { "keepalive": 3600000, "worker_threads": 1 }, "type": "Async" }, "cloud": { "computing": { "instance_type": "ecs.gn6v-c8g1.2xlarge", "instances": null }, "networking": { "vswitch_id": "vsw-2ze4o9kww55051tf2****", "security_group_id": "sg-2ze0kgiee55d0fn4****", "vpc_id": "vpc-2ze5hl4ozjl4fo7q3****" } }, "features": { "eas.aliyun.com/extra-ephemeral-storage": "120Gi" }, "queue": { "cpu": 8, "max_delivery": 1, "min_replica": 1, "memory": 64000, "resource": "", "source": { "max_payload_size_kb": 20480 }, "sink": { "max_payload_size_kb": 20480 } }, "storage": [ { "oss": { "path": "oss://examplebucket/", "readOnly": false }, "properties": { "resource_type": "code" }, "mount_path": "/photog_oss" } ], "containers": [ { "image": "registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:infer.1.0.0.pub", "env": [ { "name": "URL", "value": "http://127.0.0.1:8000" }, { "name": "AUTHORIZATION", "value": "=" } ], "script": "python app.py", "port": 7861 }, { "image": "eas-registry-vpc.cn-beijing.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:3.2", "port": 8000, "script": "./webui.sh --listen --port 8000 --skip-version-check --no-hashing --no-download-sd-model --skip-install --api --filebrowser --sd-dynamic-cache --data-dir /photog_oss/photog/webui/" } ] }
Deploy をクリックします。
Service Status が Running になると、サービスは正常にデプロイされています。
サービスの呼び出し
ステップ 1: 検証サービスの呼び出し
Elastic Algorithm Service (EAS) ページで、サービス名をクリックして Overview ページを開きます。Basic Information セクションで、View Endpoint Information をクリックします。Asynchronous Invocation タブで、サービスのエンドポイントとトークンを取得します。

イメージ検証のための入力キューを作成し、入力キューの情報をクエリします。
リクエスト例:
SDK for Python
import json from eas_prediction import QueueClient # 入力データを受信するための入力キューオブジェクトを作成します。 input_queue = QueueClient('182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'photog_check') input_queue.set_token('<token>') input_queue.init() datas = json.dumps( { 'request_id' : 12345, 'images' : ["xx.jpg", "xx.jpg"], # URL のリスト 'configure' : { 'face_reconize' : True, # すべての画像が同一人物のものであるか判断します } } ) index, request_id = input_queue.put(f'{datas}') print(index, request_id) # 入力キューの詳細をクエリします。 attrs = input_queue.attributes() print(attrs)以下の表に、主要なパラメーターを説明します。
パラメーター
説明
デフォルト値
必須
input_queue
取得した検証サービスのエンドポイント。値は STRING 型である必要があります。このパラメーターの設定方法の詳細については、上記のコードをご参照ください。
N/A
はい
<token>
取得した検証サービスのトークン。値は STRING 型である必要があります。
N/A
はい
request_id
リクエストの ID。値は STRING 型である必要があります。
N/A
はい
images
モデルトレーニングに使用されるイメージの URL。値は LIST 型である必要があります。
N/A
はい
configure
face_reconize
イメージ内の顔が同一人物のものであるかどうかを確認するかどうかを指定します。値は BOOLEAN 型である必要があります。
False
いいえ
SDK for Java
import com.aliyun.openservices.eas.predict.http.HttpConfig; import com.aliyun.openservices.eas.predict.http.QueueClient; import com.aliyun.openservices.eas.predict.queue_client.QueueUser; import org.apache.commons.lang3.tuple.Pair; public class AsyncTest { public static void main(String[] args) throws Exception { /** キューサービスクライアントを作成します。*/ String queueEndpoint = "182848887922****.cn-shanghai.pai-eas.aliyuncs.com"; String inputQueueName = "photog_check"; String queueToken = "YmE3NDkyMzdiMzNmMGM3ZmE4ZmNjZDk0M2NiMDA3OTZmNzc1MT****=="; QueueClient inputQueue = new QueueClient(queueEndpoint, inputQueueName, queueToken, new HttpConfig(), new QueueUser()); /** リクエストデータ。*/ String data = "{\n" + " 'request_id': 12345,\n" + " 'images' : [\"xx.jpg\", \"xx.jpg\"],\n" + " 'configure' : {\n" + " 'face_reconize' : True,\n" + " }\n" + "}"; Pair<Long, String> entry = inputQueue.put(data.getBytes(), null); System.out.println(String.format("index = %s, request id = %s", entry.getKey(), entry.getValue())); // 入力キューの詳細をクエリします。 System.out.println(inputQueue.attributes()); /** クライアントをシャットダウンします。*/ inputQueue.shutdown(); } }以下の表に、主要なパラメーターを説明します。
パラメーター
説明
デフォルト値
必須
queueEndpoint
取得した検証サービスのエンドポイント。値は STRING 型である必要があります。
N/A
はい
inputQueueName
検証サービスの名前。値は STRING 型である必要があります。
N/A
はい
queueToken
取得した検証サービスのトークン。値は STRING 型である必要があります。
N/A
はい
request_id
リクエストの ID。値は STRING 型である必要があります。
N/A
はい
images
モデルトレーニングに使用されるイメージの URL。値は LIST 型である必要があります。
N/A
はい
configure
face_reconize
イメージ内の顔が同一人物のものであるかどうかを確認するかどうかを指定します。値は BOOLEAN 型である必要があります。
False
いいえ
応答例:
SDK for Python
1 6bdea119-01f3-4728-b3d3-b0af366ad3eb {'consumers.list.[0]': 'Id: photog_check.photog-check-738569a9-798897bdf5-76****, Index: 0, Pending: 0, Status: Running, Idle: 1h10m4.997s, Window: 1, Slots: 1, AutoCommit: false', 'consumers.stats.total': '1', 'consumers.status.total': '1', 'groups.list.[0]': 'Id: photog_check, Index: 1, Pending: 1, Delivered: 2, Consumers: 1', 'meta.header.group': 'X-EAS-QueueService-Gid', 'meta.header.priority': 'X-EAS-QueueService-Priority', 'meta.header.user': 'X-EAS-QueueService-Uid', 'meta.name': 'photog-check-queue-95e006df', 'meta.state': 'Normal', 'stream.approxMaxLength': '1439', 'stream.firstEntry': '1', 'stream.lastEntry': '1', 'stream.length': '1', 'stream.maxPayloadBytes': '20971520'}SDK for Java
index = 2, request id = 61132b43-a527-40dc-89bb-a9a48316ddea {"meta.header.priority":"X-EAS-QueueService-Priority","consumers.status.total":"1","stream.firstEntry":"2","stream.maxPayloadBytes":"20971520","consumers.stats.total":"1","stream.approxMaxLength":"1439","stream.length":"1","groups.list.[0]":"Id: photog_check, Index: 2, Pending: 1, Delivered: 3, Consumers: 1","meta.header.group":"X-EAS-QueueService-Gid","stream.lastEntry":"2","consumers.list.[0]":"Id: photog_check.photog-check-738569a9-798897bdf5-76j48, Index: 2, Pending: 0, Status: Running, Idle: 19m11.174s, Window: 1, Slots: 1, AutoCommit: false","meta.name":"photog-check-queue-95e006df","meta.state":"Normal","meta.header.user":"X-EAS-QueueService-Uid"} Process finished with exit code 0上記のコードの主要なパラメーター:
index:EAS に送信されたすべてのリクエストにおける、当該リクエストの位置。
request_id:リクエストの ID。この ID は出力結果のクエリに使用されます。
その他のパラメーターは、入力キューの詳細を示します。
出力キューを作成し、出力結果をクエリして、イメージが準拠しているかどうかを確認します。
リクエスト例:
SDK for Python
# 出力キューの処理結果をサブスクライブするための出力キューオブジェクトを作成します。 sink_queue = QueueClient('182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'photog_check/sink') sink_queue.set_token('<token>') sink_queue.init() sink_queue.get(request_id, auto_delete=True)[0].data.decode('utf-8')上記のコードの主要なパラメーター:
sink_queue:取得した検証サービスのエンドポイント。
<token>:取得した検証サービスのトークン。
auto_delete:クエリされた出力結果を出力キューから削除するかどうかを指定します。デフォルト値:True。`request_id` パラメーターのみを指定し、
auto_deleteパラメーターを指定しない場合、クエリされた出力結果は出力キューから削除されます。ほとんどの場合、出力結果は出力キューから削除する必要があるため、auto_deleteパラメーターを明示的に True に設定することを推奨します。
SDK for Java
import com.aliyun.openservices.eas.predict.http.HttpConfig; import com.aliyun.openservices.eas.predict.http.QueueClient; import com.aliyun.openservices.eas.predict.queue_client.DataFrame; import com.aliyun.openservices.eas.predict.queue_client.QueueUser; import org.apache.commons.lang3.tuple.Pair; import java.util.HashMap; import java.util.Map; public class AsyncPhotoTest { public static void main(String[] args) throws Exception { /** キューサービスクライアントを作成します。*/ String queueEndpoint = "166233998075****.cn-beijing.pai-eas.aliyuncs.com"; String inputQueueName = "photog_check"; String sinkQueueName = String.format("%s/sink", inputQueueName); String queueToken = "YjczMzFlYmRkMDU4YmZmMGQ4NTEwODA4NDk3NmFhODE5N2ExMzEy****"; QueueClient inputQueue = new QueueClient(queueEndpoint, inputQueueName, queueToken, new HttpConfig(), new QueueUser()); QueueClient sinkQueue = new QueueClient(queueEndpoint, sinkQueueName, queueToken, new HttpConfig(), new QueueUser()); /** リクエストデータ。*/ String data = "{\n" + " \"request_id\": 12345,\n" + " \"images\": [\"xx.jpg\", \"xx.jpg\"],\n" + " \"configure\": {\n" + " \"face_reconize\": true\n" + " }\n" + "}"; Pair<Long, String> entry = inputQueue.put(data.getBytes(), null); Long index = entry.getKey(); final String requestId = entry.getValue(); System.out.println(String.format("index = %d, request id = %s", index, requestId)); // 入力キューの詳細をクエリします。 System.out.println(inputQueue.attributes()); // 入力データをクエリします。 Map<String, String> tags = new HashMap<String, String>() { { put("requestId", requestId); } }; DataFrame[] dfs = inputQueue.get(0, 1L, 0, false, tags); if (dfs.length > 0) { System.out.println(String.format("Successfully get input data = %s, index = %d, tags = %s", new String(dfs[0].getData()), dfs[0].getIndex(), dfs[0].getTags())); } else { System.out.println("no data"); } // 出力データをクエリします。 while (true) { dfs = sinkQueue.get(0, 1L, 0, true, tags); if (dfs.length > 0) { System.out.println(String.format("Successfully get sink data = %s, tags = %s", new String(dfs[0].getData()), dfs[0].getTags())); break; } else { System.out.println("no data"); Thread.sleep(5000); } } /** クライアントをシャットダウンします。*/ inputQueue.shutdown(); sinkQueue.shutdown(); } }上記のコードの主要なパラメーター:
queueEndpoint:取得した検証サービスのエンドポイント。
inputQueueName:検証サービスの名前。
queueToken:取得した検証サービスのトークン。
images:モデルトレーニングに使用されるイメージの URL。
応答例:
SDK for Python
'{"request_id": "12345", "code": "OK", "message": "success", "data": {"request_id": 12345, "images": ["xx.jpg", "https://xxx.oss-cn-beijing.aliyuncs.com/photog/user_images/foto/train/0.jpg"], "configure": {"face_reconize": true}, "cost_time": 9.820043325424194, "check_results": [{"url": "https://xx-cn-beijing.aliyuncs.com/photog/user_images/foto/train/1.jpg", "message": "success", "code": 1, "frontal": true}, {"url": "https://xx-cn-beijing.aliyuncs.com/photog/user_images/foto/train/0.jpg", "message": "success", "code": 1, "frontal": false}]}}'SDK for Java
Successfully get sink data = {"request_id": "12345", "code": "OK", "message": "success", "data": {"request_id": 12345, "images": ["xx.jpg", "xx.jpg"], "configure": {"face_reconize": true}, "cost_time": 0.2047882080078125, "check_results": [{"url": "https://xx-cn-beijing.aliyuncs.com/photog/user_images/foto/train/1.jpg", "message": "success", "code": 1, "frontal": true}, {"url": "https://xx-cn-beijing.aliyuncs.com/photog/user_images/foto/train/0.jpg", "message": "success", "code": 1, "frontal": false}]}}以下の表に、主要なパラメーターを説明します。
パラメーター
説明
request_id
リクエストの ID。値は STRING 型です。
code
リクエストの状態コード。値は STRING 型です。有効な値:
OK:検証が完了しました。
error:検証が完了していません。
message
リクエストステータスの詳細情報。`success` の値は、イメージが準拠していることを示します。他の値が返された場合は、返されたメッセージに基づいて問題を解決してください。
data
詳細な応答内容。パラメーター:
check_results:イメージの検証結果。
url:イメージの URL。
message:イメージの検証詳細。`success` の値は、イメージが準拠していることを示します。`message` パラメーターの有効な値と対応する `code` パラメーターの値の詳細については、このトピックの「message パラメーター」セクションをご参照ください。
frontal:イメージが正面の顔のイメージであるかどうかを示します。
cost_time:サーバー側でのリクエストの処理時間。
images:検証されたイメージの URL。値は LIST 型です。
request_id:リクエストの ID。値は STRING 型です。
ステップ 2: トレーニングサービスの呼び出し
Elastic Algorithm Service (EAS) ページで、トレーニングサービス名をクリックして Overview ページを開きます。Basic Information エリアで、View Endpoint Information をクリックします。Asynchronous Invocation タブで、サービスのエンドポイントとトークンを取得します。

LoRA モデルトレーニングのための入力キューを作成し、入力キューの情報をクエリします。
リクエスト例:
SDK for Python
photog_train_pmmln import json from eas_prediction import QueueClient # 入力データを受信するための入力キューオブジェクトを作成します。 input_queue = QueueClient('182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'photog_train_pmml') input_queue.set_token('<token>') input_queue.init() datas = json.dumps( { 'request_id' : 12345, 'images' : ["xx.jpg", "xx.jpg"], # URL 'configure' : { 'user_id' : "zhoumo", # ユーザー ID } } ) index, request_id = input_queue.put(f'{datas}') print(index, request_id) # 入力キューの詳細をクエリします。 attrs = input_queue.attributes() print(attrs)以下の表に、主要なパラメーターを説明します。
パラメーター
説明
デフォルト値
必須
input_queue
取得したトレーニングサービスのエンドポイント。値は STRING 型である必要があります。このパラメーターの設定方法の詳細については、上記のコードをご参照ください。
N/A
はい
<token>
取得したトレーニングサービスのトークン。値は STRING 型である必要があります。
N/A
はい
request_id
リクエストの ID。値は STRING 型である必要があります。
N/A
はい
images
モデルトレーニングに使用されるイメージの URL。値は LIST 型である必要があります。
N/A
はい
configure
user_id
ユーザーの ID。値は STRING 型である必要があります。
N/A
はい
sex
モデルトレーニング用のイメージ内の人物の性別。
secret
いいえ
max_train_steps
トレーニングステップの総数。
400
いいえ
val_save_checkpointing_steps
2 つのモデル評価間のステップ数。
50
いいえ
SDK for Java
import com.aliyun.openservices.eas.predict.http.HttpConfig; import com.aliyun.openservices.eas.predict.http.QueueClient; import com.aliyun.openservices.eas.predict.queue_client.QueueUser; import org.apache.commons.lang3.tuple.Pair; public class AsyncTest { public static void main(String[] args) throws Exception { /** キューサービスクライアントを作成します。*/ String queueEndpoint = "182848887922****.cn-shanghai.pai-eas.aliyuncs.com"; String inputQueueName = "photog_train_pmml"; String queueToken = "YmE3NDkyMzdiMzNmMGM3ZmE4ZmNjZDk0M2NiMDA3OTZmNzc1MT****=="; QueueClient inputQueue = new QueueClient(queueEndpoint, inputQueueName, queueToken, new HttpConfig(), new QueueUser()); /** リクエストデータ。*/ String data = "{\n" + " 'request_id' : 12345,\n" + " 'images' : [\"xx.jpg\", \"xx.jpg\"],\n" + " 'configure' : {\n" + " 'user_id' : \"zhoumo\",\n" + " }\n" + " }"; Pair<Long, String> entry = inputQueue.put(data.getBytes(), null); System.out.println(String.format("index = %s, request id = %s", entry.getKey(), entry.getValue())); // 入力キューの詳細をクエリします。 System.out.println(inputQueue.attributes()); /** クライアントをシャットダウンします。*/ inputQueue.shutdown(); } }以下の表に、主要なパラメーターを説明します。
パラメーター
説明
デフォルト値
必須
queueEndpoint
取得したトレーニングサービスのエンドポイント。値は STRING 型である必要があります。
N/A
はい
inputQueueName
トレーニングサービスの名前。値は STRING 型である必要があります。
N/A
はい
queueToken
取得したトレーニングサービスのトークン。値は STRING 型である必要があります。
N/A
はい
request_id
リクエストの ID。値は STRING 型である必要があります。
N/A
はい
images
モデルトレーニングに使用されるイメージの URL。値は LIST 型である必要があります。
N/A
はい
configure
user_id
ユーザーの ID。値は STRING 型である必要があります。
N/A
はい
sex
モデルトレーニング用のイメージ内の人物の性別。
secret
いいえ
max_train_steps
トレーニングステップの総数。
400
いいえ
val_save_checkpointing_steps
2 つのモデル評価間のステップ数。
50
いいえ
応答例:
SDK for Python
2 bb4ce34d-47e4-425d-bee7-b806e29c6d78 {'consumers.list.[0]': 'Id: photog_train_pmml.photog-train-pmml-78550f91-7545766654-jpdtp, Index: 2, Pending: 0, Status: Running, Idle: 18h46m24.039s, Window: 1, Slots: 1, AutoCommit: false', 'consumers.stats.total': '1', 'consumers.status.total': '1', 'groups.list.[0]': 'Id: photog_train_pmmln, Index: 2, Pending: 1, Delivered: 3, Consumers: 1', 'meta.header.group': 'X-EAS-QueueService-Gid', 'meta.header.priority': 'X-EAS-QueueService-Priority', 'meta.header.user': 'X-EAS-QueueService-Uid', 'meta.name': 'photog-train-pmmln-queue-7a5e7cc6', 'meta.state': 'Normal', 'stream.approxMaxLength': '1438', 'stream.firstEntry': '2', 'stream.lastEntry': '2', 'stream.length': '1', 'stream.maxPayloadBytes': '20971520'}SDK for Java
index = 3, request id = ec3b7c21-c395-4490-ae42-8f66d06e9d4d {"meta.header.priority":"X-EAS-QueueService-Priority","consumers.status.total":"1","stream.firstEntry":"3","stream.maxPayloadBytes":"20971520","consumers.stats.total":"1","stream.approxMaxLength":"1438","stream.length":"1","groups.list.[0]":"Id: photog_train_pmml, Index: 3, Pending: 1, Delivered: 4, Consumers: 1","meta.header.group":"X-EAS-QueueService-Gid","stream.lastEntry":"3","consumers.list.[0]":"Id: photog_train_pmmln.photog-train-pmmln-78550f91-7545766654-jpdtp, Index: 3, Pending: 0, Status: Running, Idle: 2h30m57.08s, Window: 1, Slots: 1, AutoCommit: false","meta.name":"photog-train-pmmln-queue-7a5e7cc6","meta.state":"Normal","meta.header.user":"X-EAS-QueueService-Uid"} Process finished with exit code 0上記のコードの主要なパラメーター:
index:EAS に送信されたすべてのリクエストにおける、当該リクエストの位置。
request_id:リクエストの ID。この ID は出力結果のクエリに使用されます。
その他のパラメーターは、入力キューの詳細を示します。
出力キューを作成し、処理結果をサブスクライブして、モデルが正常にトレーニングされたかどうかを確認します。
リクエスト例:
SDK for Python
# 出力キューの処理結果をサブスクライブするための出力キューオブジェクトを作成します。 sink_queue = QueueClient('182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'photog_train_pmml/sink') sink_queue.set_token('<token>') sink_queue.init() sink_queue.get(request_id, auto_delete=True)[0].data.decode('utf-8')上記のコードの主要なパラメーター:
sink_queue:取得したトレーニングサービスのエンドポイント。
<token>:取得したトレーニングサービスのトークン。
SDK for Java
import com.aliyun.openservices.eas.predict.http.HttpConfig; import com.aliyun.openservices.eas.predict.http.QueueClient; import com.aliyun.openservices.eas.predict.queue_client.DataFrame; import com.aliyun.openservices.eas.predict.queue_client.QueueUser; import org.apache.commons.lang3.tuple.Pair; import java.util.HashMap; import java.util.Map; public class AsyncPhotoTest { public static void main(String[] args) throws Exception { /** キューサービスクライアントを作成します。*/ String queueEndpoint = "166233998075****.cn-beijing.pai-eas.aliyuncs.com"; String inputQueueName = "photog_train_pmml"; String sinkQueueName = String.format("%s/sink", inputQueueName); String queueToken = "N2E2YWI0Y2MyNjZmNjdlMWFmZjNhOTM5M2E5ZGNlMGY1NDQwZGYw****"; QueueClient inputQueue = new QueueClient(queueEndpoint, inputQueueName, queueToken, new HttpConfig(), new QueueUser()); QueueClient sinkQueue = new QueueClient(queueEndpoint, sinkQueueName, queueToken, new HttpConfig(), new QueueUser()); /** リクエストデータ。*/ String data = "{\n" + " \"request_id\": 12345,\n" + " \"images\": [\"xx.jpg\", \"xx.jpg\"],\n" + " \"configure\": {\n" + " \"user_id\": \"zhoumo\"\n" + " }\n" + "}"; Pair<Long, String> entry = inputQueue.put(data.getBytes(), null); Long index = entry.getKey(); final String requestId = entry.getValue(); System.out.println(String.format("index = %d, request id = %s", index, requestId)); // 入力キューの詳細をクエリします。 System.out.println(inputQueue.attributes()); // 入力データをクエリします。 Map<String, String> tags = new HashMap<String, String>() { { put("requestId", requestId); } }; DataFrame[] dfs = inputQueue.get(0, 1L, 0, false, tags); if (dfs.length > 0) { System.out.println(String.format("Successfully get data = %s, index = %d, tags = %s", new String(dfs[0].getData()), dfs[0].getIndex(), dfs[0].getTags())); } else { System.out.println("no data"); } // 出力データをクエリします。 while (true) { dfs = sinkQueue.get(0, 1L, 0, true, tags); if (dfs.length > 0) { System.out.println(String.format("Successfully get data = %s, tags = %s", new String(dfs[0].getData()), dfs[0].getTags())); break; } else { System.out.println("no data"); } } /** クライアントをシャットダウンします。*/ inputQueue.shutdown(); sinkQueue.shutdown(); } }上記のコードの主要なパラメーター:
queueEndpoint:取得したトレーニングサービスのエンドポイント。
inputQueueName:トレーニングサービスの名前。
queueToken:取得したトレーニングサービスのトークン。
images:モデルトレーニングに使用されるイメージの URL。
応答例:
SDK for Python
'{"request_id": "12345", "code": "OK", "message": "success", "data": {"user_id": "zhoumo", "cost_time": 272.7406361103058}}'説明応答の `code` パラメーターの値が 502 の場合、トレーニングは進行中です。
SDK for Java
... no data no data Successfully get data = {"request_id": "12345", "code": "OK", "message": "success", "data": {"user_id": "zhoumo", "cost_time": 260.7540729045868}}説明応答で
no dataが返された場合、トレーニングは進行中です。以下の表に、主要なパラメーターを説明します。
パラメーター
説明
request_id
リクエストの ID。値は STRING 型です。
code
トレーニングのステータス。有効な値:
OK:トレーニングが完了しました。
error:トレーニングが完了していません。
message
トレーニングステータスの詳細情報。`success` の値は、モデルがトレーニングされたことを示します。
data
詳細な応答内容。パラメーター:
user_id:ユーザーの ID。
cost_time:サーバー側でのリクエストの処理時間。
ステップ 3: イメージ生成インターフェイスの呼び出し
[Elastic Algorithm Service (EAS)] ページに移動し、予測サービスの名前をクリックして [概要] ページを開きます。[基本情報] セクションで、[エンドポイント情報を表示] をクリックします。[非同期呼び出し] タブで、サービスのエンドポイントとトークンを取得します。

イメージ予測のための入力キューを作成し、入力キューの情報をクエリします。
リクエスト例:
SDK for Python
import json from eas_prediction import QueueClient # 入力データを受信するための入力キューオブジェクトを作成します。 input_queue = QueueClient('182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'photog_pre_pmml') input_queue.set_token('<token>') input_queue.init() datas = json.dumps({ 'request_id' : 12345, 'template_image': "xx.jpg", 'configure' : { 'user_id' : "zhoumo", # タグを取得するためのしきい値。 } }) index, request_id = input_queue.put(f'{datas}') print(index, request_id) # 入力キューの詳細をクエリします。 attrs = input_queue.attributes() print(attrs) # リクエスト ID に基づいて特定のリクエストをクエリします。 print(input_queue.get(request_id, auto_delete=False)[0].data.decode('utf-8'))以下の表に、主要なパラメーターを説明します。
パラメーター
説明
デフォルト値
必須
input_queue
取得した予測サービスのエンドポイント。値は STRING 型である必要があります。このパラメーターの設定方法の詳細については、上記のコードをご参照ください。
N/A
はい
<token>
取得した予測サービスのトークン。値は STRING 型である必要があります。
N/A
はい
request_id
リクエストの ID。値は STRING 型である必要があります。
N/A
はい
template_image
テンプレートイメージの URL。
N/A
はい
configure
user_id
ユーザーの ID。値は STRING 型である必要があります。
N/A
はい
sex
モデルトレーニング用のイメージ内の人物の性別。値は STRING 型である必要があります。
secret
いいえ
first_diffusion_steps
最初の拡散のステップ数。値は INT 型である必要があります。
50
いいえ
first_denoising_strength
最初の拡散の強度。値は FLOAT 型である必要があります。
0.45
いいえ
second_diffusion_steps
2 番目の拡散のステップ数。値は INT 型である必要があります。
20
いいえ
second_denoising_strength
2 番目の拡散の強度。値は FLOAT 型である必要があります。
0.30
いいえ
more_like_me_before
最初の顔融合の度合い。値が高いほど類似度が高くなります。値は FLOAT 型である必要があります。
0.50
いいえ
more_like_me
2 番目の顔融合の度合い。値が高いほど類似度が高くなります。値は FLOAT 型である必要があります。
0.50
いいえ
mask_region
マスク領域。値は STRING 型である必要があります。有効な値:
edge:2 番目の拡散でエッジのみを再構築します。
face:2 番目の拡散で顔全体を再構築します。
edge
いいえ
crop_face_preprocess
ポートレート領域をトリミングした後にポートレートを再構築するかどうかを指定します。値は BOOLEAN 型である必要があります。
True
いいえ
apply_face_fusion_before
最初の顔融合を実行するかどうかを指定します。値は BOOLEAN 型である必要があります。
True
いいえ
apply_face_fusion_after
2 番目の顔融合を実行するかどうかを指定します。値は BOOLEAN 型である必要があります。
True
いいえ
color_shift_middle
最初の顔のカラーバランスを実行するかどうかを指定します。値は BOOLEAN 型である必要があります。
True
いいえ
color_shift_last
2 番目の顔のカラーバランスを実行するかどうかを指定します。値は BOOLEAN 型である必要があります。
True
いいえ
background_restore
バックグラウンドを再構築するかどうかを指定します。値は BOOLEAN 型である必要があります。
False
いいえ
skin_retouching_bool
肌の平滑化を実行するかどうかを指定します。値は BOOLEAN 型である必要があります。
True
いいえ
photo_enhancement_bool
ポートレートを強調するかどうかを指定します。値は BOOLEAN 型である必要があります。
True
いいえ
photo_enhancement_method
ポートレートを強調するために使用されるメソッド。有効な値:
photo_fix
super_resolution
photo_fix
いいえ
makeup_transfer
メイクアップを転送するかどうかを指定します。値は BOOLEAN 型である必要があります。
False
いいえ
makeup_transfer_ratio
メイクアップ転送の強度。値は FLOAT 型である必要があります。
0.50
いいえ
SDK for Java
import com.aliyun.openservices.eas.predict.http.HttpConfig; import com.aliyun.openservices.eas.predict.http.QueueClient; import com.aliyun.openservices.eas.predict.queue_client.DataFrame; import com.aliyun.openservices.eas.predict.queue_client.QueueUser; import org.apache.commons.lang3.tuple.Pair; import java.util.HashMap; import java.util.Map; public class AsyncTest { public static void main(String[] args) throws Exception { /** キューサービスクライアントを作成します。*/ String queueEndpoint = "166233998075****.cn-beijing.pai-eas.aliyuncs.com"; String inputQueueName = "photog_pre_pmml"; String queueToken = "NjViMTI2NGQxZWQxYTI1NGE5MGQ1YTQ5Y2Y2MGZjY2VlZTVmNWE1****"; QueueClient inputQueue = new QueueClient(queueEndpoint, inputQueueName, queueToken, new HttpConfig(), new QueueUser()); /** リクエストデータ。*/ String data = "{\n" + " 'request_id' : 12345, \n" + " 'template_image': \"xx.jpg\", \n" + " 'configure' : { \n" + " 'user_id' : \"zhoumo\",\n" + " } \n" + "}"; Pair<Long, String> entry = inputQueue.put(data.getBytes(), null); System.out.println(String.format("index = %s, request id = %s", entry.getKey(), entry.getValue())); // 入力キューの詳細をクエリします。 System.out.println(inputQueue.attributes()); // リクエスト ID に基づいて特定のリクエストをクエリします。 final String requestId = entry.getValue(); Map<String, String> tags = new HashMap<String, String>() { { put("requestId", requestId); } }; DataFrame df = inputQueue.get(0, 1L, 0, false, tags)[0]; System.out.println(String.format("Successfully get data = %s, tags = %s", new String(df.getData()), df.getTags())); /** クライアントをシャットダウンします。*/ inputQueue.shutdown(); } }以下の表に、主要なパラメーターを説明します。
パラメーター
説明
デフォルト値
必須
queueEndpoint
取得した予測サービスのエンドポイント。値は STRING 型である必要があります。
N/A
はい
inputQueueName
予測サービスの名前。
N/A
はい
queueToken
取得した予測サービスのトークン。値は STRING 型である必要があります。
N/A
はい
request_id
リクエストの ID。値は STRING 型である必要があります。
N/A
はい
template_image
テンプレートイメージの URL。
N/A
はい
configure
user_id
ユーザーの ID。値は STRING 型である必要があります。
N/A
はい
sex
モデルトレーニング用のイメージ内の人物の性別。値は STRING 型である必要があります。
secret
いいえ
first_diffusion_steps
最初の拡散のステップ数。値は INT 型である必要があります。
50
いいえ
first_denoising_strength
最初の拡散の強度。値は FLOAT 型である必要があります。
0.45
いいえ
second_diffusion_steps
2 番目の拡散のステップ数。値は INT 型である必要があります。
20
いいえ
second_denoising_strength
2 番目の拡散の強度。値は FLOAT 型である必要があります。
0.30
いいえ
more_like_me_before
最初の顔融合の度合い。値が高いほど類似度が高くなります。値は FLOAT 型である必要があります。
0.50
いいえ
more_like_me
2 番目の顔融合の度合い。値が高いほど類似度が高くなります。値は FLOAT 型である必要があります。
0.50
いいえ
mask_region
マスク領域。値は STRING 型である必要があります。有効な値:
edge:2 番目の拡散でエッジのみを再構築します。
face:2 番目の拡散で顔全体を再構築します。
edge
いいえ
crop_face_preprocess
ポートレート領域をトリミングした後にポートレートを再構築するかどうかを指定します。値は BOOLEAN 型である必要があります。
True
いいえ
apply_face_fusion_before
最初の顔融合を実行するかどうかを指定します。値は BOOLEAN 型である必要があります。
True
いいえ
apply_face_fusion_after
2 番目の顔融合を実行するかどうかを指定します。値は BOOLEAN 型である必要があります。
True
いいえ
color_shift_middle
最初の顔のカラーバランスを実行するかどうかを指定します。値は BOOLEAN 型である必要があります。
True
いいえ
color_shift_last
2 番目の顔のカラーバランスを実行するかどうかを指定します。値は BOOLEAN 型である必要があります。
True
いいえ
background_restore
バックグラウンドを再構築するかどうかを指定します。値は BOOLEAN 型である必要があります。
False
いいえ
skin_retouching_bool
肌の平滑化を実行するかどうかを指定します。値は BOOLEAN 型である必要があります。
True
いいえ
photo_enhancement_bool
ポートレートを強調するかどうかを指定します。値は BOOLEAN 型である必要があります。
True
いいえ
photo_enhancement_method
ポートレートを強調するために使用されるメソッド。有効な値:
photo_fix
super_resolution
photo_fix
いいえ
makeup_transfer
メイクアップを転送するかどうかを指定します。値は BOOLEAN 型である必要があります。
False
いいえ
makeup_transfer_ratio
メイクアップ転送の強度。値は FLOAT 型である必要があります。
0.50
いいえ
応答例:
SDK for Python
1 069173d0-dce9-4ed6-913e-cc5fdda38764 {'consumers.list.[0]': 'Id: photog_pre_pmml.photog-pre-pmml-835253f3-686f87d4f-d****, Index: 0, Pending: 0, Status: Running, Idle: 21h41m4.995s, Window: 1, Slots: 1, AutoCommit: false', 'consumers.stats.total': '1', 'consumers.status.total': '1', 'groups.list.[0]': 'Id: photog_pre_pmml, Index: 1, Pending: 1, Delivered: 2, Consumers: 1', 'meta.header.group': 'X-EAS-QueueService-Gid', 'meta.header.priority': 'X-EAS-QueueService-Priority', 'meta.header.user': 'X-EAS-QueueService-Uid', 'meta.name': 'photog-pre-pmml-queue-912f2cdb', 'meta.state': 'Normal', 'stream.approxMaxLength': '1439', 'stream.firstEntry': '1', 'stream.lastEntry': '1', 'stream.length': '1', 'stream.maxPayloadBytes': '20971520'} {"request_id": 12345, "template_image": "https://xx.oss-cn-beijing.aliyuncs.com/photog/user_images/foto/train/1.jpg", "configure": {"user_id": "zhoumo"}}SDK for Java
index = 4, request id = 996cb029-133e-4f18-bb03-e696fc6ae4a1 {"meta.header.priority":"X-EAS-QueueService-Priority","consumers.status.total":"1","stream.firstEntry":"4","stream.maxPayloadBytes":"20971520","consumers.stats.total":"1","stream.approxMaxLength":"1436","stream.length":"1","groups.list.[0]":"Id: photog_pre_pmml, Index: 4, Pending: 1, Delivered: 5, Consumers: 1","meta.header.group":"X-EAS-QueueService-Gid","stream.lastEntry":"4","consumers.list.[0]":"Id: photog_pre_pmml.photog-pre-pmml-835253f3-686f87d4f-d****, Index: 4, Pending: 0, Status: Running, Idle: 2m12.017s, Window: 1, Slots: 1, AutoCommit: false","meta.name":"photog-pre-pmml-queue-912f2cdb","meta.state":"Normal","meta.header.user":"X-EAS-QueueService-Uid"} Successfully get data = { 'request_id' : 12345, 'template_image': "https://xx.oss-cn-beijing.aliyuncs.com/photog/user_images/foto/train/1.jpg", 'configure' : { 'user_id' : "zhoumo", } }, tags = {requestId=996cb029-133e-4f18-bb03-e696fc6ae4a1, ts@source=169778191****} Process finished with exit code 0上記のコードの主要なパラメーター:
index:EAS に送信されたすべてのリクエストにおける、当該リクエストの位置。
request_id:リクエストの ID。この ID は出力結果のクエリに使用されます。
その他のパラメーターは、入力キューの詳細を示します。
出力キューを作成し、出力結果をクエリします。応答では、Base64 エンコードされたイメージを表示できます。
リクエスト例:
SDK for Python
# 出力キューの処理結果をサブスクライブするための出力キューオブジェクトを作成します。 sink_queue = QueueClient('182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'photog_pre_pmml/sink') sink_queue.set_token('<token>') sink_queue.init() sink_queue.get(request_id, auto_delete=True)[0].data.decode('utf-8')上記のコードの主要なパラメーター:
sink_queue:取得した予測サービスのエンドポイント。
<token>:取得した予測サービスのトークン。
SDK for Java
import com.aliyun.openservices.eas.predict.http.HttpConfig; import com.aliyun.openservices.eas.predict.http.QueueClient; import com.aliyun.openservices.eas.predict.queue_client.DataFrame; import com.aliyun.openservices.eas.predict.queue_client.QueueUser; import org.apache.commons.lang3.tuple.Pair; import java.util.HashMap; import java.util.Map; public class AsyncPhotoTest { public static void main(String[] args) throws Exception { /** キューサービスクライアントを作成します。*/ String queueEndpoint = "166233998075****.cn-beijing.pai-eas.aliyuncs.com"; String inputQueueName = "photog_pre_pmml"; String sinkQueueName = String.format("%s/sink", inputQueueName); String queueToken = "NjViMTI2NGQxZWQxYTI1NGE5MGQ1YTQ5Y2Y2MGZjY2VlZTVmNWE1****"; QueueClient inputQueue = new QueueClient(queueEndpoint, inputQueueName, queueToken, new HttpConfig(), new QueueUser()); QueueClient sinkQueue = new QueueClient(queueEndpoint, sinkQueueName, queueToken, new HttpConfig(), new QueueUser()); /** リクエストデータ。*/ String data = "{\n" + " \"request_id\": 12345,\n" + " \"template_image\": \"xx.jpg\",\n" + " \"configure\": {\n" + " \"user_id\": \"zhoumo\"\n" + " }\n" + "}"; Pair<Long, String> entry = inputQueue.put(data.getBytes(), null); Long index = entry.getKey(); final String requestId = entry.getValue(); System.out.println(String.format("index = %d, request id = %s", index, requestId)); // 入力キューの詳細をクエリします。 System.out.println(inputQueue.attributes()); // 入力データをクエリします。 Map<String, String> tags = new HashMap<String, String>() { { put("requestId", requestId); } }; DataFrame[] dfs = inputQueue.get(0, 1L, 0, false, tags); if (dfs.length > 0) { System.out.println(String.format("Successfully get data = %s, index = %d, tags = %s", new String(dfs[0].getData()), dfs[0].getIndex(), dfs[0].getTags())); } else { System.out.println("no data"); } // 出力データをクエリします。 while (true) { dfs = sinkQueue.get(0, 1L, 0, true, tags); if (dfs.length > 0) { System.out.println(String.format("Successfully get data = %s, tags = %s", new String(dfs[0].getData()), dfs[0].getTags())); break; } else { System.out.println("no data"); } } /** クライアントをシャットダウンします。*/ inputQueue.shutdown(); sinkQueue.shutdown(); } }上記のコードの主要なパラメーター:
queueEndpoint:取得した予測サービスのエンドポイント。
inputQueueName:予測サービスの名前。
queueToken:取得した予測サービスのトークン。
template_image:テンプレートイメージの URL。
応答例:
SDK for Python
'{"request_id": "12345", "code": "OK", "message": "success", "data": {"user_id": "zhoumo", "image": "iVBORw*****CYII=", "cost_time": 329.69798278808594}}'説明応答の `code` パラメーターの値が 502 の場合、イメージは生成中です。
SDK for Java
... no data no data Successfully get data = {"request_id": "12345", "code": "OK", "message": "success", "data": {"user_id": "zhoumo", "image": "iVBORw0KGgoAAA****ABJRU5ErkJggg==", "cost_time": 21.584840059280396}}説明応答で
no dataが返された場合、イメージは生成中です。以下の表に、主要なパラメーターを説明します。
パラメーター
説明
request_id
リクエストの ID。値は STRING 型です。
code
リクエストの状態コード。有効な値:
OK:リクエストは成功しました。
error:リクエストは失敗しました。
message
リクエストステータスの詳細情報。`success` の値は、リクエストが成功したことを示します。他の値が返された場合は、返されたメッセージに基づいて問題を解決してください。
data
詳細な応答内容。パラメーター:
user_id:ユーザーの ID。
image:生成された Base64 エンコードされたイメージ。
cost_time:消費時間。値は FLOAT 型です。