Memanggil API Analisis Gambar 4.0

Artikel ini menunjukkan cara memanggil API Analisis Gambar 4.0 untuk mengembalikan informasi tentang fitur visual gambar. Ini juga menunjukkan kepada Anda cara mengurai informasi yang dikembalikan.

Prasyarat

Panduan ini mengasumsikan Anda telah mengikuti langkah-langkah yang disebutkan di halaman mulai cepat. Ini berarti:

  • Anda telah membuat sumber daya Computer Vision dan mendapatkan URL kunci dan titik akhir.
  • Anda memiliki paket SDK yang sesuai yang terinstal dan Anda memiliki aplikasi mulai cepat yang sedang berjalan. Anda dapat mengubah aplikasi mulai cepat ini berdasarkan contoh kode di sini.

Membuat dan mengautentikasi klien

Untuk mengautentikasi terhadap layanan Analisis Gambar, Anda memerlukan kunci Computer Vision dan URL titik akhir. Panduan ini mengasumsikan bahwa Anda telah menentukan variabel VISION_KEY lingkungan dan VISION_ENDPOINT dengan kunci dan titik akhir Anda.

Tip

Jangan sertakan kunci langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik. Lihat artikel keamanan layanan Azure AI untuk opsi autentikasi lainnya seperti Azure Key Vault.

Mulailah dengan membuat objek ImageAnalysisClient . Contohnya:

string endpoint = Environment.GetEnvironmentVariable("VISION_ENDPOINT");
string key = Environment.GetEnvironmentVariable("VISION_KEY");

// Create an Image Analysis client.
ImageAnalysisClient client = new ImageAnalysisClient(
    new Uri(endpoint),
    new AzureKeyCredential(key));

Pilih gambar yang akan dianalisis

Anda dapat memilih gambar dengan menyediakan URL gambar yang dapat diakses publik, atau dengan meneruskan data biner ke SDK. Lihat Persyaratan gambar untuk format gambar yang didukung.

URL gambar

Buat objek Uri untuk gambar yang ingin Anda analisis.

Uri imageURL = new Uri("https://aka.ms/azsdk/image-analysis/sample.jpg");

Buffer gambar

Atau, Anda dapat meneruskan data gambar ke SDK melalui objek BinaryData . Misalnya, baca dari file gambar lokal yang ingin Anda analisis.

using FileStream stream = new FileStream("sample.jpg", FileMode.Open);
BinaryData imageData = BinaryData.FromStream(stream);

Fitur visual yang stabil

API Analysis 4.0 memberi Anda akses ke semua fitur analisis gambar layanan. Pilih operasi mana yang akan dilakukan berdasarkan kasus penggunaan Anda sendiri. Lihat gambaran umum untuk deskripsi setiap fitur. Contoh di bagian ini menambahkan semua fitur visual yang tersedia, tetapi untuk penggunaan praktis Anda mungkin membutuhkan lebih sedikit.

Penting

Fitur Captions visual dan DenseCaptions hanya didukung di wilayah Azure berikut: US Timur, Prancis Tengah, Korea Tengah, Eropa Utara, Asia Tenggara, Eropa Barat, AS Barat.

VisualFeatures visualFeatures =
    VisualFeatures.Caption |
    VisualFeatures.DenseCaptions |
    VisualFeatures.Objects |
    VisualFeatures.Read |
    VisualFeatures.Tags |
    VisualFeatures.People |
    VisualFeatures.SmartCrops;

Pilih opsi analisis

Gunakan objek ImageAnalysisOptions untuk menentukan berbagai opsi untuk panggilan Analyze API.

  • Bahasa: Anda dapat menentukan bahasa data yang dikembalikan. Bahasa ini bersifat opsional, dengan defaultnya adalah bahasa Inggris. Lihat Dukungan bahasa untuk daftar kode bahasa yang didukung dan fitur visual mana yang didukung untuk setiap bahasa.
  • Keterangan netral gender: Jika Anda mengekstrak keterangan atau keterangan padat (menggunakan VisualFeatures.Caption atau VisualFeatures.DenseCaptions), Anda dapat meminta keterangan netral gender. Keterangan netral gender bersifat opsional, dengan defaultnya adalah keterangan gender. Misalnya, dalam bahasa Inggris, ketika Anda memilih keterangan netral gender, istilah seperti wanita atau pria diganti dengan orang, dan anak laki-laki atau perempuan diganti dengan anak.
  • Pangkas rasio aspek: Rasio aspek dihitung dengan membagi lebar pemangkasan target dengan tinggi. Nilai yang didukung adalah dari 0,75 hingga 1,8 (inklusif). Mengatur properti ini hanya relevan ketika VisualFeatures.SmartCrops dipilih sebagai bagian dari daftar fitur visual. Jika Anda memilih VisualFeatures.SmartCrops tetapi tidak menentukan rasio aspek, layanan mengembalikan satu saran pemangkasan dengan rasio aspek yang terlihat pas. Dalam hal ini, rasio aspek adalah antara 0,5 dan 2,0 (inklusif).
ImageAnalysisOptions options = new ImageAnalysisOptions { 
    GenderNeutralCaption = true,
    Language = "en",
    SmartCropsAspectRatios = new float[] { 0.9F, 1.33F }};

Hubungi Analyze API

Bagian ini menunjukkan kepada Anda cara melakukan panggilan analisis ke layanan.

Panggil metode Analisis pada objek ImageAnalysisClient, seperti yang ditunjukkan di sini. Panggilan sinkron, dan akan memblokir hingga layanan mengembalikan hasil atau kesalahan terjadi. Atau, Anda dapat memanggil metode AnalyzeAsync yang tidak memblokir.

Gunakan objek input yang dibuat di bagian di atas. Untuk menganalisis dari buffer gambar alih-alih URL, ganti imageURL dalam panggilan metode dengan imageData variabel .

ImageAnalysisResult result = client.Analyze(
    imageURL,
    visualFeatures,
    options);

Dapatkan hasil dari layanan

Kode berikut menunjukkan kepada Anda cara mengurai hasil berbagai operasi Analisis.

Console.WriteLine("Image analysis results:");

// Print caption results to the console
Console.WriteLine(" Caption:");
Console.WriteLine($"   '{result.Caption.Text}', Confidence {result.Caption.Confidence:F4}");

// Print dense caption results to the console
Console.WriteLine(" Dense Captions:");
foreach (DenseCaption denseCaption in result.DenseCaptions.Values)
{
    Console.WriteLine($"   '{denseCaption.Text}', Confidence {denseCaption.Confidence:F4}, Bounding box {denseCaption.BoundingBox}");
}

// Print object detection results to the console
Console.WriteLine(" Objects:");
foreach (DetectedObject detectedObject in result.Objects.Values)
{
    Console.WriteLine($"   '{detectedObject.Tags.First().Name}', Bounding box {detectedObject.BoundingBox.ToString()}");
}

// Print text (OCR) analysis results to the console
Console.WriteLine(" Read:");
foreach (DetectedTextBlock block in result.Read.Blocks)
    foreach (DetectedTextLine line in block.Lines)
    {
        Console.WriteLine($"   Line: '{line.Text}', Bounding Polygon: [{string.Join(" ", line.BoundingPolygon)}]");
        foreach (DetectedTextWord word in line.Words)
        {
            Console.WriteLine($"     Word: '{word.Text}', Confidence {word.Confidence.ToString("#.####")}, Bounding Polygon: [{string.Join(" ", word.BoundingPolygon)}]");
        }
    }

// Print tags results to the console
Console.WriteLine(" Tags:");
foreach (DetectedTag tag in result.Tags.Values)
{
    Console.WriteLine($"   '{tag.Name}', Confidence {tag.Confidence:F4}");
}

// Print people detection results to the console
Console.WriteLine(" People:");
foreach (DetectedPerson person in result.People.Values)
{
    Console.WriteLine($"   Person: Bounding box {person.BoundingBox.ToString()}, Confidence {person.Confidence:F4}");
}

// Print smart-crops analysis results to the console
Console.WriteLine(" SmartCrops:");
foreach (CropRegion cropRegion in result.SmartCrops.Values)
{
    Console.WriteLine($"   Aspect ratio: {cropRegion.AspectRatio}, Bounding box: {cropRegion.BoundingBox}");
}

// Print metadata
Console.WriteLine(" Metadata:");
Console.WriteLine($"   Model: {result.ModelVersion}");
Console.WriteLine($"   Image width: {result.Metadata.Width}");
Console.WriteLine($"   Image hight: {result.Metadata.Height}");

Pemecahan Masalah

Penanganan pengecualian

Saat Anda berinteraksi dengan Analisis Gambar menggunakan .NET SDK, respons apa pun dari layanan yang tidak memiliki 200 kode status (berhasil) menghasilkan pengecualian yang dilemparkan. Misalnya, jika Anda mencoba menganalisis gambar yang tidak dapat diakses karena URL yang 400 rusak, status dikembalikan, menunjukkan permintaan buruk, dan pengecualian yang sesuai akan dilemparkan.

Dalam cuplikan berikut, kesalahan ditangani dengan baik dengan menangkap pengecualian dan menampilkan informasi tambahan tentang kesalahan.

var imageUrl = new Uri("https://some-host-name.com/non-existing-image.jpg");

try
{
    var result = client.Analyze(imageUrl, VisualFeatures.Caption);
}
catch (RequestFailedException e)
{
    if (e.Status != 200)
    {
        Console.WriteLine("Error analyzing image.");
        Console.WriteLine($"HTTP status code {e.Status}: {e.Message}");
    }
    else
    {
        throw;
    }
}

Anda dapat mempelajari selengkapnya tentang cara mengaktifkan pengelogan SDK di sini.

Prasyarat

Panduan ini mengasumsikan Anda telah mengikuti langkah-langkah yang disebutkan dalam mulai cepat. Ini berarti:

  • Anda telah membuat sumber daya Computer Vision dan mendapatkan URL kunci dan titik akhir.
  • Anda memiliki paket SDK yang sesuai yang terinstal dan Anda memiliki aplikasi mulai cepat yang sedang berjalan. Anda dapat mengubah aplikasi mulai cepat ini berdasarkan contoh kode di sini.

Membuat dan mengautentikasi klien

Untuk mengautentikasi terhadap layanan Analisis Gambar, Anda memerlukan kunci Computer Vision dan URL titik akhir. Panduan ini mengasumsikan bahwa Anda telah menentukan variabel VISION_KEY lingkungan dan VISION_ENDPOINT dengan kunci dan titik akhir Anda.

Tip

Jangan sertakan kunci langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik. Lihat artikel keamanan layanan Azure AI untuk opsi autentikasi lainnya seperti Azure Key Vault.

Mulailah dengan membuat objek ImageAnalysisClient menggunakan salah satu konstruktor. Contohnya:

client = ImageAnalysisClient(
    endpoint=endpoint,
    credential=AzureKeyCredential(key)
)

Pilih gambar yang akan dianalisis

Anda dapat memilih gambar dengan menyediakan URL gambar yang dapat diakses publik, atau dengan membaca data gambar ke dalam buffer input SDK. Lihat Persyaratan gambar untuk format gambar yang didukung.

URL gambar

Anda dapat menggunakan URL gambar sampel berikut.

# Define image URL
image_url = "https://learn.microsoft.com/azure/ai-services/computer-vision/media/quickstarts/presentation.png"

Buffer gambar

Atau, Anda dapat meneruskan gambar sebagai objek byte . Misalnya, baca dari file gambar lokal yang ingin Anda analisis.

# Load image to analyze into a 'bytes' object
with open("sample.jpg", "rb") as f:
    image_data = f.read()

Fitur visual yang stabil

API Analysis 4.0 memberi Anda akses ke semua fitur analisis gambar layanan. Pilih operasi mana yang akan dilakukan berdasarkan kasus penggunaan Anda sendiri. Lihat gambaran umum untuk deskripsi setiap fitur. Contoh di bagian ini menambahkan semua fitur visual yang tersedia, tetapi untuk penggunaan praktis Anda mungkin membutuhkan lebih sedikit.

visual_features =[
        VisualFeatures.TAGS,
        VisualFeatures.OBJECTS,
        VisualFeatures.CAPTION,
        VisualFeatures.DENSE_CAPTIONS,
        VisualFeatures.READ,
        VisualFeatures.SMART_CROPS,
        VisualFeatures.PEOPLE,
    ]

Memanggil metode analyze_from_url dengan opsi

Kode berikut memanggil metode analyze_from_url pada klien dengan fitur yang Anda pilih di atas dan opsi tambahan, yang ditentukan di bawah ini. Untuk menganalisis dari buffer gambar alih-alih URL, panggil metode analisis sebagai gantinya, dengan image_data=image_data sebagai argumen pertama.

# Analyze all visual features from an image stream. This will be a synchronously (blocking) call.
result = client.analyze_from_url(
    image_url=image_url,
    visual_features=visual_features,
    smart_crops_aspect_ratios=[0.9, 1.33],
    gender_neutral_caption=True,
    language="en"
)

Pilih rasio aspek pemangkasan cerdas

Rasio aspek dihitung dengan membagi lebar pemangkasan target dengan tinggi. Nilai yang didukung adalah dari 0,75 hingga 1,8 (inklusif). Pengaturan properti ini hanya relevan ketika VisualFeatures.SMART_CROPS dipilih sebagai bagian dari daftar fitur visual. Jika Anda memilih VisualFeatures.SMART_CROPS tetapi tidak menentukan rasio aspek, layanan mengembalikan satu saran pemotongan dengan rasio aspek yang terlihat pas. Dalam hal ini, rasio aspek adalah antara 0,5 dan 2,0 (inklusif).

Pilih keterangan netral gender

Jika Anda mengekstrak keterangan atau keterangan padat (menggunakan VisualFeatures.CAPTION atau VisualFeatures.DENSE_CAPTIONS), Anda dapat meminta keterangan netral gender. Keterangan netral gender bersifat opsional, dengan defaultnya adalah keterangan gender. Misalnya, dalam bahasa Inggris, ketika Anda memilih keterangan netral gender, istilah seperti wanita atau pria diganti dengan orang, dan anak laki-laki atau perempuan diganti dengan anak.

Tentukan bahasa

Anda dapat menentukan bahasa data yang dikembalikan. Bahasa ini bersifat opsional, dengan defaultnya adalah bahasa Inggris. Lihat Dukungan bahasa untuk daftar kode bahasa yang didukung dan fitur visual mana yang didukung untuk setiap bahasa.

Dapatkan hasil dari layanan

Kode berikut menunjukkan kepada Anda cara mengurai hasil dari analyze_from_url atau menganalisis operasi.

# Print all analysis results to the console
print("Image analysis results:")

if result.caption is not None:
    print(" Caption:")
    print(f"   '{result.caption.text}', Confidence {result.caption.confidence:.4f}")

if result.dense_captions is not None:
    print(" Dense Captions:")
    for caption in result.dense_captions.list:
        print(f"   '{caption.text}', {caption.bounding_box}, Confidence: {caption.confidence:.4f}")

if result.read is not None:
    print(" Read:")
    for line in result.read.blocks[0].lines:
        print(f"   Line: '{line.text}', Bounding box {line.bounding_polygon}")
        for word in line.words:
            print(f"     Word: '{word.text}', Bounding polygon {word.bounding_polygon}, Confidence {word.confidence:.4f}")

if result.tags is not None:
    print(" Tags:")
    for tag in result.tags.list:
        print(f"   '{tag.name}', Confidence {tag.confidence:.4f}")

if result.objects is not None:
    print(" Objects:")
    for object in result.objects.list:
        print(f"   '{object.tags[0].name}', {object.bounding_box}, Confidence: {object.tags[0].confidence:.4f}")

if result.people is not None:
    print(" People:")
    for person in result.people.list:
        print(f"   {person.bounding_box}, Confidence {person.confidence:.4f}")

if result.smart_crops is not None:
    print(" Smart Cropping:")
    for smart_crop in result.smart_crops.list:
        print(f"   Aspect ratio {smart_crop.aspect_ratio}: Smart crop {smart_crop.bounding_box}")

print(f" Image height: {result.metadata.height}")
print(f" Image width: {result.metadata.width}")
print(f" Model version: {result.model_version}")

Pemecahan Masalah

Pengecualian

Metode meningkatkan analyzepengecualian HttpResponseError untuk respons kode status HTTP yang tidak berhasil dari layanan. Pengecualiannya status_code adalah kode status respons HTTP. Pengecualian error.message berisi pesan terperinci yang memungkinkan Anda mendiagnosis masalah:

try:
    result = client.analyze( ... )
except HttpResponseError as e:
    print(f"Status code: {e.status_code}")
    print(f"Reason: {e.reason}")
    print(f"Message: {e.error.message}")

Misalnya, saat Anda memberikan kunci autentikasi yang salah:

Status code: 401
Reason: PermissionDenied
Message: Access denied due to invalid subscription key or wrong API endpoint. Make sure to provide a valid key for an active subscription and use a correct regional API endpoint for your resource.

Atau saat Anda memberikan URL gambar yang tidak ada atau tidak dapat diakses:

Status code: 400
Reason: Bad Request
Message: The provided image url is not accessible.

Pencatatan

Klien menggunakan pustaka pengelogan Python standar. SDK mencatat permintaan HTTP dan detail respons, yang mungkin berguna dalam pemecahan masalah. Untuk masuk ke stdout, tambahkan yang berikut ini:

import sys
import logging

# Acquire the logger for this client library. Use 'azure' to affect both
# 'azure.core` and `azure.ai.vision.imageanalysis' libraries.
logger = logging.getLogger("azure")

# Set the desired logging level. logging.INFO or logging.DEBUG are good options.
logger.setLevel(logging.INFO)

# Direct logging output to stdout (the default):
handler = logging.StreamHandler(stream=sys.stdout)
# Or direct logging output to a file:
# handler = logging.FileHandler(filename = 'sample.log')
logger.addHandler(handler)

# Optional: change the default logging format. Here we add a timestamp.
formatter = logging.Formatter("%(asctime)s:%(levelname)s:%(name)s:%(message)s")
handler.setFormatter(formatter)

Secara default log meredakan nilai string kueri URL, nilai beberapa header permintaan dan respons HTTP (termasuk Ocp-Apim-Subscription-Key yang menyimpan kunci), dan payload permintaan dan respons. Untuk membuat log tanpa redaksi, atur argumen logging_enable = True metode saat Anda membuat ImageAnalysisClient, atau saat Anda memanggil analyze klien.

# Create an Image Analysis client with none redacted log
client = ImageAnalysisClient(
    endpoint=endpoint,
    credential=AzureKeyCredential(key),
    logging_enable=True
)

Tidak ada log yang diredaksi yang dihasilkan hanya untuk tingkat logging.DEBUG log. Pastikan untuk melindungi log yang tidak ada yang diredaksi untuk menghindari penyusupan keamanan. Untuk informasi selengkapnya, lihat Mengonfigurasi pengelogan di pustaka Azure untuk Python

Prasyarat

Panduan ini mengasumsikan Anda telah mengikuti langkah-langkah di halaman mulai cepat. Ini berarti:

  • Anda telah membuat sumber daya Computer Vision dan mendapatkan URL kunci dan titik akhir.
  • Anda memiliki paket SDK yang sesuai yang terinstal dan Anda memiliki aplikasi mulai cepat yang sedang berjalan. Anda dapat mengubah aplikasi mulai cepat ini berdasarkan contoh kode di sini.

Membuat dan mengautentikasi klien

Untuk mengautentikasi dengan layanan Analisis Gambar, Anda memerlukan kunci Computer Vision dan URL titik akhir. Panduan ini mengasumsikan bahwa Anda telah menentukan variabel VISION_KEY lingkungan dan VISION_ENDPOINT dengan kunci dan titik akhir Anda.

Tip

Jangan sertakan kunci langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik. Lihat artikel keamanan layanan Azure AI untuk opsi autentikasi lainnya seperti Azure Key Vault.

Mulailah dengan membuat objek ImageAnalysisClient . Contohnya:

String endpoint = System.getenv("VISION_ENDPOINT");
String key = System.getenv("VISION_KEY");

if (endpoint == null || key == null) {
    System.out.println("Missing environment variable 'VISION_ENDPOINT' or 'VISION_KEY'.");
    System.out.println("Set them before running this sample.");
    System.exit(1);
}

// Create a synchronous Image Analysis client.
ImageAnalysisClient client = new ImageAnalysisClientBuilder()
    .endpoint(endpoint)
    .credential(new KeyCredential(key))
    .buildClient();

Pilih gambar yang akan dianalisis

Anda dapat memilih gambar dengan menyediakan URL gambar yang dapat diakses publik, atau dengan membaca data gambar ke dalam buffer input SDK. Lihat Persyaratan gambar untuk format gambar yang didukung.

URL gambar

Buat imageUrl string untuk menahan URL gambar yang dapat diakses publik yang ingin Anda analisis.

String imageUrl = "https://learn.microsoft.com/azure/ai-services/computer-vision/media/quickstarts/presentation.png";

Buffer gambar

Atau, Anda dapat meneruskan gambar sebagai buffer memori menggunakan objek BinaryData . Misalnya, baca dari file gambar lokal yang ingin Anda analisis.

BinaryData imageData = BinaryData.fromFile(new File("sample.png").toPath());

Fitur visual yang stabil

API Analysis 4.0 memberi Anda akses ke semua fitur analisis gambar layanan. Pilih operasi mana yang akan dilakukan berdasarkan kasus penggunaan Anda sendiri. Lihat gambaran umum untuk deskripsi setiap fitur. Contoh di bagian ini menambahkan semua fitur visual yang tersedia, tetapi untuk penggunaan praktis Anda mungkin membutuhkan lebih sedikit.

Penting

Fitur visual Keterangan dan DenseCaptions hanya didukung di wilayah Azure berikut: AS Timur, Prancis Tengah, Korea Tengah, Eropa Utara, Asia Tenggara, Eropa Barat, AS Barat.

// visualFeatures: Select one or more visual features to analyze.
List<VisualFeatures> visualFeatures = Arrays.asList(
            VisualFeatures.SMART_CROPS,
            VisualFeatures.CAPTION,
            VisualFeatures.DENSE_CAPTIONS,
            VisualFeatures.OBJECTS,
            VisualFeatures.PEOPLE,
            VisualFeatures.READ,
            VisualFeatures.TAGS);

Pilih opsi analisis

Gunakan objek ImageAnalysisOptions untuk menentukan berbagai opsi untuk panggilan Analyze API.

  • Bahasa: Anda dapat menentukan bahasa data yang dikembalikan. Bahasa ini bersifat opsional, dengan defaultnya adalah bahasa Inggris. Lihat Dukungan bahasa untuk daftar kode bahasa yang didukung dan fitur visual mana yang didukung untuk setiap bahasa.
  • Keterangan netral gender: Jika Anda mengekstrak keterangan atau keterangan padat (menggunakan VisualFeatures.CAPTION atau VisualFeatures.DENSE_CAPTIONS), Anda dapat meminta keterangan netral gender. Keterangan netral gender bersifat opsional, dengan defaultnya adalah keterangan gender. Misalnya, dalam bahasa Inggris, ketika Anda memilih keterangan netral gender, istilah seperti wanita atau pria diganti dengan orang, dan anak laki-laki atau perempuan diganti dengan anak.
  • Pangkas rasio aspek: Rasio aspek dihitung dengan membagi lebar pemangkasan target dengan tinggi. Nilai yang didukung adalah dari 0,75 hingga 1,8 (inklusif). Pengaturan properti ini hanya relevan ketika VisualFeatures.SMART_CROPS dipilih sebagai bagian dari daftar fitur visual. Jika Anda memilih VisualFeatures.SMART_CROPS tetapi tidak menentukan rasio aspek, layanan mengembalikan satu saran pemotongan dengan rasio aspek yang terlihat pas. Dalam hal ini, rasio aspek adalah antara 0,5 dan 2,0 (inklusif).
// Specify analysis options (or set `options` to null for defaults)
ImageAnalysisOptions options = new ImageAnalysisOptions()
    .setLanguage("en")
    .setGenderNeutralCaption(true)
    .setSmartCropsAspectRatios(Arrays.asList(0.9, 1.33, 1.78));

Memanggil metode analyzeFromUrl

Bagian ini menunjukkan kepada Anda cara melakukan panggilan analisis ke layanan.

Panggil metode analyzeFromUrl pada objek ImageAnalysisClient, seperti yang ditunjukkan di sini. Panggilan sinkron, dan akan memblokir hingga layanan mengembalikan hasil atau kesalahan terjadi. Atau, Anda dapat menggunakan objek ImageAnalysisAsyncClient sebagai gantinya , dan memanggil metode analyzeFromUrl yang tidak memblokir.

Untuk menganalisis dari buffer gambar alih-alih URL, panggil metode analisis sebagai gantinya, dan teruskan imageData sebagai argumen pertama.

try {
    // Analyze all visual features from an image URL. This is a synchronous (blocking) call.
    ImageAnalysisResult result = client.analyzeFromUrl(
        imageUrl,
        visualFeatures,
        options);

    printAnalysisResults(result);

} catch (HttpResponseException e) {
    System.out.println("Exception: " + e.getClass().getSimpleName());
    System.out.println("Status code: " + e.getResponse().getStatusCode());
    System.out.println("Message: " + e.getMessage());
} catch (Exception e) {
    System.out.println("Message: " + e.getMessage());
}

Dapatkan hasil dari layanan

Kode berikut menunjukkan kepada Anda cara mengurai hasil dari analisisFromUrl dan menganalisis operasi.

// Print all analysis results to the console
public static void printAnalysisResults(ImageAnalysisResult result) {

    System.out.println("Image analysis results:");

    if (result.getCaption() != null) {
        System.out.println(" Caption:");
        System.out.println("   \"" + result.getCaption().getText() + "\", Confidence "
            + String.format("%.4f", result.getCaption().getConfidence()));
    }

    if (result.getDenseCaptions() != null) {
        System.out.println(" Dense Captions:");
        for (DenseCaption denseCaption : result.getDenseCaptions().getValues()) {
            System.out.println("   \"" + denseCaption.getText() + "\", Bounding box "
                + denseCaption.getBoundingBox() + ", Confidence " + String.format("%.4f", denseCaption.getConfidence()));
        }
    }

    if (result.getRead() != null) {
        System.out.println(" Read:");
        for (DetectedTextLine line : result.getRead().getBlocks().get(0).getLines()) {
            System.out.println("   Line: '" + line.getText()
                + "', Bounding polygon " + line.getBoundingPolygon());
            for (DetectedTextWord word : line.getWords()) {
                System.out.println("     Word: '" + word.getText()
                    + "', Bounding polygon " + word.getBoundingPolygon()
                    + ", Confidence " + String.format("%.4f", word.getConfidence()));
            }
        }
    }

    if (result.getTags() != null) {
        System.out.println(" Tags:");
        for (DetectedTag tag : result.getTags().getValues()) {
            System.out.println("   \"" + tag.getName() + "\", Confidence " + String.format("%.4f", tag.getConfidence()));
        }
    }

    if (result.getObjects() != null) {
        System.out.println(" Objects:");
        for (DetectedObject detectedObject : result.getObjects().getValues()) {
            System.out.println("   \"" + detectedObject.getTags().get(0).getName() + "\", Bounding box "
                + detectedObject.getBoundingBox() + ", Confidence " + String.format("%.4f", detectedObject.getTags().get(0).getConfidence()));
        }
    }

    if (result.getPeople() != null) {
        System.out.println(" People:");
        for (DetectedPerson person : result.getPeople().getValues()) {
            System.out.println("   Bounding box "
                + person.getBoundingBox() + ", Confidence " + String.format("%.4f", person.getConfidence()));
        }
    }

    if (result.getSmartCrops() != null) {
        System.out.println(" Crop Suggestions:");
        for (CropRegion cropRegion : result.getSmartCrops().getValues()) {
            System.out.println("   Aspect ratio "
                + cropRegion.getAspectRatio() + ": Bounding box " + cropRegion.getBoundingBox());
        }
    }

    System.out.println(" Image height = " + result.getMetadata().getHeight());
    System.out.println(" Image width = " + result.getMetadata().getWidth());
    System.out.println(" Model version = " + result.getModelVersion());
}

Pemecahan Masalah

Pengecualian

Metode analyze melempar HttpResponseException ketika layanan merespons dengan kode status HTTP yang tidak berhasil. Pengecualian memegang getResponse().getStatusCode() kode status respons HTTP. Pengecualian getMessage() berisi pesan terperinci yang memungkinkan Anda mendiagnosis masalah:

try {
    ImageAnalysisResult result = client.analyze(...)
} catch (HttpResponseException e) {
    System.out.println("Exception: " + e.getClass().getSimpleName());
    System.out.println("Status code: " + e.getResponse().getStatusCode());
    System.out.println("Message: " + e.getMessage());
} catch (Exception e) {
    System.out.println("Message: " + e.getMessage());
}

Misalnya, saat Anda memberikan kunci autentikasi yang salah:

Exception: ClientAuthenticationException
Status code: 401
Message: Status code 401, "{"error":{"code":"401","message":"Access denied due to invalid subscription key or wrong API endpoint. Make sure to provide a valid key for an active subscription and use a correct regional API endpoint for your resource."}}"

Atau saat Anda memberikan gambar dalam format yang tidak dikenali:

Exception: HttpResponseException
Status code: 400
Message: Status code 400, "{"error":{"code":"InvalidRequest","message":"Image format is not valid.","innererror":{"code":"InvalidImageFormat","message":"Input data is not a valid image."}}}"

Mengaktifkan pengelogan permintaan/respons HTTP

Meninjau permintaan HTTP yang dikirim atau respons yang diterima melalui kawat ke layanan Analisis Gambar dapat berguna dalam pemecahan masalah. Pustaka klien Analisis Gambar mendukung kerangka kerja pengelogan konsol bawaan untuk tujuan penelusuran kesalahan sementara. Ini juga mendukung pengelogan yang lebih canggih menggunakan antarmuka SLF4J . Untuk informasi mendetail, lihat Menggunakan pengelogan di Azure SDK untuk Java.

Bagian di bawah ini membahas tentang mengaktifkan pengelogan konsol menggunakan kerangka kerja bawaan.

Dengan mengatur variabel lingkungan

Anda dapat mengaktifkan pengelogan konsol permintaan HTTP dan respons untuk seluruh aplikasi Anda dengan mengatur dua variabel lingkungan berikut. Perubahan ini memengaruhi setiap klien Azure yang mendukung pengelogan permintaan dan respons HTTP.

  • Atur variabel AZURE_LOG_LEVEL lingkungan ke debug
  • Atur variabel AZURE_HTTP_LOG_DETAIL_LEVEL lingkungan ke salah satu nilai berikut:
Nilai Tingkat pengelogan
none Pengelogan permintaan/respons HTTP dinonaktifkan
basic Hanya mencatat URL, metode HTTP, dan waktu untuk menyelesaikan permintaan.
headers Mencatat semuanya di BASIC, ditambah semua header permintaan dan respons.
body Mencatat semua yang ada di BASIC, ditambah semua isi permintaan dan respons.
body_and_headers Mencatat semua yang ada di HEADERS dan BODY.

Dengan mengatur httpLogOptions

Untuk mengaktifkan pengelogan konsol permintaan HTTP dan respons untuk satu klien

  • Atur variabel AZURE_LOG_LEVEL lingkungan ke debug
  • Tambahkan panggilan ke httpLogOptions saat membangun ImageAnalysisClient:
ImageAnalysisClient client = new ImageAnalysisClientBuilder()
    .endpoint(endpoint)
    .credential(new KeyCredential(key))
    .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
    .buildClient();

Enum HttpLogDetailLevel mendefinisikan tingkat pengelogan yang didukung.

Secara default, saat pengelogan, header HTTP dan nilai parameter kueri tertentu diredaksi. Dimungkinkan untuk mengambil alih default ini dengan menentukan header dan parameter kueri mana yang aman untuk dicatat:

ImageAnalysisClient client = new ImageAnalysisClientBuilder()
    .endpoint(endpoint)
    .credential(new KeyCredential(key))
    .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS)
        .addAllowedHeaderName("safe-to-log-header-name")
        .addAllowedQueryParamName("safe-to-log-query-parameter-name"))
    .buildClient();

Misalnya, untuk mendapatkan log lengkap permintaan HTTP yang tidak diredaksi, terapkan hal berikut:

    .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS)
        .addAllowedHeaderName("Ocp-Apim-Subscription-Key")
        .addAllowedQueryParamName("features")
        .addAllowedQueryParamName("language")
        .addAllowedQueryParamName("gender-neutral-caption")
        .addAllowedQueryParamName("smartcrops-aspect-ratios")
        .addAllowedQueryParamName("model-version"))

Tambahkan lebih banyak ke di atas untuk mendapatkan respons HTTP yang tidak diredaksi. Saat Anda berbagi log yang tidak diredaksi, pastikan log tersebut tidak berisi rahasia seperti kunci langganan Anda.

Prasyarat

Panduan ini mengasumsikan Anda telah mengikuti langkah-langkah yang disebutkan dalam mulai cepat. Ini berarti:

  • Anda telah membuat sumber daya Computer Vision dan mendapatkan URL kunci dan titik akhir.
  • Anda memiliki paket SDK yang sesuai yang terinstal dan Anda memiliki aplikasi mulai cepat yang sedang berjalan. Anda dapat mengubah aplikasi mulai cepat ini berdasarkan contoh kode di sini.

Membuat dan mengautentikasi klien

Untuk mengautentikasi terhadap layanan Analisis Gambar, Anda memerlukan kunci Computer Vision dan URL titik akhir. Panduan ini mengasumsikan bahwa Anda telah menentukan variabel VISION_KEY lingkungan dan VISION_ENDPOINT dengan kunci dan titik akhir Anda.

Tip

Jangan sertakan kunci langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik. Lihat artikel keamanan layanan Azure AI untuk opsi autentikasi lainnya seperti Azure Key Vault.

Mulailah dengan membuat objek ImageAnalysisClient . Contohnya:

// Load the .env file if it exists
require("dotenv").config();

const endpoint = process.env['VISION_ENDPOINT'] || '<your_endpoint>';
const key = process.env['VISION_KEY'] || '<your_key>';

const credential = new AzureKeyCredential(key);
const client = createClient(endpoint, credential);

Pilih gambar yang akan dianalisis

Anda dapat memilih gambar dengan menyediakan URL gambar yang dapat diakses publik, atau dengan membaca data gambar ke dalam buffer input SDK. Lihat Persyaratan gambar untuk format gambar yang didukung.

URL gambar

Anda dapat menggunakan URL gambar sampel berikut.

const imageUrl = 'https://learn.microsoft.com/azure/ai-services/computer-vision/media/quickstarts/presentation.png';

Buffer gambar

Atau, Anda dapat meneruskan gambar sebagai array data. Misalnya, baca dari file gambar lokal yang ingin Anda analisis.

const imagePath = '../sample.jpg';
const imageData = fs.readFileSync(imagePath);

Fitur visual yang stabil

API Analysis 4.0 memberi Anda akses ke semua fitur analisis gambar layanan. Pilih operasi mana yang akan dilakukan berdasarkan kasus penggunaan Anda sendiri. Lihat gambaran umum untuk deskripsi setiap fitur. Contoh di bagian ini menambahkan semua fitur visual yang tersedia, tetapi untuk penggunaan praktis Anda mungkin membutuhkan lebih sedikit.

const features = [
  'Caption',
  'DenseCaptions',
  'Objects',
  'People',
  'Read',
  'SmartCrops',
  'Tags'
];

Memanggil Analyze API dengan opsi

Kode berikut memanggil Analyze API dengan fitur yang Anda pilih di atas dan opsi tambahan, yang ditentukan di bawah ini. Untuk menganalisis dari buffer gambar alih-alih URL, ganti imageURL dalam panggilan metode dengan imageData.

const result = await client.path('/imageanalysis:analyze').post({
  body: {
      url: imageUrl
  },
  queryParameters: {
      features: features,
      'language': 'en',
      'gender-neutral-captions': 'true',
      'smartCrops-aspect-ratios': [0.9, 1.33]
  },
  contentType: 'application/json'
});

Pilih rasio aspek pemangkasan cerdas

Rasio aspek dihitung dengan membagi lebar pemangkasan target dengan tinggi. Nilai yang didukung adalah dari 0,75 hingga 1,8 (inklusif). Mengatur properti ini hanya relevan ketika VisualFeatures.SmartCrops dipilih sebagai bagian dari daftar fitur visual. Jika Anda memilih VisualFeatures.SmartCrops tetapi tidak menentukan rasio aspek, layanan mengembalikan satu saran pemangkasan dengan rasio aspek yang terlihat pas. Dalam hal ini, rasio aspek adalah antara 0,5 dan 2,0 (inklusif).

Pilih keterangan netral gender

Jika Anda mengekstrak keterangan atau keterangan padat (menggunakan VisualFeatures.Caption atau VisualFeatures.DenseCaptions), Anda dapat meminta keterangan netral gender. Keterangan netral gender bersifat opsional, dengan defaultnya adalah keterangan gender. Misalnya, dalam bahasa Inggris, ketika Anda memilih keterangan netral gender, istilah seperti wanita atau pria diganti dengan orang, dan anak laki-laki atau perempuan diganti dengan anak.

Tentukan bahasa

Anda dapat menentukan bahasa data yang dikembalikan. Bahasa ini bersifat opsional, dengan defaultnya adalah bahasa Inggris. Lihat Dukungan bahasa untuk daftar kode bahasa yang didukung dan fitur visual mana yang didukung untuk setiap bahasa.

Dapatkan hasil dari layanan

Kode berikut menunjukkan kepada Anda cara mengurai hasil berbagai operasi analisis .

const iaResult = result.body;

console.log(`Model Version: ${iaResult.modelVersion}`);
console.log(`Image Metadata: ${JSON.stringify(iaResult.metadata)}`);
if (iaResult.captionResult) {
  console.log(`Caption: ${iaResult.captionResult.text} (confidence: ${iaResult.captionResult.confidence})`);
}
if (iaResult.denseCaptionsResult) {
  iaResult.denseCaptionsResult.values.forEach(denseCaption => console.log(`Dense Caption: ${JSON.stringify(denseCaption)}`));
}
if (iaResult.objectsResult) {
  iaResult.objectsResult.values.forEach(object => console.log(`Object: ${JSON.stringify(object)}`));
}
if (iaResult.peopleResult) {
  iaResult.peopleResult.values.forEach(person => console.log(`Person: ${JSON.stringify(person)}`));
}
if (iaResult.readResult) {
  iaResult.readResult.blocks.forEach(block => console.log(`Text Block: ${JSON.stringify(block)}`));
}
if (iaResult.smartCropsResult) {
  iaResult.smartCropsResult.values.forEach(smartCrop => console.log(`Smart Crop: ${JSON.stringify(smartCrop)}`));
}
if (iaResult.tagsResult) {
  iaResult.tagsResult.values.forEach(tag => console.log(`Tag: ${JSON.stringify(tag)}`));
}

Pemecahan Masalah

Pencatatan

Mengaktifkan pengelogan dapat membantu menemukan informasi yang berguna tentang kegagalan. Untuk melihat log permintaan dan respons HTTP, atur variabel lingkungan AZURE_LOG_LEVEL ke info. Atau, pengelogan dapat diaktifkan saat runtime dengan memanggil setLogLevel di @azure/logger:

const { setLogLevel } = require("@azure/logger");

setLogLevel("info");

Untuk instruksi lebih rinci tentang cara mengaktifkan log, Anda dapat melihat dokumen paket @azure/pencatat.

Prasyarat

Panduan ini mengasumsikan Anda telah berhasil mengikuti langkah-langkah yang disebutkan di halaman mulai cepat. Ini berarti:

  • Anda telah membuat sumber daya Computer Vision dan mendapatkan URL kunci dan titik akhir.
  • Anda telah berhasil melakukan curl.exe panggilan ke layanan (atau menggunakan alat alternatif). Anda mengubah curl.exe panggilan berdasarkan contoh di sini.

Autentikasi terhadap layanan

Untuk mengautentikasi terhadap layanan Analisis Gambar, Anda memerlukan kunci Computer Vision dan URL titik akhir.

Tip

Jangan sertakan kunci langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik. Lihat artikel keamanan layanan Azure AI untuk opsi autentikasi lainnya seperti Azure Key Vault.

Contoh SDK mengasumsikan bahwa Anda menentukan variabel VISION_KEY lingkungan dan VISION_ENDPOINT dengan kunci dan titik akhir Anda.

Autentikasi dilakukan dengan menambahkan header permintaan HTTP Ocp-Apim-Subscription-Key dan mengaturnya ke kunci visi Anda. Panggilan dilakukan ke URL <endpoint>/computervision/imageanalysis:analyze?api-version=2024-02-01, di mana <endpoint> adalah URL titik akhir visi komputer unik Anda. Anda menambahkan string kueri berdasarkan opsi analisis Anda.

Pilih gambar yang akan dianalisis

Kode dalam panduan ini menggunakan gambar jarak jauh yang dirujuk oleh URL. Mungkin Anda ingin mencoba gambar milik sendiri yang berbeda untuk melihat kemampuan lengkap fitur Analisis Gambar.

Saat menganalisis citra jarak jauh, Anda menentukan URL citra dengan memformat badan permintaan seperti ini: {"url":"https://learn.microsoft.com/azure/cognitive-services/computer-vision/images/windows-kitchen.jpg"}. Tipe Konten harus .application/json

Untuk menganalisis citra lokal, Anda menempatkan data citra biner dalam badan permintaan HTTP. Tipe Konten harus application/octet-stream atau multipart/form-data.

Pilih opsi analisis

Pilih fitur visual saat menggunakan model standar

API Analysis 4.0 memberi Anda akses ke semua fitur analisis gambar layanan. Pilih operasi mana yang akan dilakukan berdasarkan kasus penggunaan Anda sendiri. Lihat gambaran umum untuk deskripsi setiap fitur. Contoh di bagian ini menambahkan semua fitur visual yang tersedia, tetapi untuk penggunaan praktis Anda mungkin membutuhkan lebih sedikit.

Fitur visual 'Keterangan' dan 'DenseCaptions' hanya didukung di wilayah Azure berikut: US Timur, Prancis Tengah, Korea Tengah, Eropa Utara, Asia Tenggara, Eropa Barat, AS Barat.

Catatan

REST API menggunakan istilah Smart Crops dan Smart Crops Aspect Ratios. SDK menggunakan istilah Pangkas Saran dan Pemangkasan Rasio Aspek. Keduanya merujuk ke operasi layanan yang sama. Demikian pula, REST API menggunakan istilah Baca untuk mendeteksi teks dalam gambar menggunakan Pengenalan Karakter Optik (OCR), sedangkan SDK menggunakan istilah Teks untuk operasi yang sama.

Anda dapat menentukan fitur mana yang ingin Anda gunakan dengan mengatur parameter kueri URL api Analysis 4.0. Parameter dapat memiliki beberapa nilai, dipisahkan dengan koma.

Parameter URL Nilai Deskripsi
features read Membaca teks yang terlihat dalam gambar dan mengeluarkannya sebagai data JSON terstruktur.
features caption Menjelaskan konten gambar dengan kalimat lengkap dalam bahasa yang didukung.
features denseCaptions Menghasilkan keterangan terperinci hingga 10 wilayah gambar yang menonjol.
features smartCrops Menemukan koordinat persegi panjang yang akan memangkas gambar ke rasio aspek yang diinginkan sambil mempertahankan area yang diinginkan.
features objects Mendeteksi berbagai objek dalam gambar, termasuk perkiraan lokasi. Argumen Brands hanya tersedia dalam bahasa Inggris.
features tags Menandai gambar dengan daftar kata terperinci yang terkait dengan konten gambar.
features people Mendeteksi orang yang muncul dalam gambar, termasuk perkiraan lokasi.

URL yang diisi terlihat seperti ini:

<endpoint>/computervision/imageanalysis:analyze?api-version=2024-02-01&features=tags,read,caption,denseCaptions,smartCrops,objects,people

Mengatur nama model saat menggunakan model kustom

Anda juga dapat melakukan analisis gambar dengan model terlatih kustom. Untuk membuat dan melatih model, lihat Membuat model Analisis Gambar kustom. Setelah model Anda dilatih, yang Anda butuhkan adalah nama model. Anda tidak perlu menentukan fitur visual jika Anda menggunakan model kustom.

Untuk menggunakan model kustom, jangan gunakan parameter kueri fitur. Sebagai gantinya, atur parameter ke nama model Anda seperti yang model-name ditunjukkan di sini. Ganti MyCustomModelName dengan nama model kustom Anda.

<endpoint>/computervision/imageanalysis:analyze?api-version=2023-02-01&model-name=MyCustomModelName

Tentukan bahasa

Anda dapat menentukan bahasa data yang dikembalikan. Bahasa ini bersifat opsional, dengan defaultnya adalah bahasa Inggris. Lihat Dukungan bahasa untuk daftar kode bahasa yang didukung dan fitur visual mana yang didukung untuk setiap bahasa.

Opsi bahasa hanya berlaku saat Anda menggunakan model standar.

Parameter kueri URL berikut menentukan bahasa. Nilai defaultnya adalah en.

Parameter URL Nilai Deskripsi
language en Inggris
language es Spanyol
language ja Jepang
language pt Portugis
language zh Bahasa Tionghoa Sederhana

URL yang diisi terlihat seperti ini:

<endpoint>/computervision/imageanalysis:analyze?api-version=2024-02-01&features=caption&language=en

Pilih keterangan netral gender

Jika Anda mengekstrak keterangan atau keterangan padat, Anda dapat meminta keterangan netral gender. Keterangan netral gender bersifat opsional, dengan defaultnya adalah keterangan gender. Misalnya, dalam bahasa Inggris, ketika Anda memilih keterangan netral gender, istilah seperti wanita atau pria diganti dengan orang, dan anak laki-laki atau perempuan diganti dengan anak.

Opsi keterangan netral gender hanya berlaku saat Anda menggunakan model standar.

Tambahkan string gender-neutral-caption kueri opsional dengan nilai true atau false (default).

URL yang diisi terlihat seperti ini:

<endpoint>/computervision/imageanalysis:analyze?api-version=2024-02-01&features=caption&gender-neutral-caption=true

Pilih rasio aspek pemangkasan cerdas

Rasio aspek dihitung dengan membagi lebar pemangkasan target dengan tinggi. Nilai yang didukung adalah dari 0,75 hingga 1,8 (inklusif). Mengatur properti ini hanya relevan ketika VisualFeatures.SmartCrops dipilih sebagai bagian dari daftar fitur visual. Jika Anda memilih VisualFeatures.SmartCrops tetapi tidak menentukan rasio aspek, layanan mengembalikan satu saran pemangkasan dengan rasio aspek yang terlihat pas. Dalam hal ini, rasio aspek adalah antara 0,5 dan 2,0 (inklusif).

Jatah aspek pemotongan cerdas hanya berlaku saat Anda menggunakan model standar.

Tambahkan string smartcrops-aspect-ratioskueri opsional , dengan satu atau beberapa rasio aspek yang dipisahkan oleh koma.

URL yang diisi terlihat seperti ini:

<endpoint>/computervision/imageanalysis:analyze?api-version=2024-02-01&features=smartCrops&smartcrops-aspect-ratios=0.8,1.2

Dapatkan hasil dari layanan

Mendapatkan hasil menggunakan model standar

Bagian ini menunjukkan kepada Anda cara melakukan panggilan analisis ke layanan menggunakan model standar, dan mendapatkan hasilnya.

Layanan mengembalikan respons HTTP 200, dan isi berisi data yang dikembalikan dalam bentuk string JSON. Teks berikut ini adalah contoh respons JSON.

{
    "modelVersion": "string",
    "captionResult": {
      "text": "string",
      "confidence": 0.0
    },
    "denseCaptionsResult": {
      "values": [
        {
          "text": "string",
          "confidence": 0.0,
          "boundingBox": {
            "x": 0,
            "y": 0,
            "w": 0,
            "h": 0
          }
        }
      ]
    },
    "metadata": {
      "width": 0,
      "height": 0
    },
    "tagsResult": {
      "values": [
        {
          "name": "string",
          "confidence": 0.0
        }
      ]
    },
    "objectsResult": {
      "values": [
        {
          "id": "string",
          "boundingBox": {
            "x": 0,
            "y": 0,
            "w": 0,
            "h": 0
          },
          "tags": [
            {
              "name": "string",
              "confidence": 0.0
            }
          ]
        }
      ]
    },
    "readResult": {
      "blocks": [
        {
          "lines": [
            {
              "text": "string",
              "boundingPolygon": [
                {
                  "x": 0,
                  "y": 0
                },
                {
                    "x": 0,
                    "y": 0
                },
                {
                    "x": 0,
                    "y": 0
                },
                {
                    "x": 0,
                    "y": 0
                }
              ],
              "words": [
                {
                  "text": "string",
                  "boundingPolygon": [
                    {
                        "x": 0,
                        "y": 0
                    },
                    {
                        "x": 0,
                        "y": 0
                    },
                    {
                        "x": 0,
                        "y": 0
                    },
                    {
                        "x": 0,
                        "y": 0
                    }
                  ],
                  "confidence": 0.0
                }
              ]
            }
          ]
        }
      ]
    },
    "smartCropsResult": {
      "values": [
        {
          "aspectRatio": 0.0,
          "boundingBox": {
            "x": 0,
            "y": 0,
            "w": 0,
            "h": 0
          }
        }
      ]
    },
    "peopleResult": {
      "values": [
        {
          "boundingBox": {
            "x": 0,
            "y": 0,
            "w": 0,
            "h": 0
          },
          "confidence": 0.0
        }
      ]
    }
  }

Kode kesalahan

Jika terjadi kesalahan, respons layanan Analisis Gambar berisi payload JSON yang menyertakan kode kesalahan dan pesan kesalahan. Ini juga dapat mencakup detail lain dalam bentuk dan kode kesalahan dalam dan pesan. Contohnya:

{
    "error":
    {
        "code": "InvalidRequest",
        "message": "Analyze query is invalid.",
        "innererror":
        {
            "code": "NotSupportedVisualFeature",
            "message": "Specified feature type is not valid"
        }
    }
}

Berikut ini adalah daftar kesalahan umum dan penyebabnya. Item daftar disajikan dalam format berikut:

  • Kode respons HTTP
    • Kode kesalahan dan pesan dalam respons JSON
      • [Opsional] Kode kesalahan dalam dan pesan dalam respons JSON

Daftar kesalahan umum:

  • 400 Bad Request
    • InvalidRequest - Image URL is badly formatted or not accessible. Pastikan URL gambar valid dan dapat diakses publik.
    • InvalidRequest - The image size is not allowed to be zero or larger than 20971520 bytes. Kurangi ukuran gambar dengan mengompresinya dan/atau mengubah ukuran, dan mengirim ulang permintaan Anda.
    • InvalidRequest - The feature 'Caption' is not supported in this region. Fitur ini hanya didukung di wilayah Azure tertentu. Lihat Prasyarat mulai cepat untuk daftar wilayah Azure yang didukung.
    • InvalidRequest - The provided image content type ... is not supported. Header HTTP Content-Type dalam permintaan bukanlah jenis yang diizinkan:
      • Untuk URL gambar, Tipe Konten harus application/json
      • Untuk data gambar biner, Tipe Konten harus application/octet-stream atau multipart/form-data
    • InvalidRequest - Either 'features' or 'model-name' needs to be specified in the query parameter.
    • InvalidRequest - Image format is not valid
      • InvalidImageFormat - Image format is not valid. Lihat bagian Persyaratan gambar untuk format gambar yang didukung.
    • InvalidRequest - Analyze query is invalid
      • NotSupportedVisualFeature - Specified feature type is not valid. Pastikan string kueri fitur memiliki nilai yang valid.
      • NotSupportedLanguage - The input language is not supported. Pastikan string kueri bahasa memiliki nilai yang valid untuk fitur visual yang dipilih, berdasarkan tabel berikut.
      • BadArgument - 'smartcrops-aspect-ratios' aspect ratio is not in allowed range [0.75 to 1.8]
  • 401 PermissionDenied
    • 401 - Access denied due to invalid subscription key or wrong API endpoint. Make sure to provide a valid key for an active subscription and use a correct regional API endpoint for your resource.
  • 404 Resource Not Found
    • 404 - Resource not found. Layanan tidak dapat menemukan model kustom berdasarkan nama yang disediakan oleh model-name string kueri.

Langkah berikutnya