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) をクリックします。
[サービスをデプロイ] をクリックします。[カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。
[カスタムデプロイ] ページで、次の主要なパラメーターを設定します。
[基本情報] セクションで、ページの指示に従ってサービス名をカスタマイズします。例:photog_check。
[環境情報] セクションで、以下のパラメーターを設定します。
パラメーター
説明
デプロイ方法
[イメージベースのデプロイ] を選択し、[非同期キュー] を選択します。
イメージ構成
[イメージアドレス] を選択し、テキストボックスにイメージアドレスを入力します:
中国 (北京) リージョンのイメージアドレス:
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。
ストレージのマウント
次のいずれかのマウント方法を設定します:
OSS
Uri:独自の OSS バケットパスを選択します。例:
oss://examplebucket/。マウントパス:
/photog_ossに設定します。
NAS
ファイルシステム:NAS ファイルシステムを選択します。
マウントポイント:NAS マウントポイントを選択します。
ファイルシステムパス:マウントする NAS のソースパスに設定します。例:
/。マウントパス:
/photog_ossに設定します。
コマンド
python app.pyに設定します。ポート番号
7860 に設定します。
[リソース情報] セクションで、次のパラメーターを設定します:
パラメーター
説明
リソースタイプ
[パブリックリソース] を選択します。
デプロイリソース
GPU タイプの GU30 シリーズを選択します。推奨は
ml.gu7i.c32m188.1-gu30です。システムディスクの設定
120 GiB に設定します。
[非同期キュー] セクションで、次のパラメーターを設定します:
パラメーター
説明
リソースタイプ
[パブリックリソース] を選択します。
デプロイメント
次のパラメーターを設定します:
最小インスタンス数:1
vCPU:8 コア
メモリ:64 GB
1 リクエストあたりの最大入力データ
キュー内の各リクエストのストレージ容量不足を防ぐため、20480 KB に設定します。
1 リクエストあたりの最大出力データ
[ネットワーク情報] セクションで、作成した VPC、vSwitch、およびセキュリティグループを選択します。
[サービス構成] セクションで、[編集] ボタンをクリックし、次の構成を追加します。以下の完全な構成例を参照して、新しいパラメーターを追加できます。
フィールド
新しいパラメーター
metadata
以下を追加します:
"rpc": { "keepalive": 3600000, "worker_threads": 1 }keepalive:1 リクエストの最大処理時間 (ミリ秒)。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 } ] }
[デプロイ] をクリックします。
[サービスステータス] が [実行中] になると、サービスは正常にデプロイされます。
トレーニングサービスのデプロイ
PAI コンソールにログインします。ページ上部でリージョンを選択します。次に、目的のワークスペースを選択し、Elastic Algorithm Service (EAS) をクリックします。
[サービスをデプロイ] をクリックします。[カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。
[カスタムデプロイ] ページで、次の主要なパラメーターを設定します。
[基本情報] セクションで、ページの指示に従ってサービス名をカスタマイズします。例:
photog_train_pmml。[環境情報] セクションで、次のパラメーターを設定します:
パラメーター
説明
デプロイ方法
[イメージベースのデプロイ] を選択し、[非同期キュー] を選択します。
イメージ構成
[イメージアドレス] を選択し、テキストボックスにイメージアドレスを入力します:
中国 (北京) リージョンのイメージアドレス:
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。
ストレージのマウント
次のいずれかのマウント方法を設定します:
OSS
Uri:独自の OSS バケットパスを選択します。これは検証サービスで選択した OSS パスと同じである必要があります。例:
oss://examplebucket/。マウントパス:
/photog_ossに設定します。
NAS
ファイルシステム:NAS ファイルシステムを選択します。
マウントターゲット: NAS マウントポイントを選択します。
ファイルシステムパス:マウントする必要がある NAS のソースパスに設定します。例:
/。マウントパス:
/photog_ossに設定します。
コマンド
python app.pyに設定します。ポート番号
7860 に設定します。
[リソース情報] セクションで、次のパラメーターを設定します:
パラメーター
説明
リソースタイプ
[パブリックリソース] を選択します。
デプロイリソース
GPU タイプの GU30 シリーズを選択します。推奨は
ml.gu7i.c32m188.1-gu30です。システムディスクの設定
120 GiB に設定します。
[非同期キュー] セクションで、以下のパラメーターを設定します。
パラメーター
説明
リソースタイプ
[パブリックリソース] を選択します。
デプロイメント
次のパラメーターを設定します:
最小インスタンス数:1
vCPU:8 コア
メモリ:64 GB
1 リクエストあたりの最大入力データ
キュー内の各リクエストのストレージ容量不足を避けるため、20480 KB に設定します。
1 リクエストあたりの最大出力データ
[ネットワーク情報] セクションで、作成した VPC、vSwitch、およびセキュリティグループを選択します。
[サービス構成] セクションで、[編集] をクリックし、次の構成を追加します。以下の完全な構成例を参照して、新しいパラメーターを追加できます。
フィールド
新しいパラメーター
autoscaler
(オプション) 水平自動スケーリング構成。詳細については、「水平自動スケーリング」をご参照ください。
"behavior": { "scaleDown": { "stabilizationWindowSeconds": 60 } }, "max": 5, "min": 1, "strategies": { "queue[backlog]": 1 }metadata
次のパラメーターを追加します:
"rpc": { "keepalive": 3600000, "worker_threads": 1 }keepalive:1 リクエストの最大処理時間 (ミリ秒)。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 } ] }
[デプロイ] をクリックします。
[サービスステータス] が [実行中] になると、サービスは正常にデプロイされます。
予測サービスのデプロイ
PAI コンソールにログインします。ページ上部でリージョンを選択します。次に、目的のワークスペースを選択し、Elastic Algorithm Service (EAS) をクリックします。
[サービスをデプロイ] をクリックします。[カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。
[カスタムデプロイ] ページで、次の主要なパラメーターを設定します。
[基本情報] セクションで、ページの指示に従ってサービス名をカスタマイズします。例:photog_pre_pmml。
[環境情報] セクションで、次のパラメーターを設定します:
パラメーター
説明
デプロイ方法
[イメージベースのデプロイ] を選択し、[非同期キュー] にチェックを入れます。
イメージ構成
[イメージアドレス] を選択し、テキストボックスにイメージアドレスを入力します。AI ポートレート予測サービスと WebUI 予測サービスの両方のイメージアドレスを設定する必要があります。このセクションでは、AI ポートレート予測サービスのイメージアドレスのみを設定します。WebUI 予測サービスのイメージアドレスは、後でサービス構成セクションで設定します。サポートされているイメージのリストは次のとおりです。このソリューションでは、中国 (北京) リージョンのイメージアドレスを選択します。
中国 (北京) リージョンのイメージアドレス:
AI ポートレート予測サービス:
registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:infer.1.0.0.pub。WebUI 予測サービス:
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.pub。WebUI 予測サービス:
eas-registry-vpc.ap-southeast-1.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:3.2。
ストレージのマウント
次のいずれかのマウント方法を設定します。このソリューションでは OSS マウントを選択します。
OSS
Uri:独自の OSS バケットパスを選択します。これは検証サービスで選択した OSS パスと同じである必要があります。例:
oss://examplebucket/。マウントパス:
/photog_ossに設定します。
NAS
ファイルシステム:NAS ファイルシステムを選択します。
マウントターゲット: NAS マウントポイントを選択します。
ファイルシステムパス:マウントする NAS のソースパスに設定します。例:
/。マウントパス:
/photog_ossに設定します。
WebUI に必要なモデルファイルをダウンロードして展開し、以下のスクリーンショットに示すレイアウトに従って、OSS バケットパス
oss://examplebucket/photog_oss/webuiまたは NAS パス/photog_oss/webuiに保存します。OSS バケットパスへのファイルのアップロード方法の詳細については、「ossutil 1.0」をご参照ください。NAS パスへのファイルのアップロード方法の詳細については、「Linux ECS インスタンスへのファイルシステムのマウント」および「ファイルの管理」をご参照ください。
環境変数
[追加] をクリックして、次の 2 つの環境変数を追加します:
変数名:
URL。変数値:http://127.0.0.1:8000。変数名:
AUTHORIZATION。変数値:=。
コマンド
python app.pyに設定します。ポート番号
7860 に設定します。
[リソース情報] セクションで、次のパラメーターを設定します:
パラメーター
説明
リソースタイプ
[パブリックリソース] を選択します。
デプロイリソース
GPU GU30 シリーズのタイプを選択します。推奨は
ml.gu7i.c32m188.1-gu30です。システムディスクの設定
120 GiB に設定します。
[非同期キュー] セクションで、次のパラメーターを設定します:
パラメーター
説明
リソースタイプ
[パブリックリソース] を選択します。
デプロイメント
次のパラメーターを設定します:
最小インスタンス数:1。
vCPU:8 コア。
メモリ:64 GB。
1 リクエストあたりの最大入力データ
20480 KB に設定します。これにより、キュー内の各リクエストのストレージ容量不足を防ぎます。
単一出力の最大データ
[ネットワーク情報] セクションで、作成した VPC、vSwitch、およびセキュリティグループを選択します。
[サービス構成] セクションで、次の構成を追加します。以下の完全な構成例を参照して、新しいパラメーターを追加できます。
フィールド
新しいパラメーター
metadata
次のパラメーターを追加します:
"rpc": { "keepalive": 3600000, "worker_threads": 1 }keepalive:1 リクエストの最大処理時間 (ミリ秒)。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/" } ] }
[デプロイ] をクリックします。
[サービスステータス] が [実行中] になると、サービスは正常にデプロイされます。
サービスの呼び出し
ステップ 1:検証サービスの呼び出し
[Elastic Algorithm Service (EAS)] ページで、サービス名をクリックして [概要] ページを開きます。[基本情報] セクションで、[エンドポイント情報を表示] をクリックします。[非同期呼び出し] タブで、サービスエンドポイントとトークンを取得します。

イメージ検証用の入力キューを作成し、入力キューの情報をクエリします。
リクエスト例:
SDK for Python
import json from eas_prediction import QueueClient # Create an input queue object to receive input data. 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"], # urls, a list 'configure' : { 'face_reconize' : True, # Judge whether all pictures are of a person } } ) index, request_id = input_queue.put(f'{datas}') print(index, request_id) # Query the details of the input queue. 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 { /** Create a queue service client. */ 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()); /** The request data. */ 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())); // Query the details of the input queue. System.out.println(inputQueue.attributes()); /** Shut down the client. */ 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
# Create an output queue object to subscribe to the processing results in the output queue. 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 { /** Create a queue service client. */ 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()); /** The request data. */ 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)); // Query the details of the input queue. System.out.println(inputQueue.attributes()); // Query the input data. 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"); } // Query the output 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); } } /** Shut down the client. */ 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)] ページで、トレーニングサービス名をクリックして [概要] ページを開きます。[基本情報] エリアで、[エンドポイント情報を表示] をクリックします。[非同期呼び出し] タブで、サービスエンドポイントとトークンを取得します。

LoRA モデルトレーニング用の入力キューを作成し、入力キューの情報をクエリします。
リクエスト例:
SDK for Python
photog_train_pmmln import json from eas_prediction import QueueClient # Create an input queue object to receive input data. 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"], # urls 'configure' : { 'user_id' : "zhoumo", # user id } } ) index, request_id = input_queue.put(f'{datas}') print(index, request_id) # Query the details of the input queue. 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 { /** Create a queue service client. */ 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()); /** The request data. */ 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())); // Query the details of the input queue. System.out.println(inputQueue.attributes()); /** Shut down the client. */ 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
# Create an output queue object to subscribe to the processing results in the output queue. 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 { /** Create a queue service client. */ 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()); /** The request data. */ 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)); // Query the details of the input queue. System.out.println(inputQueue.attributes()); // Query the input data. 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"); } // Query the output 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"); } } /** Shut down the client. */ 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 # Create an input queue object to receive input data. 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", # threshold to get tags. } }) index, request_id = input_queue.put(f'{datas}') print(index, request_id) # Query the details of the input queue. attrs = input_queue.attributes() print(attrs) # Query a specific request based on the request 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 { /** Create a queue service client. */ 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()); /** The request data. */ 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())); // Query the details of the input queue. System.out.println(inputQueue.attributes()); // Query a specific request based on the request 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())); /** Shut down the client. */ 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
# Create an output queue object to subscribe to the processing results in the output queue. 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 { /** Create a queue service client. */ 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()); /** The request data. */ 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)); // Query the details of the input queue. System.out.println(inputQueue.attributes()); // Query the input data. 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"); } // Query the output 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"); } } /** Shut down the client. */ 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 型です。