Delen via


Beschrijving van afbeelding

Belangrijk

Afbeeldingsbeschrijving is momenteel niet beschikbaar in China.

De BESCHRIJVINGs-API's voor afbeeldingen bieden de mogelijkheid om verschillende typen tekstbeschrijvingen voor een afbeelding te genereren.

Voor API-details, zie API-referentie voor AI-imagingfuncties.

Zie Inhoudsveiligheid met generatieve AI-API's voor meer informatie over inhoudsbeheer.

Belangrijk

Vereisten voor pakketmanifest: Als u Windows AI imaging-API's wilt gebruiken, moet uw app worden verpakt als een MSIX-pakket met de systemAIModels mogelijkheid die is gedeclareerd in uw Package.appxmanifest. Zorg er bovendien voor dat het kenmerk van MaxVersionTested uw manifest is ingesteld op een recente Windows-versie (bijvoorbeeld 10.0.26226.0 of hoger) om de Windows AI-functies goed te ondersteunen. Het gebruik van oudere waarden kan fouten veroorzaken die niet door app zijn gedeclareerd bij het laden van het model.

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

Beschrijvingstypen

De volgende typen tekstbeschrijvingen worden ondersteund:

  • Kort - Biedt een beschrijving die geschikt is voor grafieken en diagrammen.
  • Gedetailleerd : biedt een lange beschrijving.
  • Diagram : biedt een korte beschrijving die geschikt is voor een bijschrift bij een afbeelding. De standaardwaarde als er geen waarde is opgegeven.
  • Toegankelijk : biedt een lange beschrijving met details die zijn bedoeld voor gebruikers met toegankelijkheidsbehoeften.

Beperkingen

Omdat deze API's machine learning-modellen (ML) gebruiken, kunnen er af en toe fouten optreden waarbij de tekst de afbeelding niet correct beschrijft. Daarom raden we het gebruik van deze API's niet aan voor afbeeldingen in de volgende scenario's:

  • Wanneer de afbeeldingen mogelijk gevoelige inhoud en onjuiste beschrijvingen bevatten, kunnen controversieel zijn, zoals vlaggen, kaarten, wereldbollen, culturele symbolen of religieuze symbolen.
  • Wanneer nauwkeurige beschrijvingen kritiek zijn, zoals voor medisch advies of diagnose, juridische inhoud of financiĆ«le documenten.

Voorbeeld van afbeeldingsbeschrijving

In het volgende voorbeeld ziet u hoe u een tekstbeschrijving voor een afbeelding kunt ophalen op basis van het opgegeven beschrijvingstype (optioneel) en het niveau van inhoudsbeheer (optioneel).

Opmerking

De afbeelding moet een ImageBuffer-object zijn omdat SoftwareBitmap momenteel niet wordt ondersteund (in dit voorbeeld ziet u hoe u SoftwareBitmap converteert naar ImageBuffer).

  1. Zorg ervoor dat het afbeeldingsbeschrijvingsmodel beschikbaar is door de methode GetReadyState aan te roepen en vervolgens te wachten tot de methode EnsureReadyAsync met succes is voltooid.

  2. Zodra het afbeeldingsbeschrijvingsmodel beschikbaar is, maakt u een ImageDescriptionGenerator-object om ernaar te verwijzen.

  3. (Optioneel) Maak een ContentFilterOptions-object en geef de gewenste waarden op. Als u ervoor kiest om standaardwaarden te gebruiken, kunt u een null-object doorgeven.

  4. Haal de beschrijving van de afbeelding op (LanguageModelResponse.Response) door de DescribeAsync-methode aan te roepen, waarbij u de oorspronkelijke afbeelding, de ImageDescriptionKind (een optionele waarde voor het gewenste beschrijvingstype), en het contentFilterOptions-object (optioneel) specificeert.

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

Zie ook