Chiamare l'API Analisi immagini 4.0

Questo articolo illustra come chiamare l'API Image Analysis 4.0 per restituire informazioni sulle funzionalità visive di un'immagine. Illustra anche come analizzare le informazioni restituite.

Prerequisiti

Questa guida presuppone che siano stati seguiti i passaggi indicati nella pagina di avvio rapido. Ciò significa:

  • È stata creata una risorsa Visione artificiale e si è ottenuta una chiave e un URL dell'endpoint.
  • Il pacchetto SDK appropriato è installato ed è disponibile un'applicazione di avvio rapido in esecuzione. È possibile modificare questa applicazione di avvio rapido in base a esempi di codice qui.

Creare ed autenticare il client

Per eseguire l'autenticazione con il servizio Analisi immagini, è necessario un URL di endpoint e una chiave Visione artificiale. Questa guida presuppone che siano state definite le variabili VISION_KEY di ambiente e VISION_ENDPOINT con la chiave e l'endpoint.

Suggerimento

Non includere la chiave direttamente nel codice e non pubblicarla pubblicamente. Per altre opzioni di autenticazione come Azure Key Vault, vedere l'articolo sicurezza dei servizi di intelligenza artificiale di Azure.

Per iniziare, creare un oggetto ImageAnalysisClient . Ad esempio:

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));

Selezionare l'immagine da analizzare

È possibile selezionare un'immagine fornendo un URL di immagine accessibile pubblicamente o passando i dati binari all'SDK. Vedere Requisiti delle immagini per i formati di immagine supportati.

Image URL

Creare un oggetto Uri per l'immagine da analizzare.

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

Buffer delle immagini

In alternativa, è possibile passare i dati dell'immagine all'SDK tramite un oggetto BinaryData . Ad esempio, leggere da un file di immagine locale che si vuole analizzare.

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

Selezionare le funzionalità visive

L'API Analysis 4.0 consente di accedere a tutte le funzionalità di analisi delle immagini del servizio. Scegliere le operazioni da eseguire in base al proprio caso d'uso. Per una descrizione di ogni funzionalità, vedere la panoramica . L'esempio in questa sezione aggiunge tutte le funzionalità visive disponibili, ma per un utilizzo pratico è probabile che sia necessario meno.

Importante

Le funzionalità Captions visive e DenseCaptions sono supportate solo nelle aree di Azure seguenti: Stati Uniti orientali, Francia centrale, Corea centrale, Europa settentrionale, Asia sud-orientale, Europa occidentale, Stati Uniti occidentali.

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

Selezionare le opzioni di analisi

Usare un oggetto ImageAnalysisOptions per specificare varie opzioni per la chiamata API Analyze.

  • Lingua: è possibile specificare la lingua dei dati restituiti. La lingua è facoltativa, con l'impostazione predefinita inglese. Per un elenco dei codici linguistici supportati e delle funzionalità visive supportate per ogni lingua, vedere Supporto della lingua.
  • Didascalia indipendenti dal genere: se si estraggono didascalia o didascalia densi (usando VisualFeatures.Caption o VisualFeatures.DenseCaptions), è possibile richiedere didascalia indipendenti dal genere. Le didascalia neutrali di genere sono facoltative, con l'impostazione predefinita didascalia di genere. Ad esempio, in inglese, quando si seleziona il sesso neutro didascalia, termini come donna o uomo vengono sostituiti con la persona e ragazzo o ragazza vengono sostituiti con figlio.
  • Proporzioni ritaglio: le proporzioni sono calcolate dividendo la larghezza del ritaglio di destinazione in base all'altezza. I valori supportati sono compresi tra 0,75 e 1,8 (inclusi). L'impostazione di questa proprietà è rilevante solo quando VisualFeatures.SmartCrops è stato selezionato come parte dell'elenco delle funzionalità visive. Se si seleziona VisualFeatures.SmartCrops, ma non si specificano proporzioni, il servizio restituisce un suggerimento di ritaglio con proporzioni che rileva l'adattamento. In questo caso, le proporzioni sono comprese tra 0,5 e 2,0 (incluse).
ImageAnalysisOptions options = new ImageAnalysisOptions { 
    GenderNeutralCaption = true,
    Language = "en",
    SmartCropsAspectRatios = new float[] { 0.9F, 1.33F }};

Chiamare l'API Analyze

Questa sezione illustra come effettuare una chiamata di analisi al servizio.

Chiamare il metodo Analyze nell'oggetto ImageAnalysisClient , come illustrato di seguito. La chiamata è sincrona e bloccherà fino a quando il servizio non restituisce i risultati o si è verificato un errore. In alternativa, è possibile chiamare il metodo AnalyzeAsync non bloccante.

Usare gli oggetti di input creati nelle sezioni precedenti. Per analizzare da un buffer di immagini anziché da URL, sostituire imageURL nella chiamata al metodo con la imageData variabile .

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

Ottenere risultati dal servizio

Il codice seguente illustra come analizzare i risultati delle varie operazioni di analisi.

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

Risoluzione dei problemi

Gestione delle eccezioni

Quando si interagisce con l'analisi delle immagini con .NET SDK, qualsiasi risposta del servizio che non ha un 200 codice di stato (esito positivo) genera un'eccezione. Ad esempio, se si tenta di analizzare un'immagine non accessibile a causa di un URL interrotto, viene restituito uno 400 stato, che indica una richiesta non valida e viene generata un'eccezione corrispondente.

Nel frammento di codice seguente gli errori vengono gestiti normalmente rilevando l'eccezione e visualizzando informazioni aggiuntive sull'errore.

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

Per altre informazioni su come abilitare la registrazione dell'SDK, vedere qui.

Prerequisiti

Questa guida presuppone che siano stati seguiti i passaggi indicati nella guida introduttiva. Ciò significa:

  • È stata creata una risorsa Visione artificiale e si è ottenuta una chiave e un URL dell'endpoint.
  • Il pacchetto SDK appropriato è installato ed è disponibile un'applicazione di avvio rapido in esecuzione. È possibile modificare questa applicazione di avvio rapido in base agli esempi di codice qui.

Creare ed autenticare il client

Per eseguire l'autenticazione con il servizio Analisi immagini, è necessario un URL di endpoint e una chiave Visione artificiale. Questa guida presuppone che siano state definite le variabili VISION_KEY di ambiente e VISION_ENDPOINT con la chiave e l'endpoint.

Suggerimento

Non includere la chiave direttamente nel codice e non pubblicarla pubblicamente. Per altre opzioni di autenticazione come Azure Key Vault, vedere l'articolo sicurezza dei servizi di intelligenza artificiale di Azure.

Per iniziare, creare un oggetto ImageAnalysisClient usando uno dei costruttori. Ad esempio:

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

Selezionare l'immagine da analizzare

È possibile selezionare un'immagine fornendo un URL di immagine accessibile pubblicamente o leggendo i dati dell'immagine nel buffer di input dell'SDK. Vedere Requisiti delle immagini per i formati di immagine supportati.

Image URL

È possibile usare l'URL dell'immagine di esempio seguente.

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

Buffer delle immagini

In alternativa, è possibile passare l'immagine come oggetto byte . Ad esempio, leggere da un file di immagine locale che si vuole analizzare.

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

Selezionare le funzionalità visive

L'API Analysis 4.0 consente di accedere a tutte le funzionalità di analisi delle immagini del servizio. Scegliere le operazioni da eseguire in base al proprio caso d'uso. Per una descrizione di ogni funzionalità, vedere la panoramica . L'esempio in questa sezione aggiunge tutte le funzionalità visive disponibili, ma per un utilizzo pratico è probabile che sia necessario meno.

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

Chiamare il metodo analyze_from_url con le opzioni

Il codice seguente chiama il metodo analyze_from_url sul client con le funzionalità selezionate in precedenza e opzioni aggiuntive, definite di seguito. Per analizzare da un buffer di immagini anziché da URL, chiamare invece il metodo analyze , con image_data=image_data come primo argomento.

# 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"
)

Selezionare proporzioni di ritaglio intelligente

Le proporzioni sono calcolate dividendo la larghezza del ritaglio di destinazione in base all'altezza. I valori supportati sono compresi tra 0,75 e 1,8 (inclusi). L'impostazione di questa proprietà è rilevante solo quando VisualFeatures.SMART_CROPS è stato selezionato come parte dell'elenco delle funzionalità visive. Se si seleziona VisualFeatures.SMART_CROPS ma non si specificano proporzioni, il servizio restituisce un suggerimento di ritaglio con proporzioni che rileva l'adattamento. In questo caso, le proporzioni sono comprese tra 0,5 e 2,0 (incluse).

Selezionare didascalia di genere neutrali

Se si estraggono didascalia o didascalia densi (usando VisualFeatures.CAPTION o VisualFeatures.DEN edizione Standard_CAPTIONS), è possibile richiedere didascalia indipendenti dal genere. Le didascalia neutrali di genere sono facoltative, con l'impostazione predefinita didascalia di genere. Ad esempio, in inglese, quando si seleziona il sesso neutro didascalia, termini come donna o uomo vengono sostituiti con la persona e ragazzo o ragazza vengono sostituiti con figlio.

Specificare le lingue

È possibile specificare la lingua dei dati restituiti. La lingua è facoltativa, con l'impostazione predefinita inglese. Per un elenco dei codici linguistici supportati e delle funzionalità visive supportate per ogni lingua, vedere Supporto della lingua.

Ottenere risultati dal servizio

Il codice seguente illustra come analizzare i risultati delle operazioni di analyze_from_url o di analisi .

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

Risoluzione dei problemi

Eccezioni

I analyze metodi generano un'eccezione HttpResponseError per una risposta di codice di stato HTTP non riuscita dal servizio. L'eccezione è il codice di status_code stato della risposta HTTP. L'eccezione error.message contiene un messaggio dettagliato che consente di diagnosticare il problema:

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

Ad esempio, quando si specifica una chiave di autenticazione errata:

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.

In alternativa, quando si specifica un URL di immagine che non esiste o non è accessibile:

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

Registrazione

Il client usa la libreria di registrazione Python standard. L'SDK registra i dettagli della richiesta e della risposta HTTP, che possono essere utili per la risoluzione dei problemi. Per accedere a stdout, aggiungere quanto segue:

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)

Per impostazione predefinita, i log scrivano i valori delle stringhe di query URL, i valori di alcune intestazioni di richiesta e risposta HTTP (incluse Ocp-Apim-Subscription-Key le quali contiene la chiave) e i payload di richiesta e risposta. Per creare log senza rollforward, impostare l'argomento logging_enable = True del metodo quando si crea ImageAnalysisCliento quando si chiama analyze sul client.

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

I log non elaborati vengono generati solo a livello logging.DEBUG di log. Assicurarsi di proteggere i log non elaborati per evitare di compromettere la sicurezza. Per altre informazioni, vedere Configurare la registrazione nelle librerie di Azure per Python

Prerequisiti

Questa guida presuppone che siano stati seguiti i passaggi nella pagina di avvio rapido. Ciò significa:

  • È stata creata una risorsa Visione artificiale e si è ottenuta una chiave e un URL dell'endpoint.
  • Il pacchetto SDK appropriato è installato ed è disponibile un'applicazione di avvio rapido in esecuzione. È possibile modificare questa applicazione di avvio rapido in base a esempi di codice qui.

Creare ed autenticare il client

Per eseguire l'autenticazione con il servizio Analisi immagini, è necessario un URL di Visione artificiale chiave ed endpoint. Questa guida presuppone che siano state definite le variabili VISION_KEY di ambiente e VISION_ENDPOINT con la chiave e l'endpoint.

Suggerimento

Non includere la chiave direttamente nel codice e non pubblicarla pubblicamente. Per altre opzioni di autenticazione come Azure Key Vault, vedere l'articolo sicurezza dei servizi di intelligenza artificiale di Azure.

Per iniziare, creare un oggetto ImageAnalysisClient . Ad esempio:

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();

Selezionare l'immagine da analizzare

È possibile selezionare un'immagine fornendo un URL di immagine accessibile pubblicamente o leggendo i dati dell'immagine nel buffer di input dell'SDK. Vedere Requisiti delle immagini per i formati di immagine supportati.

Image URL

Creare una imageUrl stringa per contenere l'URL accessibile pubblicamente dell'immagine da analizzare.

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

Buffer delle immagini

In alternativa, è possibile passare l'immagine come buffer di memoria usando un oggetto BinaryData . Ad esempio, leggere da un file di immagine locale che si vuole analizzare.

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

Selezionare le funzionalità visive

L'API Analysis 4.0 consente di accedere a tutte le funzionalità di analisi delle immagini del servizio. Scegliere le operazioni da eseguire in base al proprio caso d'uso. Per una descrizione di ogni funzionalità, vedere la panoramica . L'esempio in questa sezione aggiunge tutte le funzionalità visive disponibili, ma per un utilizzo pratico è probabile che sia necessario meno.

Importante

Le funzionalità visive Captions e DenseCaptions sono supportate solo nelle aree di Azure seguenti: Stati Uniti orientali, Francia centrale, Corea centrale, Europa settentrionale, Asia sud-orientale, Europa occidentale, Stati Uniti occidentali.

// 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);

Selezionare le opzioni di analisi

Usare un oggetto ImageAnalysisOptions per specificare varie opzioni per la chiamata API Analyze.

  • Lingua: è possibile specificare la lingua dei dati restituiti. La lingua è facoltativa, con l'impostazione predefinita inglese. Per un elenco dei codici linguistici supportati e delle funzionalità visive supportate per ogni lingua, vedere Supporto della lingua.
  • Didascalia indipendenti dal genere: se si estraggono didascalia o didascalia densi (usando VisualFeatures.CAPTION o VisualFeatures.DEN edizione Standard_CAPTIONS), è possibile richiedere didascalia indipendenti dal genere. Le didascalia neutrali di genere sono facoltative, con l'impostazione predefinita didascalia di genere. Ad esempio, in inglese, quando si seleziona il sesso neutro didascalia, termini come donna o uomo vengono sostituiti con la persona e ragazzo o ragazza vengono sostituiti con figlio.
  • Proporzioni ritaglio: le proporzioni sono calcolate dividendo la larghezza del ritaglio di destinazione in base all'altezza. I valori supportati sono compresi tra 0,75 e 1,8 (inclusi). L'impostazione di questa proprietà è rilevante solo quando VisualFeatures.SMART_CROPS è stato selezionato come parte dell'elenco delle funzionalità visive. Se si seleziona VisualFeatures.SMART_CROPS ma non si specificano proporzioni, il servizio restituisce un suggerimento di ritaglio con proporzioni che rileva l'adattamento. In questo caso, le proporzioni sono comprese tra 0,5 e 2,0 (incluse).
// 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));

Chiamare il metodo analyzeFromUrl

Questa sezione illustra come effettuare una chiamata di analisi al servizio.

Chiamare il metodo analyzeFromUrl nell'oggetto ImageAnalysisClient , come illustrato di seguito. La chiamata è sincrona e bloccherà fino a quando il servizio non restituisce i risultati o si è verificato un errore. In alternativa, è possibile usare un oggetto ImageAnalysisAsyncClient e chiamarne il metodo analyzeFromUrl che non blocca.

Per analizzare da un buffer di immagini anziché da URL, chiamare invece il metodo analyze e passare imageData come primo argomento.

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());
}

Ottenere risultati dal servizio

Il codice seguente illustra come analizzare i risultati delle operazioni analyzeFromUrl e analizzarli .

// 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());
}

Risoluzione dei problemi

Eccezioni

I analyze metodi generano HttpResponseException quando il servizio risponde con un codice di stato HTTP non riuscito. L'eccezione contiene il codice di getResponse().getStatusCode() stato della risposta HTTP. L'eccezione getMessage() contiene un messaggio dettagliato che consente di diagnosticare il problema:

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());
}

Ad esempio, quando si specifica una chiave di autenticazione errata:

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

In alternativa, quando si specifica un'immagine in un formato non riconosciuto:

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

Abilitare la registrazione di richieste/risposte HTTP

La revisione della richiesta HTTP inviata o della risposta ricevuta tramite rete al servizio Analisi immagini può essere utile per la risoluzione dei problemi. La libreria client di Analisi immagini supporta un framework di registrazione della console predefinito a scopo di debug temporaneo. Supporta anche la registrazione più avanzata usando l'interfaccia SLF4J . Per informazioni dettagliate, vedere Usare la registrazione in Azure SDK per Java.

Le sezioni seguenti illustrano come abilitare la registrazione della console usando il framework predefinito.

Impostando le variabili di ambiente

È possibile abilitare la registrazione della console di richiesta e risposta HTTP per l'intera applicazione impostando le due variabili di ambiente seguenti. Questa modifica influisce su ogni client di Azure che supporta la registrazione di richieste e risposte HTTP.

  • Impostare la variabile AZURE_LOG_LEVEL di ambiente su debug
  • Impostare la variabile AZURE_HTTP_LOG_DETAIL_LEVEL di ambiente su uno dei valori seguenti:
Valore Livello di registrazione
none La registrazione delle richieste/risposte HTTP è disabilitata
basic Registra solo GLI URL, i metodi HTTP e il tempo necessario per completare la richiesta.
headers Registra tutti gli elementi in BASIC, oltre a tutte le intestazioni di richiesta e risposta.
body Registra tutti gli elementi in BASIC, oltre a tutto il corpo della richiesta e della risposta.
body_and_headers Registra tutti gli elementi in HEADERS e BODY.

Impostando httpLogOptions

Per abilitare la registrazione della console di richiesta e risposta HTTP per un singolo client

  • Impostare la variabile AZURE_LOG_LEVEL di ambiente su debug
  • Aggiungere una chiamata a httpLogOptions durante la compilazione di ImageAnalysisClient:
ImageAnalysisClient client = new ImageAnalysisClientBuilder()
    .endpoint(endpoint)
    .credential(new KeyCredential(key))
    .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
    .buildClient();

L'enumerazione HttpLogDetailLevel definisce i livelli di registrazione supportati.

Per impostazione predefinita, durante la registrazione, vengono elaborati determinati valori di intestazione HTTP e parametri di query. È possibile eseguire l'override di questa impostazione predefinita specificando quali intestazioni e parametri di query sono sicuri per registrare:

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();

Ad esempio, per ottenere un log completo non redatto della richiesta HTTP, applicare quanto segue:

    .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"))

Aggiungere altro a quanto sopra per ottenere una risposta HTTP non redacted. Quando si condivide un log non modificato, assicurarsi che non contenga segreti come la chiave di sottoscrizione.

Prerequisiti

Questa guida presuppone che siano stati seguiti i passaggi indicati nella guida introduttiva. Ciò significa:

  • È stata creata una risorsa Visione artificiale e si è ottenuta una chiave e un URL dell'endpoint.
  • Il pacchetto SDK appropriato è installato ed è disponibile un'applicazione di avvio rapido in esecuzione. È possibile modificare questa applicazione di avvio rapido in base agli esempi di codice qui.

Creare ed autenticare il client

Per eseguire l'autenticazione con il servizio Analisi immagini, è necessario un URL di endpoint e una chiave Visione artificiale. Questa guida presuppone che siano state definite le variabili VISION_KEY di ambiente e VISION_ENDPOINT con la chiave e l'endpoint.

Suggerimento

Non includere la chiave direttamente nel codice e non pubblicarla pubblicamente. Per altre opzioni di autenticazione come Azure Key Vault, vedere l'articolo sicurezza dei servizi di intelligenza artificiale di Azure.

Per iniziare, creare un oggetto ImageAnalysisClient . Ad esempio:

// 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);

Selezionare l'immagine da analizzare

È possibile selezionare un'immagine fornendo un URL di immagine accessibile pubblicamente o leggendo i dati dell'immagine nel buffer di input dell'SDK. Vedere Requisiti delle immagini per i formati di immagine supportati.

Image URL

È possibile usare l'URL dell'immagine di esempio seguente.

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

Buffer delle immagini

In alternativa, è possibile passare l'immagine come matrice di dati. Ad esempio, leggere da un file di immagine locale che si vuole analizzare.

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

Selezionare le funzionalità visive

L'API Analysis 4.0 consente di accedere a tutte le funzionalità di analisi delle immagini del servizio. Scegliere le operazioni da eseguire in base al proprio caso d'uso. Per una descrizione di ogni funzionalità, vedere la panoramica . L'esempio in questa sezione aggiunge tutte le funzionalità visive disponibili, ma per un utilizzo pratico è probabile che sia necessario meno.

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

Chiamare l'API Analizza con le opzioni

Il codice seguente chiama l'API Analizza con le funzionalità selezionate in precedenza e opzioni aggiuntive, definite di seguito. Per analizzare da un buffer di immagini anziché da URL, sostituire imageURL nella chiamata al metodo con 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'
});

Selezionare proporzioni di ritaglio intelligente

Le proporzioni sono calcolate dividendo la larghezza del ritaglio di destinazione in base all'altezza. I valori supportati sono compresi tra 0,75 e 1,8 (inclusi). L'impostazione di questa proprietà è rilevante solo quando VisualFeatures.SmartCrops è stato selezionato come parte dell'elenco delle funzionalità visive. Se si seleziona VisualFeatures.SmartCrops, ma non si specificano proporzioni, il servizio restituisce un suggerimento di ritaglio con proporzioni che rileva l'adattamento. In questo caso, le proporzioni sono comprese tra 0,5 e 2,0 (incluse).

Selezionare didascalia di genere neutrali

Se si estraggono didascalia o didascalia densi (usando VisualFeatures.Caption o VisualFeatures.DenseCaptions), è possibile richiedere didascalia indipendenti dal genere. Le didascalia neutrali di genere sono facoltative, con l'impostazione predefinita didascalia di genere. Ad esempio, in inglese, quando si seleziona il sesso neutro didascalia, termini come donna o uomo vengono sostituiti con la persona e ragazzo o ragazza vengono sostituiti con figlio.

Specificare le lingue

È possibile specificare la lingua dei dati restituiti. La lingua è facoltativa, con l'impostazione predefinita inglese. Per un elenco dei codici linguistici supportati e delle funzionalità visive supportate per ogni lingua, vedere Supporto della lingua.

Ottenere risultati dal servizio

Il codice seguente illustra come analizzare i risultati delle varie operazioni di analisi .

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)}`));
}

Risoluzione dei problemi

Registrazione

L'abilitazione della registrazione consente di individuare informazioni utili sugli errori. Per visualizzare un log di richieste e risposte HTTP, impostare la variabile di ambiente AZURE_LOG_LEVEL su info. In alternativa, la registrazione può essere abilitata in fase di esecuzione chiamando setLogLevel in @azure/logger:

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

setLogLevel("info");

Per istruzioni più dettagliate su come abilitare i log, è possibile esaminare la documentazione del pacchetto @azure/logger.

Prerequisiti

Questa guida presuppone che siano stati eseguiti correttamente i passaggi indicati nella pagina di avvio rapido. Ciò significa:

  • È stata creata una risorsa Visione artificiale e si è ottenuta una chiave e un URL dell'endpoint.
  • È stata effettuata una curl.exe chiamata al servizio (o è stato usato uno strumento alternativo). Modificare la curl.exe chiamata in base agli esempi riportati qui.

Autenticazione per il servizio

Per eseguire l'autenticazione con il servizio Analisi immagini, è necessario un URL di endpoint e una chiave Visione artificiale.

Suggerimento

Non includere la chiave direttamente nel codice e non pubblicarla pubblicamente. Per altre opzioni di autenticazione come Azure Key Vault, vedere l'articolo sicurezza dei servizi di intelligenza artificiale di Azure.

L'esempio sdk presuppone che siano state definite le variabili VISION_KEY di ambiente e VISION_ENDPOINT con la chiave e l'endpoint.

L'autenticazione viene eseguita aggiungendo l'intestazione della richiesta HTTP Ocp-Apim-Subscription-Key e impostandola sulla chiave di visione. La chiamata viene effettuata all'URL <endpoint>/computervision/imageanalysis:analyze?api-version=2024-02-01, dove <endpoint> è l'URL univoco dell'endpoint di Visione artificiale. È possibile aggiungere stringhe di query in base alle opzioni di analisi.

Selezionare l'immagine da analizzare

Il codice in questa guida usa immagini remote a cui fa riferimento l'URL. È possibile provare immagini diverse autonomamente per visualizzare la funzionalità completa delle funzionalità di analisi delle immagini.

Quando si analizza un'immagine remota, si specifica l'URL dell'immagine formattando il corpo della richiesta come segue: {"url":"https://learn.microsoft.com/azure/cognitive-services/computer-vision/images/windows-kitchen.jpg"}. Il tipo di contenuto deve essere application/json.

Per analizzare un'immagine locale, inserire i dati dell'immagine binaria nel corpo della richiesta HTTP. Il tipo di contenuto deve essere application/octet-stream o multipart/form-data.

Selezionare le opzioni di analisi

Selezionare le funzionalità visive quando si usa il modello standard

L'API Analysis 4.0 consente di accedere a tutte le funzionalità di analisi delle immagini del servizio. Scegliere le operazioni da eseguire in base al proprio caso d'uso. Per una descrizione di ogni funzionalità, vedere la panoramica . L'esempio in questa sezione aggiunge tutte le funzionalità visive disponibili, ma per un utilizzo pratico è probabile che sia necessario meno.

Le funzionalità visive 'Captions' e 'DenseCaptions' sono supportate solo nelle aree di Azure seguenti: Stati Uniti orientali, Francia centrale, Corea centrale, Europa settentrionale, Asia sud-orientale, Europa occidentale, Stati Uniti occidentali.

Nota

L'API REST usa i termini Ritagli intelligenti e proporzioni delle colture intelligenti. L'SDK usa i termini Ritaglia suggerimenti e Proporzioni ritaglio. Entrambi fanno riferimento alla stessa operazione del servizio. Analogamente, l'API REST usa il termine Read per rilevare il testo nell'immagine usando il riconoscimento ottico dei caratteri (OCR), mentre l'SDK usa il termine Text per la stessa operazione.

È possibile specificare le funzionalità da usare impostando i parametri di query URL dell'API Analysis 4.0. Un parametro può avere più valori, separati da virgole.

Parametro URL Valore Descrizione
features read Legge il testo visibile nell'immagine e lo restituisce come dati JSON strutturati.
features caption Descrive il contenuto dell'immagine con una frase completa nelle lingue supportate.
features denseCaptions Genera didascalia dettagliate per un massimo di 10 aree di immagine prominenti.
features smartCrops Trova le coordinate del rettangolo che ritaglierebbero l'immagine in proporzioni desiderate mantenendo l'area di interesse.
features objects Rileva vari oggetti all'interno di un'immagine, inclusa la posizione approssimativa. L'argomento Objects è disponibile solo in inglese.
features tags Contrassegna l'immagine con un elenco dettagliato di parole correlate al contenuto dell'immagine.
features people Rileva le persone visualizzate nelle immagini, incluse le posizioni approssimative.

Un URL popolato potrebbe essere simile al seguente:

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

Impostare il nome del modello quando si usa un modello personalizzato

È anche possibile eseguire l'analisi delle immagini con un modello con training personalizzato. Per creare ed eseguire il training di un modello, vedere Creare un modello di analisi delle immagini personalizzato. Dopo aver eseguito il training del modello, è sufficiente specificare il nome del modello. Non è necessario specificare le funzionalità visive se si usa un modello personalizzato.

Per usare un modello personalizzato, non usare il parametro di query delle funzionalità. Impostare invece il model-name parametro sul nome del modello, come illustrato di seguito. Sostituire MyCustomModelName con il nome del modello personalizzato.

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

Specificare le lingue

È possibile specificare la lingua dei dati restituiti. La lingua è facoltativa, con l'impostazione predefinita inglese. Per un elenco dei codici linguistici supportati e delle funzionalità visive supportate per ogni lingua, vedere Supporto della lingua.

L'opzione Language si applica solo quando si usa il modello standard.

Il parametro di query URL seguente specifica il linguaggio. Il valore predefinito è en.

Parametro URL Valore Descrizione
language en italiano
language es Spagnolo
language ja Giapponese
language pt Portoghese
language zh Cinese semplificato

Un URL popolato potrebbe essere simile al seguente:

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

Selezionare didascalia di genere neutrali

Se si estraggono didascalia o didascalia densi, è possibile richiedere didascalia neutrali di genere. Le didascalia neutrali di genere sono facoltative, con l'impostazione predefinita didascalia di genere. Ad esempio, in inglese, quando si seleziona il sesso neutro didascalia, termini come donna o uomo vengono sostituiti con la persona e ragazzo o ragazza vengono sostituiti con figlio.

L'opzione gender neutral didascalia si applica solo quando si usa il modello standard.

Aggiungere la stringa gender-neutral-caption di query facoltativa con valori true o false (impostazione predefinita).

Un URL popolato potrebbe essere simile al seguente:

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

Selezionare proporzioni di ritaglio intelligente

Le proporzioni sono calcolate dividendo la larghezza del ritaglio di destinazione in base all'altezza. I valori supportati sono compresi tra 0,75 e 1,8 (inclusi). L'impostazione di questa proprietà è rilevante solo quando VisualFeatures.SmartCrops è stato selezionato come parte dell'elenco delle funzionalità visive. Se si seleziona VisualFeatures.SmartCrops, ma non si specificano proporzioni, il servizio restituisce un suggerimento di ritaglio con proporzioni che rileva l'adattamento. In questo caso, le proporzioni sono comprese tra 0,5 e 2,0 (incluse).

Le razioni degli aspetti di ritaglio intelligente si applicano solo quando si usa il modello standard.

Aggiungere la stringa smartcrops-aspect-ratiosdi query facoltativa , con una o più proporzioni separate da una virgola.

Un URL popolato potrebbe essere simile al seguente:

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

Ottenere risultati dal servizio

Ottenere risultati usando il modello standard

Questa sezione illustra come effettuare una chiamata di analisi al servizio usando il modello standard e ottenere i risultati.

Il servizio restituisce una 200 risposta HTTP e il corpo contiene i dati restituiti sotto forma di stringa JSON. Il testo seguente è un esempio di risposta 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
        }
      ]
    }
  }

Codici di errore

In caso di errore, la risposta del servizio Analisi immagini contiene un payload JSON che include un codice di errore e un messaggio di errore. Può anche includere altri dettagli sotto forma di codice di errore interno e messaggio. Ad esempio:

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

Di seguito è riportato un elenco di errori comuni e delle relative cause. Gli elementi elenco vengono presentati nel formato seguente:

  • Codice di risposta HTTP
    • Codice di errore e messaggio nella risposta JSON
      • [Facoltativo] Codice di errore interno e messaggio nella risposta JSON

Elenco di errori comuni:

  • 400 Bad Request
    • InvalidRequest - Image URL is badly formatted or not accessible. Assicurarsi che l'URL dell'immagine sia valido e accessibile pubblicamente.
    • InvalidRequest - The image size is not allowed to be zero or larger than 20971520 bytes. Ridurre le dimensioni dell'immagine comprimendola e/o ridimensionando e inviare di nuovo la richiesta.
    • InvalidRequest - The feature 'Caption' is not supported in this region. La funzionalità è supportata solo in aree di Azure specifiche. Per l'elenco delle aree di Azure supportate, vedere Prerequisiti di avvio rapido.
    • InvalidRequest - The provided image content type ... is not supported. L'intestazione HTTP Content-Type nella richiesta non è un tipo consentito:
      • Per un URL di immagine, Content-Type deve essere application/json
      • Per i dati di un'immagine binaria, Content-Type deve essere application/octet-stream o 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. Vedere la sezione Requisiti immagine per i formati di immagine supportati.
    • InvalidRequest - Analyze query is invalid
      • NotSupportedVisualFeature - Specified feature type is not valid. Assicurarsi che la stringa di query delle funzionalità abbia un valore valido.
      • NotSupportedLanguage - The input language is not supported. Assicurarsi che la stringa di query del linguaggio abbia un valore valido per la funzionalità visiva selezionata, in base alla tabella seguente.
      • 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. Il servizio non è riuscito a trovare il modello personalizzato in base al nome fornito dalla stringa di model-name query.

Passaggi successivi