Appeler l’API Analyse d’image 4.0

Cet article explique comment appeler l’API Analyse d’image 4.0 pour retourner des informations sur les caractéristiques visuelles d’une image. Il montre également comment analyser les informations retournées.

Prérequis

Ce guide suppose que vous avez suivi les étapes mentionnées dans la page Démarrage rapide. Cela implique :

  • Vous avez créer une ressource Vision par ordinateur et obtenu une clé ainsi qu’une URL de point de terminaison.
  • Vous avez le package SDK approprié d’installé et une application de démarrage rapide est en cours d’exécution. Vous pouvez modifier l’application de ce démarrage rapide en vous basant sur les exemples de code présentés ici.

Créer et authentifier le client

Pour vous authentifier auprès du service Analyse d’image, vous avez besoin d’une clé Vision par ordinateur et d’une URL de point de terminaison. Ce guide suppose que vous avez défini les variables d’environnement VISION_KEY et VISION_ENDPOINT avec votre clé et votre point de terminaison.

Conseil

N’incluez pas la clé directement dans votre code et ne la publiez jamais publiquement. Pour découvrir d’autres options d’authentification telles qu’Azure Key Vault, veuillez consulter l’article sur la sécurité d’Azure AI services.

Commencez par créer un objet ImageAnalysisClient. Par exemple :

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

Sélectionner l’image à analyser

Vous pouvez sélectionner une image en fournissant une URL d’image en accès public ou en transmettant les données binaires au SDK. Consultez Exigences relatives aux images pour connaître les formats d’image pris en charge.

URL de l’image

Créez un objet Uri pour l’image que vous souhaitez analyser.

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

Mémoire tampon d’image

Vous pouvez également transmettre les données d’image au SDK via un objet BinaryData. Par exemple, lisez à partir d’un fichier image local que vous souhaitez analyser.

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

Sélectionner des caractéristiques visuelles

L’API Analyse 4.0 vous permet d’accéder à toutes les fonctionnalités d’analyse d’image du service. Choisissez les opérations à effectuer en fonction de votre propre cas d’usage. Consultez la vue d’ensemble pour obtenir une description de chaque caractéristique. L’exemple de cette section ajoute toutes les fonctionnalités visuelles disponibles, mais dans la pratique, vous ne les utiliserez pas toutes.

Important

Les fonctionnalités visuelles Captions et DenseCaptions sont disponibles uniquement dans les régions Azure suivantes : USA Est, France Centre, Corée Centre, Europe Nord, Asie Sud-Est, Europe Ouest, USA Ouest.

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

Sélectionner les options d’analyse

Utilisez un objet ImageAnalysisOptions pour spécifier différentes options pour l’appel de l’API Analyze.

  • Langue : Vous pouvez spécifier la langue des données retournées. La langue est facultative, la valeur par défaut étant l’anglais. Consultez Prise en charge d’autres langues pour obtenir la liste des codes de langue et des fonctionnalités visuelles pris en charge pour chaque langue.
  • Légendes non genrées : Si vous extrayez des légendes ou des légendes denses (en utilisant VisualFeatures.Caption ou VisualFeatures.DenseCaptions), vous pouvez demander des légendes non genrées. Les légendes non genrées sont facultatives, la valeur par défaut étant les légendes genrées. Par exemple, en anglais, lorsque vous sélectionnez des légendes non genrées, des termes tels que femme ou homme sont remplacés par personne, et garçon ou fille sont remplacés par enfant.
  • Proportions de rognage : Les proportions sont calculées en divisant la largeur de rognage cible par la hauteur. Les valeurs prises en charge sont comprises entre 0,75 et 1,8 (inclus). La définition de cette propriété est pertinente seulement si VisualFeatures.SmartCrops a été sélectionné dans la liste des fonctionnalités visuelles. Si vous sélectionnez VisualFeatures.SmartCropssans spécifier de proportions, le service retourne une suggestion de rognage avec des proportions qu’il juge adaptées. Dans ce cas, les proportions sont comprises entre 0,5 et 2,0 (inclus).
ImageAnalysisOptions options = new ImageAnalysisOptions { 
    GenderNeutralCaption = true,
    Language = "en",
    SmartCropsAspectRatios = new float[] { 0.9F, 1.33F }};

Appeler l’API Analyser

Cette section vous montre comment effectuer un appel d’analyse au service.

Appelez la méthode Analyze sur l’objet ImageAnalysisClient, comme illustré ici. L’appel est synchrone et se bloque jusqu’à ce que le service renvoie les résultats ou qu’une erreur se produise. Vous pouvez également appeler la méthode AnalyzeAsync non bloquante.

Utilisez les objets d’entrée créés dans les sections ci-dessus. Pour analyser à partir d’une mémoire tampon d’image au lieu d’une URL, remplacez imageURL dans l’appel de méthode par la variable imageData.

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

Obtenir les résultats du service

Le code suivant vous montre comment analyser les résultats des différentes opérations Analyze.

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

Dépannage

Gestion des exceptions

Lorsque vous interagissez avec l’analyse d’image en utilisant le SDK .NET, toute réponse du service qui n’a pas de code d’état 200 (réussite) entraîne la levée d’une exception. Par exemple, si vous essayez d’analyser une image qui n’est pas accessible en raison d’une URL qui ne fonctionne plus, un état 400 est retourné, indiquant une demande incorrecte, puis une exception correspondante est levée.

Dans l’extrait suivant, les erreurs sont gérées correctement via l’interception de l’exception et l’affichage d’informations supplémentaires sur l’erreur en question.

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

Vous pouvez en savoir plus sur l’activation de la journalisation du SDK ici.

Prérequis

Ce guide suppose que vous avez suivi les étapes mentionnées dans le Démarrage rapide. Cela implique :

  • Vous avez créer une ressource Vision par ordinateur et obtenu une clé ainsi qu’une URL de point de terminaison.
  • Vous avez le package SDK approprié d’installé et une application de démarrage rapide est en cours d’exécution. Vous pouvez modifier l’application de ce démarrage rapide en vous basant sur les exemples de code présentés ici.

Créer et authentifier le client

Pour vous authentifier auprès du service Analyse d’image, vous avez besoin d’une clé Vision par ordinateur et d’une URL de point de terminaison. Ce guide suppose que vous avez défini les variables d’environnement VISION_KEY et VISION_ENDPOINT avec votre clé et votre point de terminaison.

Conseil

N’incluez pas la clé directement dans votre code et ne la publiez jamais publiquement. Pour découvrir d’autres options d’authentification telles qu’Azure Key Vault, veuillez consulter l’article sur la sécurité d’Azure AI services.

Commencez par créer un objet ImageAnalysisClient en utilisant l’un des constructeurs. Par exemple :

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

Sélectionner l’image à analyser

Vous pouvez sélectionner une image en fournissant une URL d’image en accès public ou en lisant les données d’image dans la mémoire tampon d’entrée du SDK. Consultez Exigences relatives aux images pour connaître les formats d’image pris en charge.

URL de l’image

Vous pouvez utiliser l’exemple d’URL d’image suivant.

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

Mémoire tampon d’image

Vous pouvez également passer l’image sous forme d’objet bytes. Par exemple, lisez à partir d’un fichier image local que vous souhaitez analyser.

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

Sélectionner des caractéristiques visuelles

L’API Analyse 4.0 vous permet d’accéder à toutes les fonctionnalités d’analyse d’image du service. Choisissez les opérations à effectuer en fonction de votre propre cas d’usage. Consultez la vue d’ensemble pour obtenir une description de chaque caractéristique. L’exemple de cette section ajoute toutes les fonctionnalités visuelles disponibles, mais dans la pratique, vous ne les utiliserez pas toutes.

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

Appeler la méthode analyze_from_url avec des options

Le code suivant appelle la méthode analyze_from_url sur le client avec les fonctionnalités que vous avez sélectionnées ci-dessus et les options supplémentaires définies ci-dessous. Pour faire l’analyse à partir d’une mémoire tampon d’image au lieu de l’URL, appelez la méthode analyze à la place, en utilisant image_data=image_data comme premier 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"
)

Sélectionner les proportions de rognage intelligent

Les proportions sont calculées en divisant la largeur de rognage cible par la hauteur. Les valeurs prises en charge sont comprises entre 0,75 et 1,8 (inclus). La définition de cette propriété est pertinente seulement si VisualFeatures.SMART_CROPS a été sélectionné dans la liste des fonctionnalités visuelles. Si vous sélectionnez VisualFeatures.SMART_CROPSsans spécifier de proportions, le service retourne une suggestion de rognage avec des proportions qu’il juge adaptées. Dans ce cas, les proportions sont comprises entre 0,5 et 2,0 (inclus).

Sélectionner des légendes non genrées

Si vous extrayez des légendes ou des légendes denses (en utilisant VisualFeatures.CAPTION ou VisualFeatures.DENSE_CAPTIONS), vous pouvez demander des légendes non genrées. Les légendes non genrées sont facultatives, la valeur par défaut étant les légendes genrées. Par exemple, en anglais, lorsque vous sélectionnez des légendes non genrées, des termes tels que femme ou homme sont remplacés par personne, et garçon ou fille sont remplacés par enfant.

Spécifier les langues

Vous pouvez également spécifier la langue des données retournées. La langue est facultative, la valeur par défaut étant l’anglais. Consultez Prise en charge d’autres langues pour obtenir la liste des codes de langue et des fonctionnalités visuelles pris en charge pour chaque langue.

Obtenir les résultats du service

Le code suivant montre comment analyser les résultats des opérations analyze_from_url ou analyze.

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

Dépannage

Exceptions

Les méthodes analyze déclenchent une exception HttpResponseError pour une réponse de code d’état HTTP de non-réussite du service. Le status_code de l’exception est le code d’état de la réponse HTTP. L’error.message de l’exception contient un message détaillé qui vous permet de diagnostiquer le problème :

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

Par exemple, lorsque vous fournissez une clé d’authentification incorrecte :

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.

Ou lorsque vous fournissez une URL d’image qui n’existe pas ou qui n’est pas accessible :

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

Journalisation

Le client utilise la bibliothèque de journalisation Python standard. Le SDK enregistre les détails des requêtes et des réponses HTTP, ce qui peut être utile pour la résolution des problèmes. Pour vous connecter à stdout, ajoutez les éléments suivants :

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)

Par défaut, les journaux suppriment les valeurs des chaînes de requête d’URL, les valeurs de certains en-têtes de requête et de réponse HTTP (notamment Ocp-Apim-Subscription-Key qui contient la clé) et le contenu des requêtes et des réponses. Pour créer des journaux sans suppression, définissez l’argument de méthode logging_enable = True lorsque vous créez ImageAnalysisClient ou lorsque vous appelez analyze sur le client.

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

Les journaux sans suppression sont générés pour le niveau de journal logging.DEBUG uniquement. Veillez à protéger les journaux sans suppression afin d’éviter de mettre la sécurité en danger. Pour plus d’informations, consultez Configurer la journalisation dans les bibliothèques Azure pour Python.

Prérequis

Ce guide suppose que vous avez suivi les étapes de la page Démarrage rapide. Cela implique :

  • Vous avez créer une ressource Vision par ordinateur et obtenu une clé ainsi qu’une URL de point de terminaison.
  • Vous avez le package SDK approprié d’installé et une application de démarrage rapide est en cours d’exécution. Vous pouvez modifier l’application de ce démarrage rapide en vous basant sur les exemples de code présentés ici.

Créer et authentifier le client

Pour vous authentifier auprès du service Analyse d’image, vous avez besoin d’une clé Vision par ordinateur et d’une URL de point de terminaison. Ce guide suppose que vous avez défini les variables d’environnement VISION_KEY et VISION_ENDPOINT avec votre clé et votre point de terminaison.

Conseil

N’incluez pas la clé directement dans votre code et ne la publiez jamais publiquement. Pour découvrir d’autres options d’authentification telles qu’Azure Key Vault, veuillez consulter l’article sur la sécurité d’Azure AI services.

Commencez par créer un objet ImageAnalysisClient. Par exemple :

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

Sélectionner l’image à analyser

Vous pouvez sélectionner une image en fournissant une URL d’image en accès public ou en lisant les données d’image dans la mémoire tampon d’entrée du SDK. Consultez Exigences relatives aux images pour connaître les formats d’image pris en charge.

URL de l’image

Créez une chaîne imageUrl qui contient l’URL accessible publiquement de l’image à analyser.

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

Mémoire tampon d’image

Vous pouvez aussi passer l’image sous forme de mémoire tampon en utilisant un objet BinaryData. Par exemple, lisez à partir d’un fichier image local que vous souhaitez analyser.

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

Sélectionner des caractéristiques visuelles

L’API Analyse 4.0 vous permet d’accéder à toutes les fonctionnalités d’analyse d’image du service. Choisissez les opérations à effectuer en fonction de votre propre cas d’usage. Consultez la vue d’ensemble pour obtenir une description de chaque caractéristique. L’exemple de cette section ajoute toutes les fonctionnalités visuelles disponibles, mais dans la pratique, vous ne les utiliserez pas toutes.

Important

Les fonctionnalités visuelles Captions (légendes) et DenseCaptions (légendes denses) ne sont disponibles que dans les régions Azure suivantes : USA Est, France Centre, Corée Centre, Europe Nord, Asie Sud-Est, Europe Ouest, USA Ouest.

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

Sélectionner les options d’analyse

Utilisez un objet ImageAnalysisOptions pour spécifier différentes options pour l’appel de l’API Analyze.

  • Langue : Vous pouvez spécifier la langue des données retournées. La langue est facultative, la valeur par défaut étant l’anglais. Consultez Prise en charge d’autres langues pour obtenir la liste des codes de langue et des fonctionnalités visuelles pris en charge pour chaque langue.
  • Légendes non genrées : Si vous extrayez des légendes ou des légendes denses (en utilisant VisualFeatures.CAPTION ou VisualFeatures.DENSE_CAPTIONS), vous pouvez demander des légendes non genrées. Les légendes non genrées sont facultatives, la valeur par défaut étant les légendes genrées. Par exemple, en anglais, lorsque vous sélectionnez des légendes non genrées, des termes tels que femme ou homme sont remplacés par personne, et garçon ou fille sont remplacés par enfant.
  • Proportions de rognage : Les proportions sont calculées en divisant la largeur de rognage cible par la hauteur. Les valeurs prises en charge sont comprises entre 0,75 et 1,8 (inclus). La définition de cette propriété est pertinente seulement si VisualFeatures.SMART_CROPS a été sélectionné dans la liste des fonctionnalités visuelles. Si vous sélectionnez VisualFeatures.SMART_CROPSsans spécifier de proportions, le service retourne une suggestion de rognage avec des proportions qu’il juge adaptées. Dans ce cas, les proportions sont comprises entre 0,5 et 2,0 (inclus).
// 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));

Appeler la méthode analyzeFromUrl

Cette section vous montre comment effectuer un appel d’analyse au service.

Appelez la méthode analyzeFromUrl sur l’objet ImageAnalysisClient, comme illustré ici. L’appel est synchrone et se bloque jusqu’à ce que le service renvoie les résultats ou qu’une erreur se produise. Vous pouvez également utiliser un objet ImageAnalysisAsyncClient à la place et appeler sa méthode analyzeFromUrl qui n’est pas bloquante.

Pour faire l’analyse à partir d’une mémoire tampon d’image au lieu de l’URL, appelez la méthode analyze à la place et passez imageData comme premier argument.

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

Obtenir les résultats du service

Le code suivant montre comment analyser les résultats des opérations analyzeFromUrl et analyze.

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

Dépannage

Exceptions

Les méthodes analyze lèvent une HttpResponseException quand le service répond avec un code d’état HTTP de non-réussite. Le getResponse().getStatusCode() de l’exception contient le code d’état de la réponse HTTP. Le getMessage() de l’exception contient un message détaillé qui vous permet de diagnostiquer le problème :

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

Par exemple, lorsque vous fournissez une clé d’authentification incorrecte :

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

Ou lorsque vous fournissez une image dans un format qui n’est pas reconnu :

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

Activer la journalisation des requêtes/réponses HTTP

L’examen de la requête HTTP envoyée au service Analyse d’image ou de la réponse reçue via le réseau peut être utile pour résoudre les problèmes. La bibliothèque de client Analyse d’image prend en charge une infrastructure de journalisation console intégrée à des fins de débogage temporaire. Elle prend également en charge une journalisation plus avancée via l’interface SLF4J. Pour des informations détaillées, consultez Utiliser la journalisation dans le SDK Azure pour Java.

Les sections ci-dessous décrivent l’activation de la journalisation console avec l’infrastructure intégrée.

En définissant les variables d’environnement

Vous pouvez activer la journalisation console des requêtes et des réponses HTTP pour votre application toute entière en définissant les deux variables d’environnement suivantes. Cette modification affecte chaque client Azure prenant en charge la journalisation des requêtes et des réponses HTTP.

  • Définir une variable d’environnement AZURE_LOG_LEVEL sur debug
  • Définissez la variable d’environnement AZURE_HTTP_LOG_DETAIL_LEVEL sur l’une des valeurs suivantes :
Valeur Niveau de journalisation
none La journalisation des requêtes/réponses HTTP est désactivée
basic Journalise uniquement les URL, les méthodes HTTP et l’heure de fin de la requête.
headers Journalise tout en BASIC, plus tous les en-têtes de requête et de réponse.
body Journalise tout en BASIC, plus l’intégralité du corps des requêtes et des réponses.
body_and_headers Journalise tout dans HEADERS et BODY.

En définissant httpLogOptions

Pour activer la journalisation console des requêtes et des réponses HTTP pour un seul client

  • Définir une variable d’environnement AZURE_LOG_LEVEL sur debug
  • Ajoutez un appel à httpLogOptions lors de la création de l’ImageAnalysisClient :
ImageAnalysisClient client = new ImageAnalysisClientBuilder()
    .endpoint(endpoint)
    .credential(new KeyCredential(key))
    .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
    .buildClient();

L’enum HttpLogDetailLevel définit les niveaux de journalisation pris en charge.

Par défaut, lors de la journalisation, certaines valeurs d’en-tête HTTP et de paramètre de requête sont supprimées. Il est possible de remplacer ce comportement par défaut en spécifiant quels en-têtes et paramètres de requête peuvent être journalisés sans crainte :

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

Par exemple, pour obtenir un journal complet de la requête HTTP sans suppression, appliquez ce qui suit :

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

Ajoutez d’autres informations à ce qui est ci-dessus pour obtenir une réponse HTTP sans suppression. Lorsque vous partagez un journal sans suppression, assurez-vous qu’il ne contient pas de secrets tels que votre clé d’abonnement.

Prérequis

Ce guide suppose que vous avez suivi les étapes mentionnées dans le Démarrage rapide. Cela implique :

  • Vous avez créer une ressource Vision par ordinateur et obtenu une clé ainsi qu’une URL de point de terminaison.
  • Vous avez le package SDK approprié d’installé et une application de démarrage rapide est en cours d’exécution. Vous pouvez modifier l’application de ce démarrage rapide en vous basant sur les exemples de code présentés ici.

Créer et authentifier le client

Pour vous authentifier auprès du service Analyse d’image, vous avez besoin d’une clé Vision par ordinateur et d’une URL de point de terminaison. Ce guide suppose que vous avez défini les variables d’environnement VISION_KEY et VISION_ENDPOINT avec votre clé et votre point de terminaison.

Conseil

N’incluez pas la clé directement dans votre code et ne la publiez jamais publiquement. Pour découvrir d’autres options d’authentification telles qu’Azure Key Vault, veuillez consulter l’article sur la sécurité d’Azure AI services.

Commencez par créer un objet ImageAnalysisClient. Par exemple :

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

Sélectionner l’image à analyser

Vous pouvez sélectionner une image en fournissant une URL d’image en accès public ou en lisant les données d’image dans la mémoire tampon d’entrée du SDK. Consultez Exigences relatives aux images pour connaître les formats d’image pris en charge.

URL de l’image

Vous pouvez utiliser l’exemple d’URL d’image suivant.

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

Mémoire tampon d’image

Vous pouvez également passer l’image sous la forme d’un tableau de données. Par exemple, lisez à partir d’un fichier image local que vous souhaitez analyser.

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

Sélectionner des caractéristiques visuelles

L’API Analyse 4.0 vous permet d’accéder à toutes les fonctionnalités d’analyse d’image du service. Choisissez les opérations à effectuer en fonction de votre propre cas d’usage. Consultez la vue d’ensemble pour obtenir une description de chaque caractéristique. L’exemple de cette section ajoute toutes les fonctionnalités visuelles disponibles, mais dans la pratique, vous ne les utiliserez pas toutes.

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

Appeler l’API Analyze avec des options

Le code suivant appelle l’API Analyze avec les fonctionnalités que vous avez sélectionnées ci-dessus et les options supplémentaires définies ci-dessous. Pour analyser à partir d’une mémoire tampon d’image au lieu d’une URL, remplacez imageURL dans l’appel de méthode par 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'
});

Sélectionner les proportions de rognage intelligent

Les proportions sont calculées en divisant la largeur de rognage cible par la hauteur. Les valeurs prises en charge sont comprises entre 0,75 et 1,8 (inclus). La définition de cette propriété est pertinente seulement si VisualFeatures.SmartCrops a été sélectionné dans la liste des fonctionnalités visuelles. Si vous sélectionnez VisualFeatures.SmartCropssans spécifier de proportions, le service retourne une suggestion de rognage avec des proportions qu’il juge adaptées. Dans ce cas, les proportions sont comprises entre 0,5 et 2,0 (inclus).

Sélectionner des légendes non genrées

Si vous extrayez des légendes ou des légendes denses (en utilisant VisualFeatures.Caption ou VisualFeatures.Dense_Captions), vous pouvez demander des légendes non genrées. Les légendes non genrées sont facultatives, la valeur par défaut étant les légendes genrées. Par exemple, en anglais, lorsque vous sélectionnez des légendes non genrées, des termes tels que femme ou homme sont remplacés par personne, et garçon ou fille sont remplacés par enfant.

Spécifier les langues

Vous pouvez également spécifier la langue des données retournées. La langue est facultative, la valeur par défaut étant l’anglais. Consultez Prise en charge d’autres langues pour obtenir la liste des codes de langue et des fonctionnalités visuelles pris en charge pour chaque langue.

Obtenir les résultats du service

Le code suivant vous montre comment analyser les résultats des différentes opérations analyze.

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

Dépannage

Journalisation

L’activation de la journalisation peut vous aider à mieux comprendre les échecs. Pour avoir un journal des requêtes et réponses HTTP, définissez la variable d’environnement AZURE_LOG_LEVEL sur info. Vous pouvez également activer la journalisation au moment de l’exécution en appelant setLogLevel dans @azure/logger :

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

setLogLevel("info");

Pour obtenir des instructions plus détaillées sur l’activation des journaux, consultez les documents relatifs au package @azure/logger.

Prérequis

Ce guide considère que vous avez suivi avec succès les étapes mentionnées dans la page Démarrage rapide. Cela implique :

  • Vous avez créer une ressource Vision par ordinateur et obtenu une clé ainsi qu’une URL de point de terminaison.
  • Vous avez réussi à passer un appel curl.exe au service (ou utilisé un autre outil). Vous pouvez modifiez l’appel curl.exe en vous basant sur les exemples présentés ici.

S’authentifier auprès du service

Pour vous authentifier auprès du service Analyse d’image, vous avez besoin d’une clé Vision par ordinateur et d’une URL de point de terminaison.

Conseil

N’incluez pas la clé directement dans votre code et ne la publiez jamais publiquement. Pour découvrir d’autres options d’authentification telles qu’Azure Key Vault, veuillez consulter l’article sur la sécurité d’Azure AI services.

L’exemple SDK suppose que vous avez défini les variables d’environnement VISION_KEY et VISION_ENDPOINT avec votre clé et votre point de terminaison.

L’authentification s’effectue en ajoutant l’en-tête de requête HTTP Ocp-Apim-Subscription-Key et en y définissant votre clé de vision. L’appel est passé à l’URL <endpoint>/computervision/imageanalysis:analyze?api-version=2024-02-01, <endpoint> étant votre URL unique de point de terminaison de vision par ordinateur. Vous ajoutez des chaînes de requête en fonction de vos options d’analyse.

Sélectionner l’image à analyser

Le code de ce guide utilise des images distantes référencées par URL. Vous souhaiterez peut-être essayer différentes images pour observer toutes la puissance des fonctionnalités d’Analyse d’image.

Lors de l’analyse d’une image distante, vous spécifiez l’URL de l’image en mettant en forme le corps de la demande comme ceci : {"url":"https://learn.microsoft.com/azure/cognitive-services/computer-vision/images/windows-kitchen.jpg"}. Le Content-Type doit être application/json.

Pour analyser une image locale, vous placez les données d’image binaire dans le corps de la demande HTTP. Le Content-Type doit être application/octet-stream ou multipart/form-data.

Sélectionner les options d’analyse

Sélectionner des fonctionnalités visuelles lors de l’utilisation du modèle standard

L’API Analyse 4.0 vous permet d’accéder à toutes les fonctionnalités d’analyse d’image du service. Choisissez les opérations à effectuer en fonction de votre propre cas d’usage. Consultez la vue d’ensemble pour obtenir une description de chaque caractéristique. L’exemple de cette section ajoute toutes les fonctionnalités visuelles disponibles, mais dans la pratique, vous ne les utiliserez pas toutes.

Les fonctionnalités visuelles « Captions » (légendes) et « DenseCaptions » (légendes denses) ne sont disponibles que dans les régions Azure suivantes : USA Est, France Centre, Corée Centre, Europe Nord, Asie Sud-Est, Europe Ouest, USA Ouest.

Notes

L’API REST utilise les termes Smart Crops (rognage intelligent) et Smart Crops Aspect Ratios (proportions de rognage intelligent). Le Kit de développement logiciel (SDK) utilise les termes Crop Suggestions (suggestions de rognage) et Cropping Aspect Ratios (proportions de rognage). Ils font tous deux référence à la même opération de service. De même, l’API REST utilise le terme Read (lire) pour la détection du texte dans l’image en utilisant la reconnaissance optique de caractères (OCR), tandis que le SDK utilise le terme Text (texte) pour la même opération.

Vous pouvez spécifier les caractéristiques que vous voulez utiliser en définissant les paramètres de requête d’URL de l’API Analyse 4.0. Un paramètre peut avoir plusieurs valeurs, séparées par des virgules.

Paramètre d’URL Valeur Description
features read Lit le texte visible dans l’image et le génère sous forme de données JSON structurées.
features caption Décrit le contenu de l’image avec une phrase complète dans les langues prises en charge.
features denseCaptions Génère des légendes détaillées pour au plus 10 régions d’image importantes.
features smartCrops Recherche les coordonnées de rectangle qui rogneraient l’image sur un rapport d’aspect souhaité tout en préservant la zone d’intérêt.
features objects Détecte les différents objets dans une image, notamment leur emplacement approximatif. L’argument Objects est disponible uniquement en anglais.
features tags Étiquette l’image avec une liste détaillée de mots liés au contenu de l’image.
features people Détecte les personnes apparaissant dans les images, y compris les emplacements approximatifs.

Une URL remplie peut se présenter comme suit :

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

Définir le nom du modèle lors de l’utilisation d’un modèle personnalisé

Vous pouvez également effectuer une analyse d’image avec un modèle entraîné personnalisé. Pour créer et entraîner un modèle, consultez Créer un modèle d’analyse d’image personnalisé. Une fois votre modèle entraîné, vous avez uniquement besoin du nom du modèle. Vous n’avez pas besoin de spécifier des fonctionnalités visuelles si vous utilisez un modèle personnalisé.

Pour utiliser un modèle personnalisé, n’utilisez pas le paramètre de requête features. Au lieu de cela, définissez le paramètre model-name sur le nom de votre modèle, comme indiqué ici. Remplacez par MyCustomModelName le nom de votre modèle personnalisé.

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

Spécifier les langues

Vous pouvez également spécifier la langue des données retournées. La langue est facultative, la valeur par défaut étant l’anglais. Consultez Prise en charge d’autres langues pour obtenir la liste des codes de langue et des fonctionnalités visuelles pris en charge pour chaque langue.

L’option Language s’applique uniquement lorsque vous utilisez le modèle standard.

Le paramètre de requête d’URL suivant spécifie la langue. La valeur par défaut est en.

Paramètre d’URL Valeur Description
language en Anglais
language es Espagnol
language ja Japonais
language pt Portugais
language zh Chinois simplifié

Une URL remplie peut se présenter comme suit :

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

Sélectionner des légendes non genrées

Si vous extrayez des légendes ou des légendes denses, vous pouvez demander des légendes non genrées. Les légendes non genrées sont facultatives, la valeur par défaut étant les légendes genrées. Par exemple, en anglais, lorsque vous sélectionnez des légendes non genrées, des termes tels que femme ou homme sont remplacés par personne, et garçon ou fille sont remplacés par enfant.

L’option de légende non genrée s’applique uniquement lorsque vous utilisez le modèle standard.

Ajoutez la chaîne gender-neutral-caption de requête facultative avec des valeurs true ou false (valeur par défaut).

Une URL remplie peut se présenter comme suit :

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

Sélectionner les proportions de rognage intelligent

Les proportions sont calculées en divisant la largeur de rognage cible par la hauteur. Les valeurs prises en charge sont comprises entre 0,75 et 1,8 (inclus). La définition de cette propriété est pertinente seulement si VisualFeatures.SmartCrops a été sélectionné dans la liste des fonctionnalités visuelles. Si vous sélectionnez VisualFeatures.SmartCropssans spécifier de proportions, le service retourne une suggestion de rognage avec des proportions qu’il juge adaptées. Dans ce cas, les proportions sont comprises entre 0,5 et 2,0 (inclus).

Les proportions de rognage intelligent s’appliquent uniquement lorsque vous utilisez le modèle standard.

Ajoutez la chaîne de requête facultative smartcrops-aspect-ratios, avec un ou plusieurs proportions séparées par une virgule.

Une URL remplie peut se présenter comme suit :

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

Obtenir les résultats du service

Obtenir des résultats à l’aide du modèle standard

Cette section vous montre comment effectuer un appel d’analyse au service à l’aide du modèle standard et obtenir les résultats.

Le service retourne une réponse HTTP 200, et le corps contient les données retournées sous la forme d’une chaîne JSON. Le texte suivant est un exemple de réponse 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
        }
      ]
    }
  }

Codes d’erreur

En cas d’erreur, la réponse du service Analyse d’image contient une charge utile JSON qui comprend un code d’erreur et un message d’erreur. Elle peut également fournir d’autres détails sous la forme d’un code et d’un message d’erreur interne. Par exemple :

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

Voici une liste d’erreurs courantes et leurs causes. Les éléments de la liste se présentent sous la forme suivante :

  • Code de réponse HTTP
    • Code et message d’erreur dans la réponse JSON
      • [Facultatif] Code et message d’erreur interne dans la réponse JSON

Liste d’erreurs courantes :

  • 400 Bad Request
    • InvalidRequest - Image URL is badly formatted or not accessible. Vérifiez que l’URL de l’image est valide et accessible publiquement.
    • InvalidRequest - The image size is not allowed to be zero or larger than 20971520 bytes. Réduisez la taille de l’image en la compressant et/ou en la dimensionnant, puis soumettez de nouveau votre demande.
    • InvalidRequest - The feature 'Caption' is not supported in this region. La fonctionnalité n’est prise en charge que dans certaines régions Azure spécifiques. Consultez les prérequis du Démarrage rapide pour obtenir la liste des régions Azure prises en charge.
    • InvalidRequest - The provided image content type ... is not supported. L’en-tête HTTP Content-Type dans la demande n’est pas un type autorisé :
      • Pour une URL d’image, Content-Type doit être application/json
      • Pour des données d’image binaire, Content-Type doit être application/octet-stream ou 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. Consultez la section Exigences relatives aux images pour connaître les formats d’image pris en charge.
    • InvalidRequest - Analyze query is invalid
      • NotSupportedVisualFeature - Specified feature type is not valid. Vérifiez que la valeur de la chaîne de requête features est valide.
      • NotSupportedLanguage - The input language is not supported. Vérifiez que la valeur de la chaîne de requête language est valide pour la caractéristique visuelle sélectionnée, d’après le tableau suivant.
      • 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. Le service n’a pas trouvé le modèle personnalisé basé sur le nom fourni par la chaîne de requête model-name.

Étapes suivantes