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
-
Memeriksa apakah kualitas gambar memenuhi persyaratan.
-
Tahap ini pertama-tama melakukan pra-pemrosesan dan memeriksa kualitas gambar, lalu menggunakan LoRA untuk secara otomatis melatih dan mengevaluasinya, menghasilkan model yang dioptimalkan.
-
-
Pra-pemrosesan gambar.
-
Pembuatan gambar awal.
-
Pembuatan gambar sekunder.
-
Prasyarat
-
Anda telah mengonfigurasi VPC dengan akses internet, yang mencakup hal-hal berikut:
-
Membuat VPC, vSwitch, dan security group. Untuk informasi selengkapnya, lihat Buat VPC IPv4 dan Buat security group.
-
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
-
Masuk ke Konsol PAI. Pilih wilayah di bagian atas halaman. Lalu, pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).
-
Klik Deploy Service. Di bagian Custom Model Deployment, klik Custom Deployment.
-
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": 1untuk 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 } ] } -
-
-
Klik Deploy.
Penerapan selesai ketika Service Status menunjukkan Running.
Layanan pelatihan
-
Masuk ke Konsol PAI. Pilih wilayah di bagian atas halaman. Lalu, pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).
-
Klik Deploy Service. Di bagian Custom Model Deployment, klik Custom Deployment.
-
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": 1untuk 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 } ] } -
-
-
Klik Deploy.
Penerapan selesai ketika Service Status menunjukkan Running.
Terapkan layanan prediksi
-
Masuk ke Konsol PAI. Pilih wilayah di bagian atas halaman. Lalu, pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).
-
Klik Deploy Service. Di bagian Custom Model Deployment, klik Custom Deployment.
-
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/webuiatau jalur NAS Anda/photog_oss/webuisesuai 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 sepertiembeddings,models, dantrain, 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": 1untuk 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/" } ] } -
-
-
Klik Deploy.
Penerapan selesai ketika Service Status menunjukkan Running.
Panggil API
Langkah 1: Panggil API verifikasi gambar
-
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.
-
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 0Dalam 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.
-
-
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 parameterauto_deletemenjadi 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
successmenunjukkan 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
successmenunjukkan 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.
-
Langkah 2: Panggil API pelatihan LoRA
-
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.
-
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 0Dalam output ini:
-
index: Menunjukkan nomor urut permintaan dalam EAS.
-
request_id: Pengidentifikasi unik untuk permintaan, digunakan untuk mengambil hasil.
-
Sisa output menunjukkan detail antrian.
-
-
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}}'CatatanJika 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}}CatatanJika 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,
successmenunjukkan 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
-
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.
-
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 0Di 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.
-
-
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}}'CatatanKode 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}}CatatanJika 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).
-