Condividi tramite


Descrizione immagine

Importante

La descrizione dell'immagine non è attualmente disponibile in Cina.

È possibile usare le API Descrizione immagine per generare vari tipi di descrizioni di testo per un'immagine.

Per informazioni dettagliate sull'API, vedere Riferimento API per le funzionalità di creazione dell'immagine di intelligenza artificiale.

Per informazioni dettagliate sulla moderazione dei contenuti, vedere Sicurezza dei contenuti con API di intelligenza artificiale generative.

Importante

Requisiti del manifesto del pacchetto: per usare le API di creazione dell'immagine di Intelligenza artificiale di Windows, l'app deve essere inserita in un pacchetto MSIX con la systemAIModels funzionalità dichiarata in Package.appxmanifest. Assicurarsi inoltre che l'attributo del MaxVersionTested manifesto sia impostato su una versione di Windows recente (ad esempio, 10.0.26226.0 o versioni successive) per supportare correttamente le funzionalità di Intelligenza artificiale Windows. L'uso di valori meno recenti può causare errori "Non dichiarati dall'app" durante il caricamento del modello.

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

Tipi di descrizione

Sono supportati i tipi di descrizioni di testo seguenti:

  • Descrizione sintetica: offre un riassunto adatto per grafici e diagrammi.
  • Dettagliato : fornisce una descrizione lunga.
  • Diagramma : fornisce una breve descrizione adatta per una didascalia dell'immagine. Valore predefinito se non viene specificato alcun valore.
  • Accessibile : fornisce una descrizione lunga con i dettagli destinati agli utenti con esigenze di accessibilità.

Limitazioni

Poiché queste API usano modelli di Machine Learning (ML), possono verificarsi errori occasionali in cui il testo non descrive correttamente l'immagine. Pertanto, non è consigliabile usare queste API per le immagini negli scenari seguenti:

  • Dove le immagini contengono contenuti potenzialmente sensibili e descrizioni imprecise potrebbero essere controverse, ad esempio bandiere, mappe, globo, simboli culturali o simboli religiosi.
  • Quando le descrizioni accurate sono critiche, ad esempio per consulenza medica o diagnosi, contenuto legale o documenti finanziari.

Esempio di Descrizione immagine

Nell'esempio seguente viene illustrato come ottenere una descrizione di testo per un'immagine in base al tipo di descrizione specificato (facoltativo) e al livello di moderazione del contenuto (facoltativo).

Annotazioni

L'immagine deve essere un oggetto ImageBuffer perché SoftwareBitmap non è attualmente supportato (in questo esempio viene illustrato come convertire SoftwareBitmap in ImageBuffer).

  1. Verificare che il modello Image Description sia disponibile chiamando il metodo GetReadyState e quindi attendendo che il metodo EnsureReadyAsync restituisca correttamente.

  2. Quando il modello Image Description è disponibile, creare un oggetto ImageDescriptionGenerator per farvi riferimento.

  3. (Facoltativo) Creare un oggetto ContentFilterOptions e specificare i valori preferiti. Se si sceglie di usare i valori predefiniti, è possibile passare un oggetto Null.

  4. Ottenere la descrizione dell'immagine (LanguageModelResponse.Response) chiamando il metodo DescribeAsync che specifica l'immagine originale, ImageDescriptionKind (un valore facoltativo per il tipo di descrizione preferito) e l'oggetto ContentFilterOptions (facoltativo).

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

Vedere anche