すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:AI ポートレートソリューション

最終更新日:Dec 04, 2025

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 ポートレートソリューションのアルゴリズムプロセス

  1. イメージの検証

    イメージのコンプライアンスを確保するために、イメージの事前チェックを実行します。

  2. LoRA トレーニング

    イメージを前処理し、イメージの品質をチェックし、LoRA を使用してモデルを自動的にトレーニングおよび評価し、最適化されたモデルを生成します。

  3. AI ポートレートの生成

    1. テンプレートイメージを前処理します。

    2. 最初の拡散でイメージを生成します。

    3. 2 番目の拡散でイメージを生成します。

前提条件

  • Virtual Private Cloud (VPC) が作成され、その VPC でインターネットアクセスが有効になっていること。

    1. VPC、vSwitch、およびセキュリティグループが作成されていること。詳細については、「IPv4 CIDR ブロックを持つ VPC の作成」および「セキュリティグループの作成」をご参照ください。

    2. 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 オンラインモデルサービスのデプロイ

検証サービスのデプロイ

  1. PAI コンソールにログインします。ページ上部でリージョンを選択します。次に、目的のワークスペースを選択し、Elastic Algorithm Service (EAS) をクリックします。

  2. [サービスをデプロイ] をクリックします。[カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。

  3. [カスタムデプロイ] ページで、次の主要なパラメーターを設定します。

    • [基本情報] セクションで、ページの指示に従ってサービス名をカスタマイズします。例: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
              }
          ]
      }
  4. [デプロイ] をクリックします。

    [サービスステータス][実行中] になると、サービスは正常にデプロイされます。

トレーニングサービスのデプロイ

  1. PAI コンソールにログインします。ページ上部でリージョンを選択します。次に、目的のワークスペースを選択し、Elastic Algorithm Service (EAS) をクリックします。

  2. [サービスをデプロイ] をクリックします。[カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。

  3. [カスタムデプロイ] ページで、次の主要なパラメーターを設定します。

    • [基本情報] セクションで、ページの指示に従ってサービス名をカスタマイズします。例: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
              }
          ]
      }
  4. [デプロイ] をクリックします。

    [サービスステータス][実行中] になると、サービスは正常にデプロイされます。

予測サービスのデプロイ

  1. PAI コンソールにログインします。ページ上部でリージョンを選択します。次に、目的のワークスペースを選択し、Elastic Algorithm Service (EAS) をクリックします。

  2. [サービスをデプロイ] をクリックします。[カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。

  3. [カスタムデプロイ] ページで、次の主要なパラメーターを設定します。

    • [基本情報] セクションで、ページの指示に従ってサービス名をカスタマイズします。例: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 インスタンスへのファイルシステムのマウント」および「ファイルの管理」をご参照ください。image.png

      環境変数

      [追加] をクリックして、次の 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/"
              }
          ]
      }
  4. [デプロイ] をクリックします。

    [サービスステータス][実行中] になると、サービスは正常にデプロイされます。

サービスの呼び出し

ステップ 1:検証サービスの呼び出し

  1. [Elastic Algorithm Service (EAS)] ページで、サービス名をクリックして [概要] ページを開きます。[基本情報] セクションで、[エンドポイント情報を表示] をクリックします。[非同期呼び出し] タブで、サービスエンドポイントとトークンを取得します。image

  2. イメージ検証用の入力キューを作成し、入力キューの情報をクエリします。

    リクエスト例:

    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 は出力結果をクエリするために使用されます。

    • その他のパラメーターは入力キューの詳細を示します。

  3. 出力キューを作成し、出力結果をクエリしてイメージが準拠しているかどうかを確認します。

    リクエスト例:

    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 型です。

    Message パラメーター

    有効な値

    code

    説明

    success

    1

    イメージは準拠しています。

    Image decode error

    2

    イメージをダウンロードまたはデコードできません。

    Number of face is not 1

    3

    顔の数が 1 ではありません。

    Image detect error

    4

    顔認識でエラーが発生しました。

    Image encoding error

    5

    顔を特徴ベクトルにエンコード中にエラーが発生しました。これは、顔が認識できないことを示します。

    This photo is not the same person in photos

    6

    このメッセージのみが返された場合、イメージには他のイメージとは異なる顔が含まれています。

ステップ 2:トレーニングサービスの呼び出し

  1. [Elastic Algorithm Service (EAS)] ページで、トレーニングサービス名をクリックして [概要] ページを開きます。[基本情報] エリアで、[エンドポイント情報を表示] をクリックします。[非同期呼び出し] タブで、サービスエンドポイントとトークンを取得します。image

  2. 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 は出力結果をクエリするために使用されます。

    • その他のパラメーターは入力キューの詳細を示します。

  3. 出力キューを作成し、処理結果をサブスクライブして、モデルが正常にトレーニングされたかどうかを確認します。

    リクエスト例:

    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:イメージ生成インターフェイスの呼び出し

  1. [Elastic Algorithm Service (EAS)] ページに移動し、予測サービスの名前をクリックして [概要] ページを開きます。[基本情報] セクションで、[エンドポイント情報を表示] をクリックします。[非同期呼び出し] タブで、サービスエンドポイントとトークンを取得します。image

  2. イメージ予測用の入力キューを作成し、入力キューの情報をクエリします。

    リクエスト例:

    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 は出力結果をクエリするために使用されます。

    • その他のパラメーターは入力キューの詳細を示します。

  3. 出力キューを作成し、出力結果をクエリします。レスポンスでは、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 型です。