De analyse-API voor afbeeldingen 4.0 aanroepen

In dit artikel wordt beschreven hoe u de Afbeeldingsanalyse 4.0-API aanroept om informatie te retourneren over de visuele functies van een afbeelding. U ziet ook hoe u de geretourneerde informatie kunt parseren.

Vereisten

In deze handleiding wordt ervan uitgegaan dat u de stappen hebt gevolgd die worden vermeld op de snelstartpagina . Dit houdt in:

  • U hebt een Computer Vision-resource gemaakt en een sleutel- en eindpunt-URL verkregen.
  • U hebt het juiste SDK-pakket geïnstalleerd en u hebt een actieve quickstart-toepassing . U kunt deze quickstart-toepassing hier wijzigen op basis van codevoorbeelden.

De client maken en verifiëren

Als u zich wilt verifiëren bij de Image Analysis-service, hebt u een Computer Vision-sleutel en eindpunt-URL nodig. In deze handleiding wordt ervan uitgegaan dat u de omgevingsvariabelen VISION_KEY en VISION_ENDPOINT met uw sleutel en eindpunt hebt gedefinieerd.

Tip

Neem de sleutel niet rechtstreeks op in uw code en plaats deze nooit openbaar. Zie het beveiligingsartikel over Azure AI-services voor meer verificatieopties, zoals Azure Key Vault.

Begin met het maken van een ImageAnalysisClient-object . Voorbeeld:

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

Selecteer de afbeelding die u wilt analyseren

U kunt een afbeelding selecteren door een openbaar toegankelijke afbeeldings-URL op te geven of door binaire gegevens door te geven aan de SDK. Zie de vereisten voor installatiekopieën voor ondersteunde afbeeldingsindelingen.

Afbeeldings-URL

Maak een URI-object voor de afbeelding die u wilt analyseren.

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

Afbeeldingsbuffer

U kunt de afbeeldingsgegevens ook doorgeven aan de SDK via een BinaryData-object . Lees bijvoorbeeld uit een lokaal afbeeldingsbestand dat u wilt analyseren.

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

Visuele functies selecteren

De Analysis 4.0-API biedt u toegang tot alle functies van de afbeeldingsanalyse van de service. Kies welke bewerkingen u wilt uitvoeren op basis van uw eigen use-case. Zie het overzicht voor een beschrijving van elke functie. In het voorbeeld in deze sectie worden alle beschikbare visuele functies toegevoegd, maar voor praktisch gebruik hebt u waarschijnlijk minder nodig.

Belangrijk

De visuele functies Captions en DenseCaptions worden alleen ondersteund in de volgende Azure-regio's: VS - oost, Frankrijk - centraal, Korea - centraal, Europa - noord, Azië - zuidoost, Europa - west, VS - west.

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

Analyseopties selecteren

Gebruik een ImageAnalysisOptions-object om verschillende opties op te geven voor de analyse-API-aanroep.

  • Taal: U kunt de taal van de geretourneerde gegevens opgeven. De taal is optioneel, waarbij de standaardinstelling Engels is. Zie Taalondersteuning voor een lijst met ondersteunde taalcodes en welke visuele functies voor elke taal worden ondersteund.
  • Genderneutrale onderschrift s: als u onderschrift s of dichte onderschrift s extraheert (met behulp van VisualFeatures.Caption of VisualFeatures.DenseCaptions), kunt u vragen om genderneutrale onderschrift s. Genderneutrale onderschrift s zijn optioneel, waarbij het standaard geslacht onderschrift s wordt. Als u bijvoorbeeld in het Engels geslachtneutrale onderschrift s selecteert, worden termen zoals vrouw of man vervangen door persoon en worden jongen of meisje vervangen door kind.
  • Hoogte-breedteverhouding bijsnijden: een hoogte-breedteverhouding wordt berekend door de breedte van de doelsnijding te delen door de hoogte. Ondersteunde waarden zijn van 0,75 tot 1,8 (inclusief). Het instellen van deze eigenschap is alleen relevant wanneer VisualFeatures.SmartCrops is geselecteerd als onderdeel van de lijst met visuele functies. Als u VisualFeatures.SmartCrops selecteert, maar geen hoogte-breedteverhoudingen opgeeft, retourneert de service één bijsnijdsuggestie met een hoogte-breedteverhouding die past. In dit geval ligt de hoogte-breedteverhouding tussen 0,5 en 2,0 (inclusief).
ImageAnalysisOptions options = new ImageAnalysisOptions { 
    GenderNeutralCaption = true,
    Language = "en",
    SmartCropsAspectRatios = new float[] { 0.9F, 1.33F }};

De Analyse-API aanroepen

In deze sectie wordt beschreven hoe u een analyseaanroep naar de service maakt.

Roep de analysemethode aan op het object ImageAnalysisClient , zoals hier wordt weergegeven. De aanroep is synchroon en wordt geblokkeerd totdat de service de resultaten retourneert of er een fout is opgetreden. U kunt ook de niet-blokkerende AnalyzeAsync-methode aanroepen.

Gebruik de invoerobjecten die in de bovenstaande secties zijn gemaakt. Als u wilt analyseren vanuit een afbeeldingsbuffer in plaats van een URL, vervangt imageURL u de methodeaanroep door de imageData variabele.

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

Resultaten ophalen van de service

De volgende code laat zien hoe u de resultaten van de verschillende analysebewerkingen kunt parseren.

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

Probleemoplossing

Afhandeling van uitzonderingen

Wanneer u interactie hebt met afbeeldingsanalyse met behulp van de .NET SDK, resulteert elke reactie van de service die geen (geslaagde) statuscode heeft 200 , tot een uitzondering die wordt gegenereerd. Als u bijvoorbeeld probeert een afbeelding te analyseren die niet toegankelijk is vanwege een verbroken URL, wordt een 400 status geretourneerd, waarmee een ongeldige aanvraag wordt aangegeven en er een bijbehorende uitzondering wordt gegenereerd.

In het volgende codefragment worden fouten correct verwerkt door de uitzondering te ondervangen en aanvullende informatie over de fout weer te geven.

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

Hier vindt u meer informatie over het inschakelen van SDK-logboekregistratie.

Vereisten

In deze handleiding wordt ervan uitgegaan dat u de stappen in de quickstart hebt gevolgd. Dit houdt in:

  • U hebt een Computer Vision-resource gemaakt en een sleutel- en eindpunt-URL verkregen.
  • U hebt het juiste SDK-pakket geïnstalleerd en u hebt een actieve quickstart-toepassing . U kunt deze quickstart-toepassing wijzigen op basis van de codevoorbeelden hier.

De client maken en verifiëren

Als u zich wilt verifiëren bij de Image Analysis-service, hebt u een Computer Vision-sleutel en eindpunt-URL nodig. In deze handleiding wordt ervan uitgegaan dat u de omgevingsvariabelen VISION_KEY en VISION_ENDPOINT met uw sleutel en eindpunt hebt gedefinieerd.

Tip

Neem de sleutel niet rechtstreeks op in uw code en plaats deze nooit openbaar. Zie het beveiligingsartikel over Azure AI-services voor meer verificatieopties, zoals Azure Key Vault.

Begin met het maken van een ImageAnalysisClient-object met behulp van een van de constructors. Voorbeeld:

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

Selecteer de afbeelding die u wilt analyseren

U kunt een afbeelding selecteren door een openbaar toegankelijke afbeeldings-URL op te geven of door afbeeldingsgegevens te lezen in de invoerbuffer van de SDK. Zie de vereisten voor installatiekopieën voor ondersteunde afbeeldingsindelingen.

Afbeeldings-URL

U kunt de volgende voorbeeldafbeeldings-URL gebruiken.

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

Afbeeldingsbuffer

U kunt de afbeelding ook doorgeven als bytes-object . Lees bijvoorbeeld uit een lokaal afbeeldingsbestand dat u wilt analyseren.

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

Visuele functies selecteren

De Analysis 4.0-API biedt u toegang tot alle functies van de afbeeldingsanalyse van de service. Kies welke bewerkingen u wilt uitvoeren op basis van uw eigen use-case. Zie het overzicht voor een beschrijving van elke functie. In het voorbeeld in deze sectie worden alle beschikbare visuele functies toegevoegd, maar voor praktisch gebruik hebt u waarschijnlijk minder nodig.

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

De methode analyze_from_url aanroepen met opties

Met de volgende code wordt de analyze_from_url methode op de client aangeroepen met de functies die u hierboven hebt geselecteerd en aanvullende opties, die hieronder zijn gedefinieerd. Als u wilt analyseren vanuit een afbeeldingsbuffer in plaats van een URL, roept u in plaats daarvan de analysemethode aan, met image_data=image_data als eerste argument.

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

Hoogte-breedteverhoudingen voor slim bijsnijden selecteren

Een hoogte-breedteverhouding wordt berekend door de breedte van de doelsnijding te delen door de hoogte. Ondersteunde waarden zijn van 0,75 tot 1,8 (inclusief). Het instellen van deze eigenschap is alleen relevant wanneer VisualFeatures.SMART_CROPS is geselecteerd als onderdeel van de lijst met visuele functies. Als u VisualFeatures.SMART_CROPS selecteert, maar geen hoogte-breedteverhoudingen opgeeft, retourneert de service één bijsnijdsuggesties met een hoogte-breedteverhouding die past. In dit geval ligt de hoogte-breedteverhouding tussen 0,5 en 2,0 (inclusief).

Geslachtneutrale onderschrift s selecteren

Als u onderschrift s of dichte onderschrift s extraheert (met behulp van VisualFeatures.CAPTION of VisualFeatures.DENSE_CAPTIONS), kunt u vragen om genderneutrale onderschrift s. Genderneutrale onderschrift s zijn optioneel, waarbij het standaard geslacht onderschrift s wordt. Als u bijvoorbeeld in het Engels geslachtneutrale onderschrift s selecteert, worden termen zoals vrouw of man vervangen door persoon en worden jongen of meisje vervangen door kind.

Talen opgeven

U kunt de taal van de geretourneerde gegevens opgeven. De taal is optioneel, waarbij de standaardinstelling Engels is. Zie Taalondersteuning voor een lijst met ondersteunde taalcodes en welke visuele functies voor elke taal worden ondersteund.

Resultaten ophalen van de service

De volgende code laat zien hoe u de resultaten van de analyze_from_url of analysebewerkingen kunt parseren .

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

Probleemoplossing

Uitzonderingen

Met de analyze methoden wordt een HttpResponseError-uitzondering gegenereerd voor een http-statuscodeantwoord dat niet is geslaagd vanuit de service. De uitzondering status_code is de HTTP-antwoordstatuscode. De uitzondering error.message bevat een gedetailleerd bericht waarmee u het probleem kunt vaststellen:

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

Als u bijvoorbeeld een verkeerde verificatiesleutel opgeeft:

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.

Of wanneer u een afbeeldings-URL opgeeft die niet bestaat of niet toegankelijk is:

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

Logboekregistratie

De client maakt gebruik van de standaardbibliotheek voor Python-logboekregistratie. De SDK registreert HTTP-aanvraag- en antwoordgegevens, wat handig kan zijn bij het oplossen van problemen. Als u zich wilt aanmelden bij stdout, voegt u het volgende toe:

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)

Standaard worden in logboeken de waarden van URL-queryreeksen, de waarden van sommige HTTP-aanvraag- en antwoordheaders (inclusief Ocp-Apim-Subscription-Key de sleutel) en de nettoladingen voor aanvragen en antwoorden opgeslagen. Als u logboeken wilt maken zonder bewerkingen, stelt u het methodeargument logging_enable = True in wanneer u maakt ImageAnalysisClientof wanneer u de client aanroept analyze .

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

Geen bewerkte logboeken worden alleen gegenereerd voor logboekniveau logging.DEBUG . Zorg ervoor dat u geen geredigeerde logboeken beveiligt om beveiliging te voorkomen. Zie Logboekregistratie configureren in de Azure-bibliotheken voor Python voor meer informatie

Vereisten

In deze handleiding wordt ervan uitgegaan dat u de stappen op de quickstart-pagina hebt gevolgd. Dit houdt in:

  • U hebt een Computer Vision-resource gemaakt en een sleutel- en eindpunt-URL verkregen.
  • U hebt het juiste SDK-pakket geïnstalleerd en u hebt een actieve quickstart-toepassing . U kunt deze quickstart-toepassing hier wijzigen op basis van codevoorbeelden.

De client maken en verifiëren

Voor verificatie met de Image Analysis-service hebt u een Computer Vision-sleutel en eindpunt-URL nodig. In deze handleiding wordt ervan uitgegaan dat u de omgevingsvariabelen VISION_KEY en VISION_ENDPOINT met uw sleutel en eindpunt hebt gedefinieerd.

Tip

Neem de sleutel niet rechtstreeks op in uw code en plaats deze nooit openbaar. Zie het beveiligingsartikel over Azure AI-services voor meer verificatieopties, zoals Azure Key Vault.

Begin met het maken van een ImageAnalysisClient-object . Voorbeeld:

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

Selecteer de afbeelding die u wilt analyseren

U kunt een afbeelding selecteren door een openbaar toegankelijke afbeeldings-URL op te geven of door afbeeldingsgegevens te lezen in de invoerbuffer van de SDK. Zie de vereisten voor installatiekopieën voor ondersteunde afbeeldingsindelingen.

Afbeeldings-URL

Maak een imageUrl tekenreeks voor het opslaan van de openbaar toegankelijke URL van de afbeelding die u wilt analyseren.

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

Afbeeldingsbuffer

U kunt de afbeelding ook doorgeven als geheugenbuffer met behulp van een BinaryData-object . Lees bijvoorbeeld uit een lokaal afbeeldingsbestand dat u wilt analyseren.

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

Visuele functies selecteren

De Analysis 4.0-API biedt u toegang tot alle functies van de afbeeldingsanalyse van de service. Kies welke bewerkingen u wilt uitvoeren op basis van uw eigen use-case. Zie het overzicht voor een beschrijving van elke functie. In het voorbeeld in deze sectie worden alle beschikbare visuele functies toegevoegd, maar voor praktisch gebruik hebt u waarschijnlijk minder nodig.

Belangrijk

De visual bevat bijschriften en DenseCaptions die alleen worden ondersteund in de volgende Azure-regio's: VS - oost, Frankrijk - centraal, Korea - centraal, Europa - noord, Azië - zuidoost, Europa - west, VS - west.

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

Analyseopties selecteren

Gebruik een ImageAnalysisOptions-object om verschillende opties op te geven voor de analyse-API-aanroep.

  • Taal: U kunt de taal van de geretourneerde gegevens opgeven. De taal is optioneel, waarbij de standaardinstelling Engels is. Zie Taalondersteuning voor een lijst met ondersteunde taalcodes en welke visuele functies voor elke taal worden ondersteund.
  • Genderneutrale onderschrift s: als u onderschrift s of dichte onderschrift s (met behulp van VisualFeatures.CAPTION of VisualFeatures.DENSE_CAPTIONS) extraheert, kunt u vragen om genderneutrale onderschrift s. Genderneutrale onderschrift s zijn optioneel, waarbij het standaard geslacht onderschrift s wordt. Als u bijvoorbeeld in het Engels geslachtneutrale onderschrift s selecteert, worden termen zoals vrouw of man vervangen door persoon en worden jongen of meisje vervangen door kind.
  • Hoogte-breedteverhouding bijsnijden: een hoogte-breedteverhouding wordt berekend door de breedte van de doelsnijding te delen door de hoogte. Ondersteunde waarden zijn van 0,75 tot 1,8 (inclusief). Het instellen van deze eigenschap is alleen relevant wanneer VisualFeatures.SMART_CROPS is geselecteerd als onderdeel van de lijst met visuele functies. Als u VisualFeatures.SMART_CROPS selecteert, maar geen hoogte-breedteverhoudingen opgeeft, retourneert de service één bijsnijdsuggesties met een hoogte-breedteverhouding die past. In dit geval ligt de hoogte-breedteverhouding tussen 0,5 en 2,0 (inclusief).
// 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));

De methode analyzeFromUrl aanroepen

In deze sectie wordt beschreven hoe u een analyseaanroep naar de service maakt.

Roep de methode analyzeFromUrl aan op het object ImageAnalysisClient , zoals hier wordt weergegeven. De aanroep is synchroon en wordt geblokkeerd totdat de service de resultaten retourneert of er een fout is opgetreden. U kunt ook een ImageAnalysisAsyncClient-object gebruiken en de analyzeFromUrl-methode aanroepen die niet wordt geblokkeerd.

Als u wilt analyseren vanuit een afbeeldingsbuffer in plaats van een URL, roept u in plaats daarvan de analysemethode aan en geeft u het imageData als eerste argument door.

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

Resultaten ophalen van de service

De volgende code laat zien hoe u de resultaten van de analyzeFromUrl kunt parseren en bewerkingen analyseert .

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

Probleemoplossing

Uitzonderingen

De analyze methoden genereren HttpResponseException wanneer de service reageert met een HTTP-statuscode die niet is geslaagd. De uitzondering getResponse().getStatusCode() bevat de HTTP-antwoordstatuscode. De uitzondering getMessage() bevat een gedetailleerd bericht waarmee u het probleem kunt vaststellen:

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

Als u bijvoorbeeld een verkeerde verificatiesleutel opgeeft:

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

Of wanneer u een afbeelding opgeeft in een indeling die niet wordt herkend:

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

Logboekregistratie van HTTP-aanvragen/-antwoorden inschakelen

Het kan handig zijn om problemen op te lossen wanneer u de VERZONDen of reactie van de HTTP-aanvraag controleert die via de kabel naar de Image Analysis-service is ontvangen. De image analysis-clientbibliotheek ondersteunt een ingebouwd framework voor consolelogboekregistratie voor tijdelijke foutopsporing. Het biedt ook ondersteuning voor geavanceerdere logboekregistratie met behulp van de SLF4J-interface . Zie Logboekregistratie gebruiken in de Azure SDK voor Java voor gedetailleerde informatie.

In de onderstaande secties wordt beschreven hoe u consolelogboekregistratie inschakelt met behulp van het ingebouwde framework.

Door omgevingsvariabelen in te stellen

U kunt consolelogboekregistratie van HTTP-aanvragen en -antwoorden voor uw hele toepassing inschakelen door de volgende twee omgevingsvariabelen in te stellen. Deze wijziging is van invloed op elke Azure-client die ondersteuning biedt voor het registreren van HTTP-aanvragen en -reacties.

  • Omgevingsvariabele AZURE_LOG_LEVEL instellen op debug
  • Stel de omgevingsvariabele AZURE_HTTP_LOG_DETAIL_LEVEL in op een van de volgende waarden:
Weergegeven als Niveau van logboekregistratie
none Logboekregistratie van HTTP-aanvragen/antwoorden is uitgeschakeld
basic Registreert alleen URL's, HTTP-methoden en tijd om de aanvraag te voltooien.
headers Registreert alles in BASIC, plus alle aanvraag- en antwoordheaders.
body Registreert alles in BASIC, plus alle aanvraag- en antwoordtekst.
body_and_headers Registreert alles in HEADERS en BODY.

Door httpLogOptions in te stellen

Consolelogboekregistratie van HTTP-aanvraag en -reactie inschakelen voor één client

  • Omgevingsvariabele AZURE_LOG_LEVEL instellen op debug
  • Voeg een aanroep toe bij httpLogOptions het bouwen van het ImageAnalysisClientvolgende:
ImageAnalysisClient client = new ImageAnalysisClientBuilder()
    .endpoint(endpoint)
    .credential(new KeyCredential(key))
    .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
    .buildClient();

Het enum HttpLogDetailLevel definieert de ondersteunde logboekregistratieniveaus.

Bij logboekregistratie worden standaard bepaalde HTTP-header- en queryparameterwaarden opnieuw uitgevoerd. Het is mogelijk om deze standaardinstelling te overschrijven door op te geven welke headers en queryparameters veilig zijn om te registreren:

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

Als u bijvoorbeeld een volledig niet-bewerkt logboek van de HTTP-aanvraag wilt ophalen, past u het volgende toe:

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

Voeg meer toe aan het bovenstaande om een niet-bewerkt HTTP-antwoord te krijgen. Wanneer u een niet-bewerkt logboek deelt, moet u ervoor zorgen dat het geen geheimen bevat, zoals uw abonnementssleutel.

Vereisten

In deze handleiding wordt ervan uitgegaan dat u de stappen in de quickstart hebt gevolgd. Dit houdt in:

  • U hebt een Computer Vision-resource gemaakt en een sleutel- en eindpunt-URL verkregen.
  • U hebt het juiste SDK-pakket geïnstalleerd en u hebt een actieve quickstart-toepassing . U kunt deze quickstart-toepassing wijzigen op basis van de codevoorbeelden hier.

De client maken en verifiëren

Als u zich wilt verifiëren bij de Image Analysis-service, hebt u een Computer Vision-sleutel en eindpunt-URL nodig. In deze handleiding wordt ervan uitgegaan dat u de omgevingsvariabelen VISION_KEY en VISION_ENDPOINT met uw sleutel en eindpunt hebt gedefinieerd.

Tip

Neem de sleutel niet rechtstreeks op in uw code en plaats deze nooit openbaar. Zie het beveiligingsartikel over Azure AI-services voor meer verificatieopties, zoals Azure Key Vault.

Begin met het maken van een ImageAnalysisClient-object . Voorbeeld:

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

Selecteer de afbeelding die u wilt analyseren

U kunt een afbeelding selecteren door een openbaar toegankelijke afbeeldings-URL op te geven of door afbeeldingsgegevens te lezen in de invoerbuffer van de SDK. Zie de vereisten voor installatiekopieën voor ondersteunde afbeeldingsindelingen.

Afbeeldings-URL

U kunt de volgende voorbeeldafbeeldings-URL gebruiken.

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

Afbeeldingsbuffer

U kunt de afbeelding ook doorgeven als een gegevensmatrix. Lees bijvoorbeeld uit een lokaal afbeeldingsbestand dat u wilt analyseren.

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

Visuele functies selecteren

De Analysis 4.0-API biedt u toegang tot alle functies van de afbeeldingsanalyse van de service. Kies welke bewerkingen u wilt uitvoeren op basis van uw eigen use-case. Zie het overzicht voor een beschrijving van elke functie. In het voorbeeld in deze sectie worden alle beschikbare visuele functies toegevoegd, maar voor praktisch gebruik hebt u waarschijnlijk minder nodig.

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

De Analyse-API aanroepen met opties

Met de volgende code wordt de Analyse-API aangeroepen met de functies die u hierboven hebt geselecteerd en aanvullende opties, die hieronder zijn gedefinieerd. Als u wilt analyseren vanuit een afbeeldingsbuffer in plaats van een URL, vervangt imageURL u de methodeaanroep door 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'
});

Hoogte-breedteverhoudingen voor slim bijsnijden selecteren

Een hoogte-breedteverhouding wordt berekend door de breedte van de doelsnijding te delen door de hoogte. Ondersteunde waarden zijn van 0,75 tot 1,8 (inclusief). Het instellen van deze eigenschap is alleen relevant wanneer VisualFeatures.SmartCrops is geselecteerd als onderdeel van de lijst met visuele functies. Als u VisualFeatures.SmartCrops selecteert, maar geen hoogte-breedteverhoudingen opgeeft, retourneert de service één bijsnijdsuggestie met een hoogte-breedteverhouding die past. In dit geval ligt de hoogte-breedteverhouding tussen 0,5 en 2,0 (inclusief).

Geslachtneutrale onderschrift s selecteren

Als u onderschrift s of dichte onderschrift s extraheert (met behulp van VisualFeatures.Caption of VisualFeatures.DenseCaptions), kunt u vragen om genderneutrale onderschrift s. Genderneutrale onderschrift s zijn optioneel, waarbij het standaard geslacht onderschrift s wordt. Als u bijvoorbeeld in het Engels geslachtneutrale onderschrift s selecteert, worden termen zoals vrouw of man vervangen door persoon en worden jongen of meisje vervangen door kind.

Talen opgeven

U kunt de taal van de geretourneerde gegevens opgeven. De taal is optioneel, waarbij de standaardinstelling Engels is. Zie Taalondersteuning voor een lijst met ondersteunde taalcodes en welke visuele functies voor elke taal worden ondersteund.

Resultaten ophalen van de service

De volgende code laat zien hoe u de resultaten van de verschillende analysebewerkingen kunt parseren .

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

Probleemoplossing

Logboekregistratie

Het inschakelen van logboekregistratie kan helpen nuttige informatie over fouten te ontdekken. Als u een logboek met HTTP-aanvragen en -antwoorden wilt zien, stelt u de AZURE_LOG_LEVEL omgevingsvariabele in op info. U kunt logboekregistratie ook tijdens runtime inschakelen door het @azure/loggervolgende aan te roepensetLogLevel:

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

setLogLevel("info");

Voor meer gedetailleerde instructies over het inschakelen van logboeken, kunt u de @azure/logger pakketdocumenten bekijken.

Vereisten

In deze handleiding wordt ervan uitgegaan dat u de stappen hebt gevolgd die worden vermeld op de snelstartpagina . Dit houdt in:

  • U hebt een Computer Vision-resource gemaakt en een sleutel- en eindpunt-URL verkregen.
  • U hebt de curl.exe service aangeroepen (of u hebt een alternatief hulpprogramma gebruikt). U wijzigt de curl.exe aanroep op basis van de voorbeelden hier.

Verificatie op basis van de service

Als u zich wilt verifiëren bij de Image Analysis-service, hebt u een Computer Vision-sleutel en eindpunt-URL nodig.

Tip

Neem de sleutel niet rechtstreeks op in uw code en plaats deze nooit openbaar. Zie het beveiligingsartikel over Azure AI-services voor meer verificatieopties, zoals Azure Key Vault.

In het SDK-voorbeeld wordt ervan uitgegaan dat u de omgevingsvariabelen VISION_KEY en VISION_ENDPOINT met uw sleutel en eindpunt hebt gedefinieerd.

Verificatie wordt uitgevoerd door de HTTP-aanvraagheader Ocp-Apim-Subscription-Key toe te voegen en deze in te stellen op uw vision-sleutel. De aanroep wordt uitgevoerd naar de URL <endpoint>/computervision/imageanalysis:analyze?api-version=2024-02-01, waar <endpoint> is uw unieke EINDPUNT-URL voor Computer Vision. U voegt queryreeksen toe op basis van uw analyseopties.

Selecteer de afbeelding die u wilt analyseren

De code in deze handleiding maakt gebruik van externe afbeeldingen waarnaar wordt verwezen door de URL. U kunt zelf verschillende afbeeldingen proberen om de volledige mogelijkheden van de functies voor afbeeldingsanalyse te bekijken.

Bij het analyseren van een externe afbeelding geeft u de URL van de afbeelding op door de hoofdtekst van de aanvraag als volgt op te maken: {"url":"https://learn.microsoft.com/azure/cognitive-services/computer-vision/images/windows-kitchen.jpg"} Het inhoudstype moet zijn application/json.

Als u een lokale afbeelding wilt analyseren, plaatst u de binaire afbeeldingsgegevens in de hoofdtekst van de HTTP-aanvraag. Het inhoudstype moet of application/octet-streammultipart/form-data.

Analyseopties selecteren

Visuele functies selecteren bij gebruik van het standaardmodel

De Analysis 4.0-API biedt u toegang tot alle functies van de afbeeldingsanalyse van de service. Kies welke bewerkingen u wilt uitvoeren op basis van uw eigen use-case. Zie het overzicht voor een beschrijving van elke functie. In het voorbeeld in deze sectie worden alle beschikbare visuele functies toegevoegd, maar voor praktisch gebruik hebt u waarschijnlijk minder nodig.

Visuele kenmerken 'Captions' en 'DenseCaptions' worden alleen ondersteund in de volgende Azure-regio's: VS - oost, Frankrijk - centraal, Korea - centraal, Europa - noord, Azië - zuidoost, Europa - west, VS - west.

Notitie

De REST API maakt gebruik van de termen Smart Crops en Smart Crops Aspect Ratios. De SDK gebruikt de termen Bijsnijdsuggesties en Hoogte-breedteverhoudingen bijsnijden. Beide verwijzen naar dezelfde servicebewerking. Op dezelfde manier gebruikt de REST API de term Read voor het detecteren van tekst in de afbeelding met behulp van OPTICAL Character Recognition (OCR), terwijl de SDK de term Tekst gebruikt voor dezelfde bewerking.

U kunt opgeven welke functies u wilt gebruiken door de URL-queryparameters van de Analysis 4.0-API in te stellen. Een parameter kan meerdere waarden hebben, gescheiden door komma's.

URL-parameter Weergegeven als Beschrijving
features read Leest de zichtbare tekst in de afbeelding en voert deze uit als gestructureerde JSON-gegevens.
features caption Beschrijft de inhoud van de afbeelding met een volledige zin in ondersteunde talen.
features denseCaptions Genereert gedetailleerde onderschrift s voor maximaal 10 prominente afbeeldingsregio's.
features smartCrops Hiermee worden de rechthoekcoördinaten gevonden die de afbeelding bijsnijden tot een gewenste hoogte-breedteverhouding, terwijl het interessegebied behouden blijft.
features objects Detecteert verschillende objecten in een afbeelding, inclusief de geschatte locatie. Het argument Objecten is alleen beschikbaar in het Engels.
features tags Tagt de afbeelding met een gedetailleerde lijst met woorden die betrekking hebben op de inhoud van de afbeelding.
features people Detecteert personen die worden weergegeven in afbeeldingen, inclusief de geschatte locaties.

Een ingevulde URL kan er als volgt uitzien:

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

Modelnaam instellen bij gebruik van een aangepast model

U kunt ook afbeeldingsanalyses uitvoeren met een aangepast getraind model. Zie Een aangepast afbeeldingsanalysemodel maken en trainen om een model te maken en te trainen. Zodra uw model is getraind, hebt u alleen de naam van het model nodig. U hoeft geen visuele functies op te geven als u een aangepast model gebruikt.

Als u een aangepast model wilt gebruiken, gebruikt u niet de queryparameter voor functies. Stel in plaats daarvan de model-name parameter in op de naam van uw model, zoals hier wordt weergegeven. Vervang door MyCustomModelName de naam van uw aangepaste model.

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

Talen opgeven

U kunt de taal van de geretourneerde gegevens opgeven. De taal is optioneel, waarbij de standaardinstelling Engels is. Zie Taalondersteuning voor een lijst met ondersteunde taalcodes en welke visuele functies voor elke taal worden ondersteund.

De taaloptie is alleen van toepassing wanneer u het standaardmodel gebruikt.

Met de volgende URL-queryparameter wordt de taal opgegeven. De standaardwaarde is en.

URL-parameter Weergegeven als Beschrijving
language en Engels
language es Spaans
language ja Japans
language pt Portugees
language zh Vereenvoudigd Chinees

Een ingevulde URL kan er als volgt uitzien:

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

Geslachtneutrale onderschrift s selecteren

Als u onderschrift s of dichte onderschrift s extraheert, kunt u vragen om genderneutrale onderschrift s. Genderneutrale onderschrift s zijn optioneel, waarbij het standaard geslacht onderschrift s wordt. Als u bijvoorbeeld in het Engels geslachtneutrale onderschrift s selecteert, worden termen zoals vrouw of man vervangen door persoon en worden jongen of meisje vervangen door kind.

De optie genderneutraal onderschrift is alleen van toepassing wanneer u het standaardmodel gebruikt.

Voeg de optionele querytekenreeks gender-neutral-caption toe met waarden true of false (de standaardinstelling).

Een ingevulde URL kan er als volgt uitzien:

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

Hoogte-breedteverhoudingen voor slim bijsnijden selecteren

Een hoogte-breedteverhouding wordt berekend door de breedte van de doelsnijding te delen door de hoogte. Ondersteunde waarden zijn van 0,75 tot 1,8 (inclusief). Het instellen van deze eigenschap is alleen relevant wanneer VisualFeatures.SmartCrops is geselecteerd als onderdeel van de lijst met visuele functies. Als u VisualFeatures.SmartCrops selecteert, maar geen hoogte-breedteverhoudingen opgeeft, retourneert de service één bijsnijdsuggestie met een hoogte-breedteverhouding die past. In dit geval ligt de hoogte-breedteverhouding tussen 0,5 en 2,0 (inclusief).

Slimme bijsnijdingsaspect rantsoenen zijn alleen van toepassing wanneer u het standaardmodel gebruikt.

Voeg de optionele querytekenreeks smartcrops-aspect-ratiostoe, met een of meer hoogte-breedteverhoudingen gescheiden door een komma.

Een ingevulde URL kan er als volgt uitzien:

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

Resultaten ophalen van de service

Resultaten ophalen met behulp van het standaardmodel

In deze sectie wordt beschreven hoe u een analyseaanroep naar de service kunt maken met behulp van het standaardmodel en de resultaten kunt ophalen.

De service retourneert een 200 HTTP-antwoord en de hoofdtekst bevat de geretourneerde gegevens in de vorm van een JSON-tekenreeks. De volgende tekst is een voorbeeld van een JSON-antwoord.

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

Foutcodes

Bij fout bevat het antwoord van de Image Analysis-service een JSON-nettolading die een foutcode en foutbericht bevat. Het kan ook andere details bevatten in de vorm van en interne foutcode en bericht. Voorbeeld:

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

Hieronder volgt een lijst met veelvoorkomende fouten en de oorzaken ervan. Lijstitems worden weergegeven in de volgende indeling:

  • HTTP-antwoordcode
    • Foutcode en bericht in het JSON-antwoord
      • [Optioneel] Interne foutcode en bericht in het JSON-antwoord

Lijst met veelvoorkomende fouten:

  • 400 Bad Request
    • InvalidRequest - Image URL is badly formatted or not accessible. Zorg ervoor dat de afbeeldings-URL geldig en openbaar toegankelijk is.
    • InvalidRequest - The image size is not allowed to be zero or larger than 20971520 bytes. Verklein de grootte van de afbeelding door deze te comprimeren en/of het formaat ervan te wijzigen en uw aanvraag opnieuw in te dienen.
    • InvalidRequest - The feature 'Caption' is not supported in this region. De functie wordt alleen ondersteund in specifieke Azure-regio's. Zie de vereisten voor quickstart voor de lijst met ondersteunde Azure-regio's.
    • InvalidRequest - The provided image content type ... is not supported. Het inhoudstype van de HTTP-header in de aanvraag is geen toegestaan type:
      • Voor een afbeeldings-URL moet inhoudstype zijn application/json
      • Voor binaire afbeeldingsgegevens moet inhoudstype zijn application/octet-stream of multipart/form-data
    • InvalidRequest - Either 'features' or 'model-name' needs to be specified in the query parameter.
    • InvalidRequest - Image format is not valid
    • InvalidRequest - Analyze query is invalid
      • NotSupportedVisualFeature - Specified feature type is not valid. Zorg ervoor dat de queryreeks van de functies een geldige waarde heeft.
      • NotSupportedLanguage - The input language is not supported. Zorg ervoor dat de taalquerytekenreeks een geldige waarde heeft voor de geselecteerde visuele functie, op basis van de volgende tabel.
      • 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. De service kan het aangepaste model niet vinden op basis van de naam die is opgegeven door de model-name querytekenreeks.

Volgende stappen