All Products
Search
Document Center

Platform For AI:Solusi Portret AI

Last Updated:Jun 22, 2026

Solusi Portret AI secara otomatis melatih model LoRA khusus pengguna dan menggunakannya bersama gambar templat untuk menghasilkan portret AI yang dipersonalisasi. Elastic Algorithm Service (EAS) adalah platform penyajian model yang disediakan oleh PAI. Solusi ini menyediakan alur kerja algoritma yang dapat diterapkan sebagai layanan online EAS, termasuk API untuk menghasilkan portret AI. Topik ini menjelaskan cara menerapkan layanan online EAS dan memanggil API-nya untuk menghasilkan portret AI.

Informasi latar belakang

Fitur EAS

EAS adalah platform layanan model yang disediakan oleh PAI. Solusi Portret AI memanfaatkan fitur inti berikut dari EAS:

  • Menyebarkan layanan model, termasuk layanan verifikasi, layanan pelatihan, dan layanan prediksi, menggunakan custom image. Solusi Portret AI menggunakan fitur ini untuk menyediakan tiga layanan API: verifikasi gambar, pelatihan LoRA, dan pembuatan gambar. Fitur ini juga mendukung load balancing permintaan dan auto scaling untuk instans GPU.

  • Operasi antrian asinkron memungkinkan Anda melakukan kueri, mengelola status konsumsi antrian, serta mengatur prioritas. Untuk informasi selengkapnya, lihat Layanan inferensi asinkron.

  • EAS menyediakan SDK Python dan Java untuk meneruskan parameter kustom. Untuk informasi selengkapnya, lihat SDK pemanggilan layanan.

Alur kerja algoritma Portret AI

  1. Verifikasi gambar

    Memeriksa apakah kualitas gambar memenuhi persyaratan.

  2. Pelatihan LoRA

    Tahap ini pertama-tama melakukan pra-pemrosesan dan memeriksa kualitas gambar, lalu menggunakan LoRA untuk secara otomatis melatih dan mengevaluasinya, menghasilkan model yang dioptimalkan.

  3. Pembuatan gambar

    1. Pra-pemrosesan gambar.

    2. Pembuatan gambar awal.

    3. Pembuatan gambar sekunder.

Prasyarat

  • Anda telah mengonfigurasi VPC dengan akses internet, yang mencakup hal-hal berikut:

    1. Membuat VPC, vSwitch, dan security group. Untuk informasi selengkapnya, lihat Buat VPC IPv4 dan Buat security group.

    2. Membuat NAT Gateway untuk VPC, mengaitkan EIP dengannya, dan mengonfigurasi entri SNAT. Untuk informasi selengkapnya, lihat Gunakan fitur SNAT NAT Gateway untuk mengakses internet.

  • Anda telah mengaktifkan PAI-EAS dan membuat ruang kerja default. Untuk informasi selengkapnya, lihat Aktifkan PAI-EAS dan buat ruang kerja default.

  • Pengguna RAM yang menerapkan model harus memiliki izin administratif untuk PAI-EAS. Untuk informasi selengkapnya, lihat Ketergantungan dan otorisasi layanan cloud: EAS.

  • Untuk pelatihan model dan pembuatan potret, siapkan 5 hingga 20 gambar pelatihan dan 1 gambar templat. Format gambar yang didukung adalah: .jpg, .jpeg, dan .png. Pastikan ukuran setiap gambar lebih besar dari 512 x 512 piksel.

    • Portret satu orang: Gambar templat harus berisi wajah seseorang. Wajah dalam beberapa gambar pelatihan berasal dari orang yang sama.

    • Portret multi-orang: Gambar templat harus berisi beberapa wajah, dan jumlah wajah tersebut harus sama dengan nilai parameter model_id yang ditentukan untuk pelatihan model.

Batasan penggunaan

Solusi ini hanya tersedia di wilayah China (Beijing) dan Singapura.

Layanan model PAI-EAS

Layanan verifikasi

  1. Masuk ke Konsol PAI. Pilih wilayah di bagian atas halaman. Lalu, pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).

  2. Klik Deploy Service. Di bagian Custom Model Deployment, klik Custom Deployment.

  3. Pada halaman Custom Deployment, konfigurasikan parameter berikut.

    • Pada bagian Basic Information, atur nama layanan. Misalnya, photog_check.

    • Pada bagian Environment Information, konfigurasikan parameter berikut:

      Parameter

      Deskripsi

      Deployment Method

      Pilih Image-based Deployment dan Asynchronous Queue.

      Image Configuration

      Pilih Image Address dan masukkan URL gambar di kotak teks. URL-nya adalah sebagai berikut:

      • China (Beijing): registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:check.1.0.0.pub.

      • Singapura: registry.ap-southeast-1.aliyuncs.com/mybigpai/photog_pub:check.1.0.0.pub.

      Mount storage

      Konfigurasikan penyimpanan untuk kode Anda. Metode pemasangan berikut didukung:

      • OSS

        • Uri: Pilih jalur ke bucket OSS Anda. Misalnya, oss://examplebucket/.

        • Mount Path: Atur nilainya menjadi /photog_oss.

      • NAS

        • Select File System: Pilih sistem file NAS.

        • Mount Target: Pilih titik pemasangan NAS.

        • File System Path: Tentukan jalur sumber dalam sistem file NAS untuk dipasang, seperti /.

        • Mount Path: Atur nilainya menjadi /photog_oss.

      Command

      Atur nilainya menjadi python app.py.

      Port Number

      Atur nilainya menjadi 7860.

    • Pada bagian Resource Information, konfigurasikan parameter berikut:

      Parameter

      Deskripsi

      Resource Type

      Pilih Public Resources.

      Deployment

      Untuk instance type, pilih instans GPU dari seri GU30. Kami merekomendasikan tipe instans ml.gu7i.c32m188.1-gu30.

      Configure a system disk

      Atur ukurannya menjadi 120 GiB.

    • Pada bagian antrian asinkron, konfigurasikan parameter berikut:

      Parameter

      Deskripsi

      Resource Type

      Pilih Public Resource Group.

      Deployment

      Konfigurasikan parameter berikut:

      • minimum number of instances: 1

      • CPU: 8 cores

      • Memory: 64 GB

      Maximum Data for A Single Input Request

      Atur nilainya menjadi 20480 KB untuk mencegah error akibat permintaan yang terlalu besar.

      Maximum Data for A Single Output

    • Pada bagian Network Information, pilih VPC, vSwitch, dan security group Anda.

    • Pada bagian Service Configuration, klik Edit untuk menambahkan parameter berikut. Anda dapat merujuk pada contoh konfigurasi lengkap di bawah ini.

      Parameter

      Deskripsi

      metadata

      Tambahkan parameter berikut:

      "rpc": {
                  "keepalive": 3600000,
                  "worker_threads": 1
              }
      • keepalive: Waktu pemrosesan maksimum untuk satu permintaan, dalam milidetik. Atur nilainya menjadi 3600000.

      • worker_threads: Jumlah thread di setiap instans EAS untuk pemrosesan permintaan konkuren.

        Nilai default adalah 5, yang memungkinkan satu instans memproses hingga lima tugas secara bersamaan. Kami merekomendasikan agar Anda mengatur parameter ini menjadi 1 untuk memastikan permintaan diproses secara berurutan.

      queue

      Tambahkan parameter "max_delivery": 1 untuk mencegah pengiriman ulang berulang setelah terjadi kegagalan.

      Berikut ini adalah contoh konfigurasi lengkap:

      {
          "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. Klik Deploy.

    Penerapan selesai ketika Service Status menunjukkan Running.

Layanan pelatihan

  1. Masuk ke Konsol PAI. Pilih wilayah di bagian atas halaman. Lalu, pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).

  2. Klik Deploy Service. Di bagian Custom Model Deployment, klik Custom Deployment.

  3. Pada halaman Custom Deployment, konfigurasikan parameter berikut.

    • Pada bagian Basic Information, masukkan nama layanan. Misalnya, photog_train_pmml.

    • Pada bagian Environment Information, konfigurasikan parameter berikut:

      Parameter

      Deskripsi

      Deployment Method

      Pilih Image-based Deployment dan pilih Asynchronous Queue.

      Image Configuration

      Pilih Image Address dan masukkan alamat gambar:

      • Untuk China (Beijing), gunakan: registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:train.1.0.0.pub.

      • Untuk Asia Pacific SE 1 (Singapura), gunakan: registry.ap-southeast-1.aliyuncs.com/mybigpai/photog_pub:train.1.0.0.pub.

      Mount storage

      Konfigurasikan pemasangan penyimpanan. Jenis berikut didukung:

      • OSS

        • Uri: Pilih jalur bucket OSS Anda. Pastikan jalur ini sama dengan jalur OSS yang Anda pilih untuk layanan verifikasi. Misalnya, oss://examplebucket/.

        • Mount Path: Atur menjadi /photog_oss.

      • NAS

        • Select File System: Pilih sistem file NAS.

        • Mount Target: Pilih titik pemasangan NAS.

        • File System Path: Tentukan jalur sumber dalam sistem file NAS untuk dipasang, seperti /.

        • Mount Path: Atur menjadi /photog_oss.

      Command

      Atur menjadi python app.py.

      Port Number

      Atur menjadi 7860.

    • Pada bagian Resource Information, konfigurasikan parameter berikut:

      Parameter

      Deskripsi

      Resource Type

      Pilih Public Resources.

      Deployment

      Untuk spesifikasi resource, pilih tipe instans GPU dari seri GU30. Kami merekomendasikan menggunakan ml.gu7i.c32m188.1-gu30.

      Configure a system disk

      Atur ukurannya menjadi 120 GiB.

    • Pada bagian Asynchronous Queue, konfigurasikan parameter berikut:

      Parameter

      Deskripsi

      Resource Type

      Pilih Public Resources.

      Deployment

      Konfigurasikan parameter berikut:

      • Minimum number of instances: 1

      • CPU: 8 cores

      • Memory: 64 GB

      Maximum Data for A Single Input Request

      Atur menjadi 20480 KB untuk menghindari melebihi batas penyimpanan per permintaan antrian.

      Maximum Data for A Single Output

    • Pada bagian Network Information, pilih VPC, VSwitch, dan security group yang telah Anda buat.

    • Pada bagian Service Configuration, klik Edit dan tambahkan konfigurasi berikut. Anda dapat merujuk pada contoh konfigurasi lengkap di bawah ini.

      Field

      Parameter baru

      autoscaler

      (Opsional) Konfigurasikan auto scaling horizontal. Untuk informasi selengkapnya, lihat auto scaling horizontal.

      "behavior": {
        "scaleDown": {
          "stabilizationWindowSeconds": 60
        }
      },
      "max": 5,
      "min": 1,
      "strategies": {
                  "queue[backlog]": 1
      }

      metadata

      Tambahkan parameter berikut:

      "rpc": {
                  "keepalive": 3600000,
                  "worker_threads": 1
              }
      • keepalive: Waktu pemrosesan maksimum untuk satu permintaan, dalam milidetik. Atur menjadi 3600000.

      • worker_threads: Jumlah thread di setiap instans EAS yang memproses permintaan secara konkuren.

        Nilai default adalah 5, yang berarti lima tugas pertama yang masuk antrian ditugaskan ke instans yang sama. Kami merekomendasikan mengatur parameter ini menjadi 1 untuk memastikan permintaan diproses secara berurutan.

      queue

      Tambahkan parameter "max_delivery": 1 untuk mencegah permintaan gagal dikirim ulang.

      Kode berikut memberikan contoh konfigurasi lengkap:

      {
          "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. Klik Deploy.

    Penerapan selesai ketika Service Status menunjukkan Running.

Terapkan layanan prediksi

  1. Masuk ke Konsol PAI. Pilih wilayah di bagian atas halaman. Lalu, pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).

  2. Klik Deploy Service. Di bagian Custom Model Deployment, klik Custom Deployment.

  3. Pada halaman Custom Deployment, konfigurasikan parameter berikut.

    • Pada bagian Basic Information, tentukan nama layanan, misalnya, photog_pre_pmml.

    • Pada bagian Environment Information, konfigurasikan parameter berikut:

      Parameter

      Deskripsi

      Deployment Method

      Pilih Image-based Deployment dan pilih Asynchronous Queue.

      Image Configuration

      Pilih Image Address dan masukkan URL gambar. Anda harus mengonfigurasi URL gambar untuk layanan Prediksi Portret AI dan layanan prediksi WebUI. Di bagian ini, konfigurasikan URL gambar untuk layanan Prediksi Portret AI. URL gambar untuk layanan prediksi WebUI dikonfigurasi nanti di bagian konfigurasi layanan. Berikut adalah URL gambar yang didukung. Solusi ini menggunakan URL gambar untuk wilayah China (Beijing).

      • URL gambar China (Beijing):

        • Layanan Prediksi Portret AI: registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:infer.1.0.0.pub.

        • Layanan prediksi WebUI: eas-registry-vpc.cn-beijing.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:3.2.

      • URL gambar Asia Pacific SE 1 (Singapura):

        • Layanan Prediksi Portret AI: registry.ap-southeast-1.aliyuncs.com/mybigpai/photog_pub:infer.1.0.0.pub.

        • Layanan prediksi WebUI: eas-registry-vpc.ap-southeast-1.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:3.2.

      Mount storage

      Konfigurasikan pemasangan penyimpanan. Metode pemasangan berikut tersedia. Solusi ini menggunakan OSS.

      • OSS

        • Uri: Pilih jalur bucket OSS Anda. Jalur ini harus sama dengan jalur yang dipilih untuk layanan verifikasi. Misalnya, oss://examplebucket/.

        • Mount Path: Atur menjadi /photog_oss.

      • NAS

        • Select File System: Pilih sistem file NAS.

        • Mount Target: Pilih titik pemasangan NAS.

        • File System Path: Tentukan jalur sumber dalam NAS yang ingin Anda pasang. Misalnya, /.

        • Mount Path: Atur menjadi /photog_oss.

      Unduh dan ekstrak file model yang diperlukan untuk WebUI, dan simpan di bucket OSS Anda pada jalur oss://examplebucket/photog_oss/webui atau jalur NAS Anda /photog_oss/webui sesuai struktur direktori berikut. Untuk informasi selengkapnya tentang cara mengunggah file ke bucket OSS, lihat Alat baris perintah ossutil 1.0. Untuk informasi selengkapnya tentang cara mengunggah file ke jalur NAS, lihat Quick Start (Linux) dan Gunakan Workbench untuk mengelola file pada Instance ECS. Bucket OSS harus berisi struktur direktori proyek model AI, termasuk direktori seperti embeddings, models, dan train, serta file-file terkaitnya.

      Environment Variable

      Klik Add dan konfigurasikan dua variabel lingkungan berikut:

      • Nama Variabel: URL; Nilai: http://127.0.0.1:8000.

      • Nama Variabel: AUTHORIZATION; Nilai: =.

      Command

      Atur menjadi python app.py.

      Port Number

      Atur menjadi 7860.

    • Pada bagian Resource Information, konfigurasikan parameter berikut:

      Parameter

      Deskripsi

      Resource Type

      Pilih Public Resources.

      Deployment

      Untuk Resource Specification, pilih tipe instans GPU dari seri GU30. Kami merekomendasikan menggunakan ml.gu7i.c32m188.1-gu30.

      Configure a system disk

      Atur menjadi 120 GiB.

    • Pada bagian Asynchronous Queue, konfigurasikan parameter berikut:

      Parameter

      Description

      Resource Type

      Pilih Public Resources.

      Deployment

      Konfigurasikan parameter berikut:

      • Minimum instances: 1.

      • CPU: 8 cores.

      • Memory: 64 GB.

      Maximum Data for A Single Input Request

      Tetapkan nilai ini menjadi 20480 KB untuk mencegah permintaan gagal akibat ruang penyimpanan antrian yang tidak mencukupi.

      Maximum Data for A Single Output

    • Pada bagian Network Information, pilih VPC, vSwitch, dan security group yang telah Anda buat.

    • Pada bagian Service Configuration, tambahkan pengaturan berikut. Rujuk contoh konfigurasi lengkap di bawah ini.

      Field

      Parameter baru

      metadata

      Tambahkan parameter berikut:

      "rpc": {
                  "keepalive": 3600000,
                  "worker_threads": 1
              }
      • keepalive: Waktu pemrosesan maksimum untuk satu permintaan, dalam milidetik. Atur nilai ini menjadi 3600000.

      • worker_threads: Jumlah thread di setiap instans EAS yang digunakan untuk pemrosesan permintaan konkuren.

        Default adalah 5. Ini berarti lima tugas pertama yang masuk antrian ditugaskan ke instans yang sama. Kami merekomendasikan mengatur parameter ini menjadi 1 untuk memastikan permintaan diproses secara berurutan.

      containers

      Tambahkan parameter berikut:

      {
                  "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/"
              }

      Pengaturan ini menentukan gambar, perintah jalankan, dan nomor port untuk layanan prediksi WebUI.

      queue

      Tambahkan parameter "max_delivery": 1 untuk mencegah pengiriman ulang berulang setelah terjadi kegagalan.

      Berikut ini adalah contoh konfigurasi lengkap:

      {
          "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. Klik Deploy.

    Penerapan selesai ketika Service Status menunjukkan Running.

Panggil API

Langkah 1: Panggil API verifikasi gambar

  1. Buka halaman Elastic Algorithm Service (EAS) dan klik nama layanan verifikasi Anda untuk membuka halaman Overview. Di bagian Basic Information, klik View Endpoint Information. Pada tab Asynchronous Invocation, temukan endpoint layanan dan token.

  2. Gunakan kode berikut untuk membuat antrian input untuk verifikasi gambar dan mengambil informasinya.

    Python SDK

    import json
    from eas_prediction import QueueClient
    # Create an input queue object to write 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)
    # View the details of the input queue.
    attrs = input_queue.attributes()
    print(attrs)

    Konfigurasi utama dijelaskan sebagai berikut:

    Parameter

    Deskripsi

    Default

    Wajib

    input_queue

    Endpoint layanan dari layanan verifikasi. Untuk detail konfigurasi, lihat contoh kode. Tipe: STRING.

    None

    Ya

    <token>

    Ganti nilai ini dengan token untuk layanan verifikasi. Tipe: STRING.

    None

    Ya

    request ID

    ID permintaan. Tipe: STRING.

    None

    Ya

    images

    URL gambar untuk verifikasi. Tipe: LIST.

    None

    Ya

    configure

    face_reconize

    Menentukan apakah wajah dalam beberapa gambar berasal dari orang yang sama. Tipe: BOOL.

    False

    Tidak

    Java SDK

    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());
            /** 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()));
            // View the details of the input queue.
            System.out.println(inputQueue.attributes());
            /** Close the client. */
            inputQueue.shutdown();
        }
    }

    Konfigurasi utama dijelaskan sebagai berikut:

    Parameter

    Deskripsi

    Default

    Wajib

    queueEndpoint

    Endpoint layanan dari layanan verifikasi. Tipe: STRING.

    None

    Ya

    inputQueueName

    Nama layanan verifikasi. Tipe: STRING.

    None

    Ya

    queueToken

    Ganti nilai ini dengan token untuk layanan verifikasi. Tipe: STRING.

    None

    Ya

    request ID

    ID permintaan. Tipe: STRING.

    None

    Ya

    images

    URL gambar untuk verifikasi. Tipe: LIST.

    None

    Ya

    configure

    face_reconize

    Menentukan apakah wajah dalam beberapa gambar berasal dari orang yang sama. Tipe: BOOL.

    False

    Tidak

    Python SDK

    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'}

    Java SDK

    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

    Dalam output:

    • index: Nomor urut permintaan dalam PAI-EAS.

    • request ID: ID permintaan. Gunakan ID ini untuk mengambil hasil output.

    • Sisa output menunjukkan detail antrian input.

  3. Gunakan kode berikut untuk membuat antrian output dan mengambil hasilnya. Periksa hasilnya untuk memastikan gambar memenuhi persyaratan.

    Python SDK

    # Create an output queue object to subscribe to and read the output data.
    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')

    Deskripsi parameter:

    • sink_queue: Endpoint layanan dari layanan verifikasi.

    • <token>: Ganti nilai ini dengan token untuk layanan verifikasi.

    • auto_delete: Default True. Jika Anda melakukan kueri antrian menggunakan request_id tetapi tidak mengatur parameter auto_delete, hasil dalam antrian akan dihapus. Karena biasanya Anda perlu menghapus konten antrian output, kami merekomendasikan agar Anda mengatur parameter auto_delete menjadi True.

    Java SDK

    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 = "182848887922****.cn-shanghai.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());
            /** 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));
            // View the details of the input queue.
            System.out.println(inputQueue.attributes());
            // View 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");
            }
            // View 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);
                }
            }
            /** Close the clients. */
            inputQueue.shutdown();
            sinkQueue.shutdown();
        }
    }

    Deskripsi parameter:

    • queueEndpoint: Endpoint layanan dari layanan verifikasi.

    • inputQueueName: Nama layanan verifikasi.

    • queueToken: Ganti nilai ini dengan token untuk layanan verifikasi.

    Sistem mengembalikan hasil berikut:

    Python SDK

    '{"request_id": "12345", "code": "OK", "message": "success", "data": {"request_id": 12345, "images": ["xx.jpg", "https://xxx.oss-cn-shanghai.aliyuncs.com/photog/user_images/foto/train/0.jpg"], "configure": {"face_reconize": true}, "cost_time": 9.820043325424194, "check_results": [{"url": "https://xx-cn-shanghai.aliyuncs.com/photog/user_images/foto/train/1.jpg", "message": "success", "code": 1, "frontal": true}, {"url": "https://xx-cn-shanghai.aliyuncs.com/photog/user_images/foto/train/0.jpg", "message": "success", "code": 1, "frontal": false}]}}'

    Java SDK

    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-shanghai.aliyuncs.com/photog/user_images/foto/train/1.jpg", "message": "success", "code": 1, "frontal": true}, {"url": "https://xx-cn-shanghai.aliyuncs.com/photog/user_images/foto/train/0.jpg", "message": "success", "code": 1, "frontal": false}]}}

    Parameter dijelaskan di bawah ini:

    Parameter

    Deskripsi

    request ID

    ID permintaan. Tipe: STRING.

    code

    Kode status permintaan. Tipe: STRING.

    • OK: Verifikasi selesai.

    • error: Verifikasi belum selesai.

    message

    Detail tentang status permintaan. Nilai success menunjukkan bahwa permintaan berhasil. Untuk nilai lainnya, rujuk konten yang dikembalikan untuk menentukan statusnya.

    data

    Muatan respons. Bidang-bidang dijelaskan di bawah ini:

    • check_results: Hasil deteksi untuk setiap gambar input.

      • url: URL gambar.

      • message: Detail tentang deteksi gambar. Nilai success menunjukkan bahwa verifikasi berhasil. Untuk informasi selengkapnya tentang nilai message yang mungkin dan kode yang sesuai, lihat Detail pesan.

      • frontal: Menunjukkan apakah wajah dalam gambar menghadap depan.

    • cost_time: Waktu komputasi sisi server untuk panggilan API ini.

    • images: Daftar URL gambar yang telah diverifikasi. Tipe: List.

    • request ID: ID permintaan. Tipe: STRING.

    Detail pesan

    Pesan

    kode

    Deskripsi

    success

    1

    Gambar memenuhi persyaratan.

    Image decode error

    2

    Gagal mengunduh atau mendekode gambar.

    Number of face is not 1

    3

    Jumlah wajah dalam gambar bukan 1.

    Image detect error

    4

    Terjadi pengecualian selama deteksi wajah.

    Image encoding error

    5

    Terjadi kesalahan saat mengenkoding wajah menjadi vektor fitur. Ini menunjukkan bahwa tidak ada wajah yang terdeteksi.

    This photo is not the same person in photos

    6

    Ketika ini adalah satu-satunya kesalahan yang dikembalikan, artinya wajah dalam gambar yang dikirimkan bukan berasal dari orang yang sama.

Langkah 2: Panggil API pelatihan LoRA

  1. Pertama, pada halaman Elastic Algorithm Service (EAS), klik nama layanan pelatihan untuk membuka halaman Overview. Di bagian Basic Information, klik View Endpoint Information. Di kotak dialog Call Information, pilih tab Shared Gateway > Asynchronous Invocation. Dapatkan public input invocation URL untuk digunakan sebagai endpoint layanan dan salin nilai Token.

  2. Gunakan kode berikut untuk membuat antrian input untuk pelatihan LoRA dan mendapatkan informasi antrian.

    Python SDK

    photog_train_pmmln import json
    from eas_prediction import QueueClient
    # Create an input queue object to write 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)
    # View the details of the input queue.
    attrs = input_queue.attributes()
    print(attrs)

    Parameter utama dijelaskan sebagai berikut:

    Parameter

    Deskripsi

    Default

    Wajib

    input_queue

    Alamat akses layanan untuk layanan pelatihan, diteruskan sebagai argumen pertama ke konstruktor QueueClient. Tipe: String.

    None

    Ya

    <token>

    Token yang Anda peroleh untuk layanan pelatihan. Tipe: STRING.

    None

    Ya

    request_id

    ID permintaan. Tipe: STRING.

    None

    Ya

    images

    URL gambar pelatihan. Tipe: LIST.

    None

    Ya

    configure

    user_id

    ID pengguna. Tipe: STRING.

    None

    Ya

    sex

    Jenis kelamin orang dalam gambar pelatihan.

    secret

    Tidak

    max_train_steps

    Jumlah total langkah pelatihan.

    400

    Tidak

    val_save_checkpointing_steps

    Jumlah langkah validasi selama pelatihan.

    50

    Tidak

    Java SDK

    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 client for the queue service. */
            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());
            /** 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()));
            // View the details of the input queue.
            System.out.println(inputQueue.attributes());
            /** Shut down the client. */
            inputQueue.shutdown();
        }
    }

    Parameter utama dijelaskan sebagai berikut:

    Parameter

    Deskripsi

    Default

    Wajib

    queueEndpoint

    Alamat akses layanan untuk layanan pelatihan. Tipe: STRING.

    None

    Ya

    inputQueueName

    Nama layanan pelatihan. Tipe: STRING.

    None

    Ya

    queueToken

    Token untuk layanan pelatihan. Tipe: STRING.

    None

    Ya

    request_id

    ID permintaan. Tipe: STRING.

    None

    Ya

    images

    URL gambar pelatihan. Tipe: LIST.

    None

    Ya

    configure

    user_id

    ID pengguna. Tipe: STRING.

    None

    Ya

    sex

    Jenis kelamin orang dalam gambar pelatihan.

    secret

    Tidak

    max_train_steps

    Jumlah total langkah pelatihan.

    400

    Tidak

    val_save_checkpointing_steps

    Jumlah langkah validasi selama pelatihan.

    50

    Tidak

    Sistem mengembalikan hasil yang mirip dengan berikut:

    Python SDK

    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'}

    Java SDK

    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

    Dalam output ini:

    • index: Menunjukkan nomor urut permintaan dalam EAS.

    • request_id: Pengidentifikasi unik untuk permintaan, digunakan untuk mengambil hasil.

    • Sisa output menunjukkan detail antrian.

  3. Gunakan kode berikut untuk membuat antrian output, berlangganan, dan membaca hasilnya untuk memeriksa apakah pelatihan model berhasil.

    Python SDK

    # Create an output queue object to subscribe to and read the output data.
    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')

    Deskripsi parameter:

    • sink_queue: Alamat akses layanan dari layanan pelatihan.

    • <token>: Token untuk layanan pelatihan.

    Java SDK

    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 clients for the queue service. */
            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());
            /** 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));
            // View the details of the input queue.
            System.out.println(inputQueue.attributes());
            // View 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");
            }
            // View 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 clients. */
            inputQueue.shutdown();
            sinkQueue.shutdown();
        }
    }

    Deskripsi parameter:

    • queueEndpoint: Alamat akses layanan untuk layanan pelatihan.

    • inputQueueName: Nama layanan pelatihan.

    • queueToken: Token untuk layanan pelatihan.

    • images: URL gambar untuk pelatihan model.

    Python SDK

    '{"request_id": "12345", "code": "OK", "message": "success", "data": {"user_id": "zhoumo", "cost_time": 272.7406361103058}}'
    Catatan

    Jika kode yang dikembalikan adalah 502, artinya pelatihan masih berlangsung.

    Java SDK

    ...
    no data
    no data
    Successfully get data = {"request_id": "12345", "code": "OK", "message": "success", "data": {"user_id": "zhoumo", "cost_time": 260.7540729045868}}
    Catatan

    Jika hasilnya no data, artinya pelatihan masih berlangsung.

    Parameter berikut dikembalikan dalam respons:

    Parameter

    Deskripsi

    request_id

    ID permintaan. Tipe: STRING.

    code

    Menunjukkan apakah pelatihan selesai:

    • OK: Pelatihan selesai.

    • error: Terjadi kesalahan selama pelatihan.

    message

    Detail tentang status eksekusi. Misalnya, success menunjukkan bahwa pelatihan model berhasil.

    data

    Detail respons. Parameter ini berisi bidang-bidang berikut:

    • user_id: ID pengguna.

    • cost_time: Waktu komputasi sisi server untuk tugas pelatihan.

Langkah 3: Panggil API pembuatan gambar

  1. Buka halaman Elastic Algorithm Service (EAS). Klik nama layanan prediksi Anda untuk membuka halaman Overview. Di bagian Basic Information, klik View Endpoint Information. Pada tab Asynchronous Invocation, dapatkan endpoint layanan dan token.

  2. Gunakan kode berikut untuk membuat antrian input untuk prediksi gambar dan mengambil informasinya.

    Python SDK

    import json
    from eas_prediction import QueueClient
    # Create an input queue object for writing 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", # The user ID.
        } 
    })
    index, request_id = input_queue.put(f'{datas}')
    print(index, request_id)
    # View input queue details.
    attrs = input_queue.attributes()
    print(attrs)
    # Query a request by its ID.
    print(input_queue.get(request_id, auto_delete=False)[0].data.decode('utf-8'))

    Tabel berikut menjelaskan parameter konfigurasi utama.

    Parameter

    Deskripsi

    Default

    Wajib

    input_queue

    Endpoint layanan prediksi. Lihat contoh kode untuk nilai yang diperlukan. Tipe: String.

    None

    Ya

    <token>

    Token untuk layanan prediksi Anda. Tipe: String.

    None

    Ya

    request_id

    ID permintaan. Tipe: String.

    None

    Ya

    template_image

    URL gambar templat input. Tipe: String.

    None

    Ya

    configure

    user_id

    ID pengguna. Tipe: String.

    None

    Ya

    sex

    Jenis kelamin orang dalam gambar templat. Tipe: String.

    secret

    Tidak

    first_diffusion_steps

    Jumlah langkah difusi pada tahap pertama. Tipe: Int.

    50

    Tidak

    first_denoising_strength

    Kekuatan penghilangan derau untuk tahap pertama. Tipe: Float.

    0.45

    Tidak

    second_diffusion_steps

    Jumlah langkah difusi pada tahap kedua. Tipe: Int.

    20

    Tidak

    second_denoising_strength

    Kekuatan penghilangan derau untuk tahap kedua. Tipe: Float.

    0.30

    Tidak

    more_like_me_before

    Rasio fusi wajah untuk tahap pertama. Nilai yang lebih tinggi membuat hasil lebih mirip dengan orang dalam gambar templat. Tipe: Float.

    0.50

    Tidak

    more_like_me

    Rasio fusi wajah untuk tahap kedua. Nilai yang lebih tinggi membuat hasil lebih mirip dengan orang dalam gambar templat. Tipe: Float.

    0.50

    Tidak

    mask_region

    Wilayah yang akan direkonstruksi selama tahap difusi kedua. Tipe: String. Nilai yang valid:

    • edge: Merekonstruksi tepi.

    • face: Merekonstruksi seluruh wajah.

    edge

    Tidak

    crop_face_preprocess

    Memotong area potret sebelum rekonstruksi. Tipe: Bool.

    True

    Tidak

    apply_face_fusion_before

    Menerapkan fusi wajah selama tahap pertama. Tipe: Bool.

    True

    Tidak

    apply_face_fusion_after

    Menerapkan fusi wajah selama tahap kedua. Tipe: Bool.

    True

    Tidak

    color_shift_middle

    Menerapkan keseimbangan warna pada wajah selama tahap pertama. Tipe: Bool.

    True

    Tidak

    color_shift_last

    Menerapkan keseimbangan warna pada wajah selama tahap kedua. Tipe: Bool.

    True

    Tidak

    background_restore

    Memulihkan latar belakang. Tipe: Bool.

    False

    Tidak

    skin_retouching_bool

    Menerapkan penghalusan kulit. Tipe: Bool.

    True

    Tidak

    photo_enhancement_bool

    Menerapkan peningkatan potret. Tipe: Bool.

    True

    Tidak

    photo_enhancement_method

    Metode peningkatan potret. Nilai yang valid:

    • photo_fix

    • super_resolution

    photo_fix

    Tidak

    makeup_transfer

    Menerapkan transfer makeup. Tipe: Bool.

    False

    Tidak

    makeup_transfer_ratio

    Rasio transfer makeup. Tipe: Float.

    0.50

    Tidak

    Java SDK

    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 {
            /** Creates a client for the queue service. */
            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());
            /** 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()));
            // View the details of the input queue.
            System.out.println(inputQueue.attributes());
            // Gets a specific request by its 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()));
            /** Shuts down the client. */
            inputQueue.shutdown();
        }
    }

    Tabel berikut menjelaskan parameter utama.

    Parameter

    Deskripsi

    Default

    Wajib

    queueEndpoint

    Endpoint layanan antrian. Tipe: STRING.

    None

    Ya

    inputQueueName

    Nama antrian input.

    None

    Ya

    queueToken

    Token akses untuk layanan antrian. Tipe: STRING.

    None

    Ya

    request_id

    ID permintaan. Tipe: STRING.

    None

    Ya

    template_image

    URL gambar templat yang digunakan untuk pembuatan.

    None

    Ya

    configure

    user_id

    ID pengguna. Tipe: STRING.

    None

    Ya

    sex

    Jenis kelamin orang dalam gambar templat. Tipe: STRING.

    secret

    Tidak

    first_diffusion_steps

    Jumlah langkah difusi pada tahap pertama. Tipe: INT.

    50

    Tidak

    first_denoising_strength

    Kekuatan penghilangan derau pada tahap difusi pertama. Tipe: FLOAT.

    0.45

    Tidak

    second_diffusion_steps

    Jumlah langkah difusi pada tahap kedua. Tipe: INT.

    20

    Tidak

    second_denoising_strength

    Kekuatan penghilangan derau pada tahap difusi kedua. Tipe: FLOAT.

    0.30

    Tidak

    more_like_me_before

    Rasio fusi wajah untuk tahap pertama. Nilai yang lebih tinggi meningkatkan kemiripan dengan orang asli. Tipe: FLOAT.

    0.50

    Tidak

    more_like_me

    Rasio fusi wajah untuk tahap kedua. Nilai yang lebih tinggi meningkatkan kemiripan dengan orang asli. Tipe: FLOAT.

    0.50

    Tidak

    mask_region

    Wilayah untuk tahap difusi kedua. Tipe: STRING. Nilai yang valid:

    • edge: Merekonstruksi tepi.

    • face: Merekonstruksi wajah.

    edge

    Tidak

    crop_face_preprocess

    Jika True, memotong area potret sebelum rekonstruksi. Ini juga mengaktifkan fitur gambar besar. Tipe: BOOL.

    True

    Tidak

    apply_face_fusion_before

    Jika True, menerapkan fusi wajah pada tahap pertama. Tipe: BOOL.

    True

    Tidak

    apply_face_fusion_after

    Jika True, menerapkan fusi wajah pada tahap kedua. Tipe: BOOL.

    True

    Tidak

    color_shift_middle

    Jika True, melakukan keseimbangan warna pada wajah di tahap pertama. Tipe: BOOL.

    True

    Tidak

    color_shift_last

    Jika True, melakukan keseimbangan warna pada wajah di tahap kedua. Tipe: BOOL.

    True

    Tidak

    background_restore

    Jika True, melakukan pemulihan latar belakang. Tipe: BOOL.

    False

    Tidak

    skin_retouching_bool

    Jika True, menerapkan retouching kulit. Tipe: BOOL.

    True

    Tidak

    photo_enhancement_bool

    Jika True, menerapkan peningkatan foto. Tipe: BOOL.

    True

    Tidak

    photo_enhancement_method

    Metode peningkatan foto. Nilai yang valid:

    • photo_fix

    • super_resolution

    photo_fix

    Tidak

    makeup_transfer

    Jika True, menerapkan transfer makeup. Tipe: BOOL.

    False

    Tidak

    makeup_transfer_ratio

    Rasio transfer makeup. Tipe: FLOAT.

    0.50

    Tidak

    Sistem mengembalikan hasil berikut:

    Python SDK

    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"}}

    Java SDK

    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

    Di mana:

    • index: Nomor urut permintaan dalam Elastic Algorithm Service (EAS).

    • request_id: ID unik permintaan. Anda dapat menggunakan ID ini untuk mengambil output.

    • Bidang lain berisi informasi tentang antrian.

  3. Gunakan kode berikut untuk membuat klien untuk antrian output dan mengambil hasilnya. Respons berisi gambar dalam pengkodean Base64.

    Python SDK

    # Create an output queue object to subscribe to and read the output data.
    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')

    Di mana:

    • sink_queue: Saat menginisialisasi QueueClient, gunakan endpoint layanan prediksi Anda.

    • <token>: Ganti dengan token untuk layanan prediksi Anda.

    Java SDK

    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 the 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());
            /** Send 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));
            // View the details of the input queue
            System.out.println(inputQueue.attributes());
            // View 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");
            }
            // View 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");
                }
            }
            /** Close the clients */
            inputQueue.shutdown();
            sinkQueue.shutdown();
        }
    }

    Di mana:

    • queueEndpoint: Atur ke endpoint layanan prediksi Anda.

    • inputQueueName: Atur ke nama antrian input Anda.

    • queueToken: Ganti dengan token untuk layanan prediksi Anda.

    • template_image: Atur ke URL gambar Anda.

    Permintaan yang berhasil mengembalikan hasil berikut:

    Python SDK

    '{"request_id": "12345", "code": "OK", "message": "success", "data": {"user_id": "zhoumo", "image": "iVBORw*****CYII=", "cost_time": 329.69798278808594}}'
    Catatan

    Kode 502 menunjukkan bahwa gambar masih dalam proses pembuatan.

    Java SDK

    ...
    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}}
    Catatan

    Jika respons menunjukkan no data, gambar masih dalam proses pembuatan.

    Parameter respons dijelaskan di bawah ini:

    Parameter

    Deskripsi

    request_id

    ID permintaan (string).

    code

    Kode status permintaan:

    • OK: Permintaan berhasil.

    • error: Permintaan gagal.

    message

    Informasi tentang status permintaan. Nilai success menunjukkan permintaan berhasil. Nilai lainnya menjelaskan kesalahan.

    data

    Konten respons. Bidang bersarang dijelaskan di bawah ini:

    • user_id: ID pengguna.

    • image: Gambar yang dihasilkan, dalam pengkodean Base64.

    • cost_time: Waktu yang dibutuhkan (float).