All Products
Search
Document Center

Image Search:Java SDK

Last Updated:Apr 02, 2026

Gunakan Image Search SDK untuk Java guna menambah, mencari, mengelola, dan membandingkan gambar di galeri Anda—tanpa perlu memanggil REST API secara langsung.

Metode

MetodeDeskripsi
AddMenambahkan gambar ke galeri gambar.
SearchImageByPicMenemukan gambar serupa dengan mengunggah gambar kueri.
SearchImageByNameMenemukan gambar serupa menggunakan gambar yang sudah ada di galeri.
DeleteMenghapus satu atau beberapa gambar dari galeri.
UpdateImageMemperbarui metadata gambar yang sudah ada.
DetailMengambil informasi instans.
DumpMetaMembuat tugas untuk mengekspor metadata.
DumpMetaListMenampilkan daftar tugas ekspor metadata.
BatchTaskMembuat tugas batch untuk operasi gambar massal.
BatchTaskListMenampilkan daftar tugas batch.
CompareSimilarByImageMenghitung skor kemiripan antara dua gambar.
CheckImageExistsMemeriksa apakah gambar tertentu ada di galeri.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  1. Membuat akun Alibaba Cloud dengan pasangan AccessKey. Untuk membuatnya, lihat Buat pasangan AccessKey. Gunakan pasangan AccessKey pengguna RAM, bukan kredensial akun root, dan simpan ID AccessKey serta rahasia di variabel lingkungan—jangan pernah menyematkannya langsung dalam kode sumber Anda.

  2. Menambahkan Image Search SDK ke proyek Anda sebagai dependensi Maven. Tambahkan kode berikut ke bagian <dependencies> pada file pom.xml Anda:

    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>imagesearch20201214</artifactId>
        <version>4.3.0</version>
    </dependency>
  3. Mengetahui nama instans Image Search Anda. Setelah membeli instans, temukan nama instans (bukan ID instans) di halaman daftar instans pada Konsol Image Search.

Inisialisasi klien

Semua contoh menggunakan inisialisasi klien yang sama. Atur regionId dan endpoint sesuai dengan wilayah tempat instans Image Search Anda ditempatkan.

import com.aliyun.imagesearch20201214.Client;
import com.aliyun.teaopenapi.models.Config;

Config authConfig = new Config();

// Muat kredensial dari variabel lingkungan
authConfig.accessKeyId = System.getenv("CC_AK_ENV");
authConfig.accessKeySecret = System.getenv("CC_SK_ENV");
authConfig.type = "access_key";

// Ganti dengan region ID dan endpoint instans Anda
authConfig.regionId = "ap-southeast-1";
authConfig.endpoint = "imagesearch.ap-southeast-1.aliyuncs.com";

// Untuk menggunakan endpoint VPC (hanya dari instance ECS di wilayah yang sama):
// authConfig.endpointType = "internal";
// authConfig.endpoint = "imagesearch-vpc.ap-southeast-1.aliyuncs.com";

Client client = new Client(authConfig);
import com.aliyun.imagesearch20201214.Client;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.imagesearch20201214.models.SearchImageByNameRequest;
import com.aliyun.imagesearch20201214.models.SearchImageByNameResponse;
import com.aliyun.tea.TeaException;
import java.util.List;
public class  SearchImageByName{
    public static void main(String[] args) throws Exception {
        // Konfigurasi
        Config authConfig = new Config();
        // Buat pasangan AK/SK: https://www.alibabacloud.com/help/zh/resource-access-management/latest/accesskey-pairs-create-an-accesskey-pair-for-a-ram-user
        // Pasangan AccessKey akun Alibaba Cloud memiliki izin untuk memanggil semua API. Kami menyarankan Anda menggunakan pengguna Resource Access Management (RAM) untuk memanggil API atau melakukan O&M rutin.
        // Jangan pernah menyimpan ID AccessKey dan rahasia AccessKey Anda di kode sumber. Hal ini dapat mengekspos kredensial Anda dan membahayakan semua resource di bawah akun Anda.
        // Contoh ini menyimpan ID AccessKey dan rahasia AccessKey di variabel lingkungan. Anda juga dapat menyimpannya di file konfigurasi sesuai kebutuhan.
        authConfig.accessKeyId = System.getenv("CC_AK_ENV");
        authConfig.accessKeySecret = System.getenv("CC_SK_ENV");
        authConfig.type = "access_key";
        authConfig.regionId = "ap-southeast-1"; // Ganti nilai ini dengan wilayah tempat instans Anda ditempatkan. Misalnya, jika instans Anda ditempatkan di Singapura, atur regionId menjadi "ap-southeast-1".
        authConfig.endpoint = "imagesearch.ap-southeast-1.aliyuncs.com"; // Ganti nilai ini dengan endpoint untuk wilayah instans Anda. Misalnya, jika instans Anda ditempatkan di Singapura, atur endpoint menjadi "imagesearch.ap-southeast-1.aliyuncs.com".
        
        // Berikut ini cara mengakses layanan melalui jaringan internal (VPC).
        // Catatan: Akses jaringan internal (VPC) hanya tersedia untuk instance ECS atau resource lain di wilayah yang sama dengan instans pencarian gambar Anda. Misalnya, jika instans pencarian gambar Anda ditempatkan di Singapura, instance ECS atau resource lain Anda juga harus ditempatkan di Singapura untuk mengakses layanan melalui endpoint VPC. Jika tidak, permintaan akan gagal. Jika Anda mengalami kegagalan, pastikan instance ECS atau resource lain Anda berada di wilayah yang sama dengan instans pencarian gambar Anda.
        // authConfig.endpointType = "internal";  // Diperlukan untuk akses jaringan internal (VPC). Atur parameter ini ke "internal".
        // authConfig.endpoint = "imagesearch-vpc.ap-southeast-1.aliyuncs.com"; // Ganti nilai ini dengan endpoint VPC untuk wilayah instans Anda. Misalnya, jika instans Anda ditempatkan di Singapura, atur endpoint menjadi "imagesearch-vpc.ap-southeast-1.aliyuncs.com".
        

        Client client = new Client(authConfig);
        SearchImageByNameRequest request = new SearchImageByNameRequest();
        // Wajib. Nama instans layanan pencarian gambar Anda. Catatan: Ini adalah nama instans, bukan ID instans. Anda dapat menemukannya di bagian informasi instans di Konsol Alibaba Cloud.
        request.instanceName = "XXXXXXXXX";
        // Wajib. ID produk. Panjang maksimum: 256 karakter.
        // Satu produk dapat memiliki beberapa gambar.
        request.productId = "test";
        // Wajib. Nama gambar. Panjang maksimum: 256 karakter.
        // ProductId + PicName secara unik mengidentifikasi sebuah gambar.
        request.picName = "1000";
        // Opsional. ID kategori produk.
        // 1. Untuk pencarian produk: Jika Anda menentukan kategori, sistem akan menggunakannya. Jika tidak, sistem akan memprediksi kategori tersebut. Anda dapat mengambil kategori yang diprediksi dari respons.
        // 2. Untuk pencarian gambar generik: Sistem akan mengatur kategori ke 88888888 terlepas dari apakah Anda menentukannya atau tidak.
        request.categoryId = 3;
        // Opsional. Jumlah hasil yang dikembalikan. Nilai valid: 1 hingga 100. Default: 10.
        request.num =10;
        // Opsional. Posisi awal hasil. Nilai valid: 0 hingga 499. Default: 0.
        request.start =0;
        // Opsional. Kondisi filter.
        // Operator yang didukung untuk int_attr: in, not in, >, >=, <, <=, =. Operator yang didukung untuk str_attr: in, not in, =, !=. Gabungkan beberapa kondisi dengan AND atau OR.
        // Contoh:
        //  1. Filter berdasarkan IntAttr: int_attr>=100
        //  2. Filter berdasarkan StrAttr: str_attr!="value1"
        //  3. Filter berdasarkan IntAttr dan StrAttr: int_attr=1000 AND str_attr="value1"
        request.filter="int_attr=56 AND str_attr=\"test\" AND int_attr2 in (56)";
        // Opsional. Ambang batas skor kemiripan.
        // Hanya gambar dengan skor kemiripan lebih besar dari atau sama dengan ambang batas ini yang dikembalikan. Rentang valid: 0,00 hingga 1,00. Mendukung hingga dua tempat desimal. Default: 0,00.
        request.scoreThreshold="0.54";
        try {
            SearchImageByNameResponse response = client.searchImageByName(request);
            System.out.println(response.getBody().requestId);
            System.out.println(response.getBody().picInfo.categoryId);
            System.out.println(response.getBody().picInfo.region);
            List<SearchImageByNameResponseBody.SearchImageByNameResponseBodyAuctions> auctions = response.getBody().getAuctions();
            for(SearchImageByNameResponseBody.SearchImageByNameResponseBodyAuctions auction:auctions) {    
                System.out.println(auction.categoryId + " " + auction.picName + " " 
                    + auction.productId + " " + auction.customContent + " " + auction.score + " " 
                    + auction.strAttr + " " + auction.intAttr);
            }
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getData());
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}
Endpoint virtual private cloud (VPC) hanya dapat diakses dari instance Elastic Compute Service (ECS) atau resource lain di wilayah yang sama dengan instans Image Search Anda. Menggunakan endpoint VPC dari wilayah berbeda akan menyebabkan panggilan gagal.

Add

Menambahkan gambar ke galeri. Sebuah gambar diidentifikasi secara unik oleh productId dan picName-nya. Jika gambar dengan productId dan picName yang sama sudah ada, gambar baru akan menggantikannya.

Gambar harus dalam format PNG, JPG, JPEG, BMP, GIF, WebP, TIFF, atau PPM, ukurannya tidak boleh melebihi 4 MB, dan dimensinya harus antara 100 hingga 4.096 piksel di setiap sisi.

Ganti <your-instance-name> dengan nama instans Anda, lalu perbarui jalur file atau URL gambar yang akan diunggah.

Contoh respons:

{
  "success": true,
  "message": "success",
  "picInfo": {
    "categoryId": 9,
    "region": "383,681,291,549"
  },
  "requestId": "016D63E3-D0C5-42D3-8879-55E1A705FBA4"
}

categoryId adalah kategori yang dipilih atau dikonfirmasi oleh sistem. region adalah area subjek yang terdeteksi dalam format x1,x2,y1,y2.

SearchImageByPic

Menemukan gambar yang mirip dengan gambar kueri yang Anda berikan. Metode ini mengembalikan hingga 100 hasil yang diurutkan berdasarkan skor kemiripan.

Ganti <your-instance-name> dengan nama instans Anda, lalu perbarui jalur file atau URL gambar kueri.

import com.aliyun.imagesearch20201214.Client;
import com.aliyun.imagesearch20201214.models.SearchImageByPicAdvanceRequest;
import com.aliyun.imagesearch20201214.models.SearchImageByPicResponse;
import com.aliyun.imagesearch20201214.models.SearchImageByPicResponseBody;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.tea.TeaException;
import com.aliyun.teautil.models.RuntimeOptions;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.List;

public class SearchImageByPic {
    public static void main(String[] args) throws Exception {
        Config authConfig = new Config();
        authConfig.accessKeyId = System.getenv("CC_AK_ENV");
        authConfig.accessKeySecret = System.getenv("CC_SK_ENV");
        authConfig.type = "access_key";
        authConfig.regionId = "ap-southeast-1";
        authConfig.endpoint = "imagesearch.ap-southeast-1.aliyuncs.com";
        Client client = new Client(authConfig);

        SearchImageByPicAdvanceRequest request = new SearchImageByPicAdvanceRequest();
        request.instanceName = "<your-instance-name>";  // Wajib
        request.categoryId = 3;                         // Opsional. Abaikan agar sistem memprediksi kategori.
        request.num = 10;                               // Opsional. Jumlah hasil yang dikembalikan. Nilai valid: 1–100. Default: 10.
        request.start = 0;                              // Opsional. Offset untuk paginasi. Nilai valid: 0–499. Default: 0.
        request.crop = true;                            // Opsional. true = cari berdasarkan subjek yang terdeteksi; false = gunakan seluruh gambar.
        request.region = "167,467,221,407";             // Opsional. Area subjek sebagai x1,x2,y1,y2. Menggantikan crop jika ditentukan.
        request.filter = "int_attr=56 AND str_attr=\"test\""; // Opsional. Filter berdasarkan atribut integer atau string.
        request.scoreThreshold = "0.54";                // Opsional. Ambang batas kemiripan (0,00–1,00). Hanya hasil yang skornya sama dengan atau di atas ambang ini yang dikembalikan.
        request.distinctProductId = false;              // Opsional. true = kembalikan paling banyak satu hasil per ID produk.

        RuntimeOptions runtimeObject = new RuntimeOptions();

        try {
            // Opsi 1: Unggah dari URL
            // String url = "https://www.example.com/123.jpg";
            // request.picContentObject = new URL(url).openStream();

            // Opsi 2: Unggah dari file lokal
            InputStream inputStream = new FileInputStream("D:/123.jpg");
            request.picContentObject = inputStream;

            SearchImageByPicResponse response = client.searchImageByPicAdvance(request, runtimeObject);

            // Info gambar kueri
            System.out.println("requestId: " + response.getBody().requestId);
            System.out.println("categoryId: " + response.getBody().picInfo.categoryId);
            System.out.println("region: " + response.getBody().picInfo.region);

            // Gambar yang cocok
            List<SearchImageByPicResponseBody.SearchImageByPicResponseBodyAuctions> auctions = response.getBody().getAuctions();
            for (SearchImageByPicResponseBody.SearchImageByPicResponseBodyAuctions auction : auctions) {
                System.out.println(auction.categoryId + " " + auction.picName + " "
                    + auction.productId + " " + auction.customContent + " " + auction.score + " "
                    + auction.strAttr + " " + auction.intAttr);
            }

            // Wilayah multi-subjek (ketika beberapa subjek terdeteksi dalam gambar kueri)
            System.out.println("Wilayah multi-subjek:");
            SearchImageByPicResponseBody.SearchImageByPicResponseBodyPicInfo picInfo = response.getBody().getPicInfo();
            for (SearchImageByPicResponseBody.SearchImageByPicResponseBodyPicInfoMultiRegion multiRegion : picInfo.getMultiRegion()) {
                System.out.println(multiRegion.region);
            }
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getData());
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}

Contoh respons:

{
  "requestId": "09BE019A-AE3D-4D22-99C9-10533D8AC631",
  "picInfo": {
    "categoryId": 3,
    "region": "167,467,221,407",
    "multiRegion": [
      { "region": "112,440,76,387" }
    ]
  },
  "auctions": [
    {
      "categoryId": 3,
      "picName": "1000",
      "productId": "test",
      "customContent": "this is a simple test",
      "score": 1.0,
      "strAttr": "test",
      "intAttr": 56
    }
  ]
}

Setiap gambar yang cocok dalam auctions berisi categoryId, picName, productId, customContent, score, strAttr, dan intAttr. Skor 1,0 menunjukkan kecocokan tepat. multiRegion mencantumkan bidang subjek tambahan yang terdeteksi ketika gambar kueri berisi beberapa subjek.

Sintaks filter: int_attr mendukung in, not in, >, >=, <, <=, dan =. str_attr mendukung in, not in, =, dan !=. Gabungkan kondisi dengan AND atau OR. Contoh:

  • int_attr>=100

  • str_attr!="value1"

  • int_attr=1000 AND str_attr="value1"

SearchImageByName

Menemukan gambar yang mirip dengan gambar yang sudah ada di galeri Anda, diidentifikasi oleh productId dan picName-nya. Gunakan metode ini jika Anda ingin mencari menggunakan gambar galeri yang sudah ada daripada mengunggah gambar baru.

Ganti <your-instance-name>, productId, dan picName dengan nilai Anda.

import com.aliyun.imagesearch20201214.Client;
import com.aliyun.imagesearch20201214.models.SearchImageByNameRequest;
import com.aliyun.imagesearch20201214.models.SearchImageByNameResponse;
import com.aliyun.imagesearch20201214.models.SearchImageByNameResponseBody;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.tea.TeaException;
import java.util.List;

public class SearchImageByName {
    public static void main(String[] args) throws Exception {
        Config authConfig = new Config();
        authConfig.accessKeyId = System.getenv("CC_AK_ENV");
        authConfig.accessKeySecret = System.getenv("CC_SK_ENV");
        authConfig.type = "access_key";
        authConfig.regionId = "ap-southeast-1";
        authConfig.endpoint = "imagesearch.ap-southeast-1.aliyuncs.com";
        Client client = new Client(authConfig);

        SearchImageByNameRequest request = new SearchImageByNameRequest();
        request.instanceName = "<your-instance-name>";  // Wajib
        request.productId = "test";                     // Wajib. ID produk gambar kueri.
        request.picName = "1000";                       // Wajib. Nama gambar kueri.
        request.categoryId = 3;                         // Opsional. Abaikan agar sistem memprediksi kategori.
        request.num = 10;                               // Opsional. Jumlah hasil yang dikembalikan. Nilai valid: 1–100. Default: 10.
        request.start = 0;                              // Opsional. Offset untuk paginasi. Nilai valid: 0–499. Default: 0.
        request.filter = "int_attr=56 AND str_attr=\"test\""; // Opsional. Lihat sintaks filter di SearchImageByPic.
        request.scoreThreshold = "0.54";                // Opsional. Ambang batas kemiripan (0,00–1,00).

        try {
            SearchImageByNameResponse response = client.searchImageByName(request);

            System.out.println("requestId: " + response.getBody().requestId);
            System.out.println("categoryId: " + response.getBody().picInfo.categoryId);
            System.out.println("region: " + response.getBody().picInfo.region);

            List<SearchImageByNameResponseBody.SearchImageByNameResponseBodyAuctions> auctions = response.getBody().getAuctions();
            for (SearchImageByNameResponseBody.SearchImageByNameResponseBodyAuctions auction : auctions) {
                System.out.println(auction.categoryId + " " + auction.picName + " "
                    + auction.productId + " " + auction.customContent + " " + auction.score + " "
                    + auction.strAttr + " " + auction.intAttr);
            }
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getData());
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}

Contoh respons:

{
  "requestId": "8F2441C8-EA05-461B-A4AC-5F5DE25FAC21",
  "picInfo": {
    "categoryId": 3,
    "region": null
  },
  "auctions": [
    {
      "categoryId": 3,
      "picName": "1000",
      "productId": "test",
      "customContent": "this is a simple test",
      "score": 1.0,
      "strAttr": "test",
      "intAttr": 56
    }
  ]
}

region bernilai null saat pencarian berdasarkan nama karena kueri didasarkan pada gambar yang sudah disimpan, bukan gambar yang diunggah.

Delete

Menghapus gambar dari galeri. Berikan productId untuk menghapus semua gambar di bawah produk tersebut, atau tentukan productId dan picName untuk menghapus satu gambar.

import com.aliyun.imagesearch20201214.Client;
import com.aliyun.imagesearch20201214.models.DeleteImageRequest;
import com.aliyun.imagesearch20201214.models.DeleteImageResponse;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.tea.TeaException;

public class Delete {
    public static void main(String[] args) throws Exception {
        Config authConfig = new Config();
        authConfig.accessKeyId = System.getenv("CC_AK_ENV");
        authConfig.accessKeySecret = System.getenv("CC_SK_ENV");
        authConfig.type = "access_key";
        authConfig.regionId = "ap-southeast-1";
        authConfig.endpoint = "imagesearch.ap-southeast-1.aliyuncs.com";
        Client client = new Client(authConfig);

        DeleteImageRequest request = new DeleteImageRequest();
        request.instanceName = "<your-instance-name>";  // Wajib
        request.productId = "test";                     // Wajib saat isDeleteByFilter adalah false. Maksimal 256 karakter.
        request.picName = "1000";                       // Opsional. Abaikan untuk menghapus semua gambar di bawah ID produk.
        request.isDeleteByFilter = false;               // Opsional. Atur ke true untuk menghapus berdasarkan ekspresi filter.
        request.filter = "intattr3=xxx";                // Digunakan hanya saat isDeleteByFilter adalah true.

        try {
            DeleteImageResponse response = client.deleteImage(request);
            System.out.println(response.getBody().toMap());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getData());
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}

Contoh respons:

{
  "Message": "success",
  "RequestId": "994A7095-09AA-127A-873B-A2279261605F",
  "Data": {
    "PicNames": ["82.png"]
  },
  "Code": 0,
  "Success": true
}

PicNames mencantumkan nama gambar yang dihapus.

UpdateImage

Memperbarui metadata gambar yang sudah ada—khususnya atribut integer, atribut string, atau konten yang ditentukan pengguna. productId dan picName mengidentifikasi gambar yang akan diperbarui dan tidak dapat diubah.

import com.aliyun.imagesearch20201214.Client;
import com.aliyun.imagesearch20201214.models.UpdateImageRequest;
import com.aliyun.imagesearch20201214.models.UpdateImageResponse;
import com.aliyun.teaopenapi.models.Config;

public class UpdateImage {
    public static void main(String[] args) throws Exception {
        Config authConfig = new Config();
        authConfig.accessKeyId = System.getenv("CC_AK_ENV");
        authConfig.accessKeySecret = System.getenv("CC_SK_ENV");
        authConfig.type = "access_key";
        authConfig.regionId = "ap-southeast-1";
        authConfig.endpoint = "imagesearch.ap-southeast-1.aliyuncs.com";
        Client client = new Client(authConfig);

        UpdateImageRequest request = new UpdateImageRequest();
        request.instanceName = "<your-instance-name>";  // Wajib
        request.setProductId("1");                      // Wajib. Mengidentifikasi gambar yang akan diperbarui.
        request.setPicName("1");                        // Wajib. Mengidentifikasi gambar yang akan diperbarui.
        request.setIntAttr(1);                          // Opsional. Atribut integer untuk pemfilteran.
        request.setStrAttr("test");                     // Opsional. Atribut string, maksimal 128 karakter.
        request.setCustomContent("This is a sample description"); // Opsional. Maksimal 4.096 karakter.

        UpdateImageResponse response = client.updateImage(request);
        System.out.println("requestId: " + response.getBody().requestId
            + ". success: " + response.getBody().success
            + ". message: " + response.getBody().message);
    }
}

Contoh respons:

{
  "requestId": "AB8AA177-89AB-14D5-BEE0-293C32D5C43A",
  "success": true,
  "message": null
}

Detail

Mengambil informasi tentang instans Image Search Anda, termasuk kapasitas, jumlah gambar, dan waktu kedaluwarsa.

import com.aliyun.imagesearch20201214.Client;
import com.aliyun.imagesearch20201214.models.DetailRequest;
import com.aliyun.imagesearch20201214.models.DetailResponse;
import com.aliyun.teaopenapi.models.Config;

public class Detail {
    public static void main(String[] args) throws Exception {
        Config authConfig = new Config();
        authConfig.accessKeyId = System.getenv("CC_AK_ENV");
        authConfig.accessKeySecret = System.getenv("CC_SK_ENV");
        authConfig.type = "access_key";
        authConfig.regionId = "ap-southeast-1";
        authConfig.endpoint = "imagesearch.ap-southeast-1.aliyuncs.com";
        Client client = new Client(authConfig);

        DetailRequest request = new DetailRequest();
        request.instanceName = "<your-instance-name>";  // Wajib

        DetailResponse detail = client.detail(request);
        System.out.println(detail.getBody().toMap());
    }
}

Contoh respons:

{
  "RequestId": "046913C5-942A-1DD2-959F-7CECD790ADB2",
  "Instance": {
    "Name": "xxxx",
    "Region": "cn-shanghai",
    "ServiceType": 0,
    "Capacity": 250,
    "TotalCount": 225320,
    "Qps": 5,
    "UtcCreate": 1633936585000,
    "UtcExpireTime": 1649692800000
  },
  "Success": true
}

Bidang utama: Capacity adalah jumlah maksimum gambar yang dapat ditampung instans. TotalCount adalah jumlah gambar saat ini. Qps adalah batas kueri per detik.

DumpMeta

Membuat tugas asinkron untuk mengekspor metadata dari galeri gambar Anda ke file Object Storage Service (OSS). Gunakan DumpMetaList untuk memeriksa status tugas dan mengambil URL unduhan.

import com.aliyun.imagesearch20201214.Client;
import com.aliyun.imagesearch20201214.models.DumpMetaRequest;
import com.aliyun.imagesearch20201214.models.DumpMetaResponse;
import com.aliyun.teaopenapi.models.Config;

public class DumpMeta {
    public static void main(String[] args) throws Exception {
        Config authConfig = new Config();
        authConfig.accessKeyId = System.getenv("CC_AK_ENV");
        authConfig.accessKeySecret = System.getenv("CC_SK_ENV");
        authConfig.type = "access_key";
        authConfig.regionId = "ap-southeast-1";
        authConfig.endpoint = "imagesearch.ap-southeast-1.aliyuncs.com";
        Client client = new Client(authConfig);

        DumpMetaRequest request = new DumpMetaRequest();
        request.instanceName = "<your-instance-name>";  // Wajib

        DumpMetaResponse response = client.dumpMeta(request);
        System.out.println(response.getBody().toMap());
    }
}

Contoh respons:

{
  "RequestId": "FC4191AA-1D5B-1001-9A70-18FBB2BD265B",
  "Data": {
    "Id": 567,
    "DumpMetaStatus": "PROCESSING"
  },
  "Success": true
}

Simpan nilai Id untuk memeriksa status tugas dengan DumpMetaList.

DumpMetaList

Menampilkan daftar tugas ekspor metadata dan mengambil URL unduhan untuk tugas yang selesai.

import com.aliyun.imagesearch20201214.Client;
import com.aliyun.imagesearch20201214.models.DumpMetaListRequest;
import com.aliyun.imagesearch20201214.models.DumpMetaListResponse;
import com.aliyun.teaopenapi.models.Config;

public class DumpMetaList {
    public static void main(String[] args) throws Exception {
        Config authConfig = new Config();
        authConfig.accessKeyId = System.getenv("CC_AK_ENV");
        authConfig.accessKeySecret = System.getenv("CC_SK_ENV");
        authConfig.type = "access_key";
        authConfig.regionId = "ap-southeast-1";
        authConfig.endpoint = "imagesearch.ap-southeast-1.aliyuncs.com";
        Client client = new Client(authConfig);

        DumpMetaListRequest request = new DumpMetaListRequest();
        request.instanceName = "<your-instance-name>";  // Wajib
        request.setId(567L);          // Opsional. Filter berdasarkan ID tugas.
        request.setPageNumber(1);     // Opsional. Default: 1.
        request.setPageSize(1);       // Opsional. Default: 20.

        DumpMetaListResponse response = client.dumpMetaList(request);
        System.out.println(response.getBody().toMap());
    }
}

Contoh respons:

{
  "RequestId": "850DFBD9-A179-12FB-B193-2D08ACEA586B",
  "Data": {
    "TotalCount": 1,
    "PageNumber": 1,
    "PageSize": 1,
    "DumpMetaList": [
      {
        "Id": 567,
        "Status": "SUCCESS",
        "Msg": "success",
        "Code": 0,
        "MetaUrl": "https://example.com/x?Expires=x",
        "UtcCreate": 1639969113000,
        "UtcModified": 1639969140000
      }
    ]
  }
}

Ketika Status bernilai SUCCESS, gunakan MetaUrl untuk mengunduh file metadata yang diekspor. URL ini memiliki batas waktu; unduh file sebelum kedaluwarsa.

BatchTask

Membuat tugas batch untuk menambahkan gambar yang disimpan di bucket OSS ke galeri Anda. Siapkan file increment.meta di jalur OSS sebelum memanggil metode ini—lihat Panduan Pengguna Image Search untuk format file tersebut.

import com.aliyun.imagesearch20201214.Client;
import com.aliyun.imagesearch20201214.models.IncreaseInstanceRequest;
import com.aliyun.imagesearch20201214.models.IncreaseInstanceResponse;
import com.aliyun.teaopenapi.models.Config;

public class BatchTask {
    public static void main(String[] args) throws Exception {
        Config authConfig = new Config();
        authConfig.accessKeyId = System.getenv("CC_AK_ENV");
        authConfig.accessKeySecret = System.getenv("CC_SK_ENV");
        authConfig.type = "access_key";
        authConfig.regionId = "ap-southeast-1";
        authConfig.endpoint = "imagesearch.ap-southeast-1.aliyuncs.com";
        Client client = new Client(authConfig);

        IncreaseInstanceRequest request = new IncreaseInstanceRequest();
        request.instanceName = "<your-instance-name>";  // Wajib
        request.setBucketName("bucketName");            // Wajib. Bucket OSS yang berisi gambar.
        request.setPath("/public/xxx");                 // Wajib. Jalur OSS tempat gambar dan increment.meta disimpan. Harus diawali dengan / dan tidak boleh diakhiri dengan /.
        request.setCallbackAddress("http://xxx/xxx");   // Opsional. URL callback (harus diawali http:// atau https://) yang dipanggil saat tugas selesai.

        IncreaseInstanceResponse response = client.increaseInstance(request);
        System.out.println(response.getBody().toMap());
    }
}

Contoh respons:

{
  "RequestId": "F9BAD635-3031-1EBB-BE9E-E9FCB318A28C",
  "Data": {
    "Id": 1470,
    "IncrementStatus": "PROCESSING"
  },
  "Success": true
}

Simpan nilai Id untuk memantau tugas dengan BatchTaskList.

BatchTaskList

Menampilkan daftar tugas batch dan memeriksa statusnya.

import com.aliyun.imagesearch20201214.Client;
import com.aliyun.imagesearch20201214.models.IncreaseListRequest;
import com.aliyun.imagesearch20201214.models.IncreaseListResponse;
import com.aliyun.teaopenapi.models.Config;

public class BatchTaskList {
    public static void main(String[] args) throws Exception {
        Config authConfig = new Config();
        authConfig.accessKeyId = System.getenv("CC_AK_ENV");
        authConfig.accessKeySecret = System.getenv("CC_SK_ENV");
        authConfig.type = "access_key";
        authConfig.regionId = "ap-southeast-1";
        authConfig.endpoint = "imagesearch.ap-southeast-1.aliyuncs.com";
        Client client = new Client(authConfig);

        IncreaseListRequest request = new IncreaseListRequest();
        request.instanceName = "<your-instance-name>";  // Wajib
        request.setId(1470L);                   // Opsional. Filter berdasarkan ID tugas.
        request.setBucketName("BucketName");    // Opsional. Filter berdasarkan nama bucket OSS.
        request.setPath("/localization/xxxx");  // Opsional. Filter berdasarkan jalur OSS.
        request.setPageNumber(1);               // Opsional. Default: 1.
        request.setPageSize(1);                 // Opsional. Default: 20.

        IncreaseListResponse response = client.increaseList(request);
        System.out.println(response.getBody().toMap());
    }
}

Contoh respons:

{
  "RequestId": "56E7E6CC-64AB-17CA-A7CD-1948FB953B8C",
  "Data": {
    "TotalCount": 1,
    "PageNumber": 1,
    "PageSize": 1,
    "Increments": {
      "Instance": [
        {
          "Id": 1464,
          "Status": "NORMAL",
          "Msg": "success",
          "Code": 0,
          "BucketName": "bucketName",
          "Path": "/xx/xx",
          "CallbackAddress": null,
          "ErrorUrl": "https://example.com/xxx?Expires=1670661540&xxx=xx",
          "UtcCreate": 1639107872000,
          "UtcModified": 1639125540000
        }
      ]
    }
  }
}

Jika ada gambar yang gagal diimpor, ErrorUrl menyediakan tautan ke file laporan yang mencantumkan kesalahan tersebut.

CompareSimilarByImage

Menghitung skor kemiripan antara dua gambar tanpa menggunakan galeri. Gunakan metode ini untuk membandingkan sepasang gambar secara langsung.

Ganti jalur file atau URL untuk primaryName dan secondaryName dengan gambar Anda.

package com.aliyun.sample;

import com.aliyun.imagesearch20201214.Client;
import com.aliyun.imagesearch20201214.models.CompareSimilarByImageAdvanceRequest;
import com.aliyun.imagesearch20201214.models.CompareSimilarByImageResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.teautil.models.RuntimeOptions;
import com.aliyun.teaopenapi.models.Config;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;

public class compareSimilarByImage {
    public static void main(String[] args) throws Exception {
        Config authConfig = new Config();
        authConfig.accessKeyId = System.getenv("CC_AK_ENV");
        authConfig.accessKeySecret = System.getenv("CC_SK_ENV");
        authConfig.type = "access_key";
        authConfig.regionId = "ap-southeast-1";
        authConfig.endpoint = "imagesearch.ap-southeast-1.aliyuncs.com";
        Client client = new Client(authConfig);

        CompareSimilarByImageAdvanceRequest request = new CompareSimilarByImageAdvanceRequest();
        request.setInstanceName("<your-instance-name>");  // Wajib

        try {
            // Opsi 1: Unggah dari URL
            // String primaryUrl = "https://www.example.com/1.jpg";
            // String secondaryUrl = "https://www.example.com/2.jpg";
            // request.setPrimaryPicContentObject(new URL(primaryUrl).openStream());
            // request.setSecondaryPicContentObject(new URL(secondaryUrl).openStream());

            // Opsi 2: Unggah dari file lokal
            InputStream primaryInputStream = new FileInputStream("D:/1.jpg");
            InputStream secondaryInputStream = new FileInputStream("D:/2.jpg");
            request.setPrimaryPicContentObject(primaryInputStream);
            request.setSecondaryPicContentObject(secondaryInputStream);

            RuntimeOptions runtimeOptions = new RuntimeOptions();
            CompareSimilarByImageResponse response = client.compareSimilarByImageAdvance(request, runtimeOptions);
            System.out.println(response.getBody().toMap());
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getData());
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}

Contoh respons:

{
  "Msg": "success",
  "Score": 1.0,
  "RequestId": "5C0F29D6-D5DA-1068-9A6A-F68B07F8E02F",
  "Code": 200,
  "Success": true
}

Score berkisar antara 0,0 hingga 1,0. Skor 1,0 berarti gambar identik.

CheckImageExists

Memeriksa apakah gambar tertentu ada di galeri, diidentifikasi oleh productId dan picName-nya. Metode ini mengembalikan metadata gambar jika ada.

import com.aliyun.imagesearch20201214.Client;
import com.aliyun.imagesearch20201214.models.CheckImageExistsRequest;
import com.aliyun.imagesearch20201214.models.CheckImageExistsResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;

public class CheckImageExists {
    public static void main(String[] args) throws Exception {
        Config authConfig = new Config();
        authConfig.accessKeyId = System.getenv("CC_AK_ENV");
        authConfig.accessKeySecret = System.getenv("CC_SK_ENV");
        authConfig.type = "access_key";
        authConfig.regionId = "ap-southeast-1";
        authConfig.endpoint = "imagesearch.ap-southeast-1.aliyuncs.com";
        Client client = new Client(authConfig);

        CheckImageExistsRequest request = new CheckImageExistsRequest();
        request.instanceName = "<your-instance-name>";  // Wajib
        request.productId = "123";                      // Wajib. Maksimal 256 karakter.
        request.picName = "123";                        // Wajib. Maksimal 256 karakter.

        RuntimeOptions runtimeObject = new RuntimeOptions();
        try {
            CheckImageExistsResponse response = client.checkImageExistsWithOptions(request, runtimeObject);
            System.out.println(response.getBody().toMap());
            System.out.println("requestId: " + response.getBody().requestId);
        } catch (TeaException e) {
            System.out.println(e.getCode());
            System.out.println(e.getData());
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}

Contoh respons:

{
  "Msg": "success",
  "RequestId": "xxx-xxx-xxx-xxx-xxxxx",
  "Exists": true,
  "Auctions": {
    "CategoryId": 88888888,
    "ProductId": "123",
    "PicName": "123",
    "CustomContent": null,
    "IntAttr": null,
    "IntAttr2": null,
    "IntAttr3": null,
    "IntAttr4": null,
    "StrAttr": null,
    "StrAttr2": null,
    "StrAttr3": null,
    "StrAttr4": null
  },
  "Code": 0,
  "Success": true
}

Ketika Exists bernilai true, objek Auctions berisi metadata gambar yang disimpan. CategoryId bernilai 88888888 menunjukkan bahwa gambar diindeks di bawah kategori pencarian gambar generik.