Partager via


Description de l’image

Important

La description de l’image n’est pas disponible en Chine.

Vous pouvez utiliser les API Description d’image pour générer différents types de descriptions de texte pour une image.

Pour plus d’informations sur l’API, consultez la référence d’API pour les fonctionnalités d’imagerie IA.

Pour plus de détails sur la modération du contenu, voir Sécurité du contenu avec les API d’IA générative.

Important

Conditions requises pour le manifeste de package : pour utiliser les API d’imagerie Windows AI, votre application doit être empaquetée en tant que package MSIX avec la systemAIModels fonctionnalité déclarée dans votre Package.appxmanifest. En outre, vérifiez que l’attribut de MaxVersionTested votre manifeste est défini sur une version récente de Windows (par exemple, 10.0.26226.0 ou ultérieure) pour prendre correctement en charge les fonctionnalités d’IA Windows. L’utilisation de valeurs antérieures peut entraîner des erreurs « Non déclarées par application » lors du chargement du modèle.

<Dependencies>
  <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26226.0" />
  <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26226.0" />
</Dependencies>

Types de description

Les types de descriptions de texte suivants sont pris en charge :

  • Résumé : fournit une présentation adaptée aux graphiques et aux diagrammes.
  • Détaillé : fournit une description longue.
  • Diagramme : fournit une brève description adaptée à une légende d’image. Valeur par défaut si aucune valeur n’est spécifiée.
  • Accessible : fournit une description longue avec des détails destinés aux utilisateurs ayant des besoins d’accessibilité.

Limites

Étant donné que ces API utilisent des modèles Machine Learning (ML), des erreurs occasionnelles peuvent se produire lorsque le texte ne décrit pas correctement l’image. Par conséquent, nous vous déconseillons d’utiliser ces API pour les images dans les scénarios suivants :

  • Lorsque les images contiennent du contenu potentiellement sensible et des descriptions inexactes peuvent être controversées, telles que des drapeaux, des cartes, des globes, des symboles culturels ou des symboles religieux.
  • Lorsque des descriptions précises sont essentielles, comme pour les conseils médicaux ou le diagnostic, le contenu juridique ou les documents financiers.

Exemple de description d’image

L’exemple suivant montre comment obtenir une description de texte pour une image en fonction du type de description spécifié (facultatif) et du niveau de modération de contenu (facultatif).

Note

L’image doit être un objet ImageBuffer , car SoftwareBitmap n’est actuellement pas pris en charge (cet exemple montre comment convertir SoftwareBitmap en ImageBuffer).

  1. Vérifiez que le modèle Description de l’image est disponible en appelant la méthode GetReadyState , puis en attendant que la méthode EnsureReadyAsync retourne correctement.

  2. Une fois le modèle Description d’image disponible, créez un objet ImageDescriptionGenerator pour le référencer.

  3. (Facultatif) Créez un objet ContentFilterOptions et spécifiez vos valeurs préférées. Si vous choisissez d’utiliser des valeurs par défaut, vous pouvez passer un objet Null.

  4. Obtenez la description de l’image (LanguageModelResponse.Response) en appelant la méthode DescribeAsync spécifiant l’image d’origine, ImageDescriptionKind (valeur facultative pour le type de description préféré) et l’objet ContentFilterOptions (facultatif).

using Microsoft.Graphics.Imaging;
using Microsoft.Windows.Management.Deployment;  
using Microsoft.Windows.AI;
using Microsoft.Windows.AI.ContentModeration;
using Windows.Storage.StorageFile;  
using Windows.Storage.Streams;  
using Windows.Graphics.Imaging;

if (ImageDescriptionGenerator.GetReadyState() == AIFeatureReadyState.NotReady) 
{
    var result = await ImageDescriptionGenerator.EnsureReadyAsync();
    if (result.Status != AIFeatureReadyResultState.Success)
    {
        throw result.ExtendedError;
    }
}

ImageDescriptionGenerator imageDescriptionGenerator = await ImageDescriptionGenerator.CreateAsync();

// Convert already available softwareBitmap to ImageBuffer.
ImageBuffer inputImage = ImageBuffer.CreateCopyFromBitmap(softwareBitmap);  

// Create content moderation thresholds object.
ContentFilterOptions filterOptions = new ContentFilterOptions();
filterOptions.PromptMinSeverityLevelToBlock.ViolentContentSeverity = SeverityLevel.Medium;
filterOptions.ResponseMinSeverityLevelToBlock.ViolentContentSeverity = SeverityLevel.Medium;

// Get text description.
LanguageModelResponse languageModelResponse = await imageDescriptionGenerator.DescribeAsync(inputImage, ImageDescriptionScenario.Caption, filterOptions);
string response = languageModelResponse.Response;

#include <winrt/Microsoft.Graphics.Imaging.h>
#include <winrt/Microsoft.Windows.AI.Imaging.h>
#include <winrt/Microsoft.Windows.AI.ContentSafety.h>
#include <winrt/Microsoft.Windows.AI.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Graphics.Imaging.h> 
#include <winrt/Windows.Storage.Streams.h>
#include <winrt/Windows.Storage.StorageFile.h>

using namespace winrt::Microsoft::Graphics::Imaging; 
using namespace winrt::Microsoft::Windows::AI;
using namespace winrt::Microsoft::Windows::AI::ContentSafety; 
using namespace winrt::Microsoft::Windows::AI::Imaging; 
using namespace winrt::Windows::Foundation; 
using namespace winrt::Windows::Graphics::Imaging;
using namespace winrt::Windows::Storage::Streams;
using namespace winrt::Windows::Storage::StorageFile;    

if (ImageDescriptionGenerator::GetReadyState() == AIFeatureReadyState::NotReady)
{
    auto loadResult = ImageDescriptionGenerator::EnsureReadyAsync().get();

    if (loadResult.Status() != AIFeatureReadyResultState::Success)
    {
        throw winrt::hresult_error(loadResult.ExtendedError());
    }
}

ImageDescriptionGenerator imageDescriptionGenerator = 
    ImageDescriptionGenerator::CreateAsync().get();

// Convert already available softwareBitmap to ImageBuffer.
auto inputBuffer = Microsoft::Graphics::Imaging::ImageBuffer::CreateForSoftwareBitmap(softwareBitmap);

// Create content moderation thresholds object.

ContentFilterOptions contentFilter{};
contentFilter.PromptMaxAllowedSeverityLevel().Violent(SeverityLevel::Medium);
contentFilter.ResponseMaxAllowedSeverityLevel().Violent(SeverityLevel::Medium);

// Get text description.
auto response = imageDescriptionGenerator.DescribeAsync(inputBuffer, ImageDescriptionKind::BriefDescription, contentFilter).get();
string text = response.Description();

Voir aussi