Compartir a través de


Descripción de la imagen

Importante

La descripción de la imagen no está disponible actualmente en China.

Las API de descripción de imágenes proporcionan la capacidad de generar varios tipos de descripciones de texto para una imagen.

Para más información sobre la API, consulte API ref for AI imaging features (Referencia de API para características de creación de imágenes de IA).

Para obtener detalles sobre la moderación de contenido, consulte la seguridad de contenido con APIs de IA generativa.

Importante

Requisitos del manifiesto de paquete: para usar las API de creación de imágenes de IA de Windows, la aplicación debe empaquetarse como un paquete MSIX con la systemAIModels funcionalidad declarada en Package.appxmanifest. Además, asegúrese de que el atributo del MaxVersionTested manifiesto esté establecido en una versión reciente de Windows (por ejemplo, 10.0.26226.0 o posterior) para admitir correctamente las características de Windows AI. El uso de valores anteriores puede provocar errores "No declarados por la aplicación" al cargar el modelo.

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

Tipos de descripción

Se admiten los siguientes tipos de descripciones de texto:

  • Breve : proporciona una descripción adecuada para gráficos y diagramas.
  • Detallado : proporciona una descripción larga.
  • Diagrama : proporciona una breve descripción adecuada para un título de imagen. Valor predeterminado si no se especifica ningún valor.
  • Accesible: proporciona una descripción larga con detalles diseñados para los usuarios con necesidades de accesibilidad.

Limitaciones

Dado que estas API usan modelos de Machine Learning (ML), pueden producirse errores ocasionales en los que el texto no describe correctamente la imagen. Por lo tanto, no se recomienda usar estas API para imágenes en los escenarios siguientes:

  • Donde las imágenes contienen contenido potencialmente confidencial y descripciones inexactas podrían ser controvertidas, como banderas, mapas, globos, símbolos culturales o símbolos religiosos.
  • Cuando las descripciones precisas son críticas, como para asesoramiento médico o diagnóstico, contenido legal o documentos financieros.

Ejemplo de descripción de imagen

En el ejemplo siguiente se muestra cómo obtener una descripción de texto para una imagen en función del tipo de descripción especificado (opcional) y el nivel de moderación de contenido (opcional).

Nota:

La imagen debe ser un objeto ImageBuffer , ya que SoftwareBitmap no se admite actualmente (en este ejemplo se muestra cómo convertir SoftwareBitmap a ImageBuffer).

  1. Asegúrese de que el modelo de descripción de imagen está disponible llamando al método GetReadyState y, a continuación, esperando a que el método EnsureReadyAsync se devuelva correctamente.

  2. Una vez disponible el modelo de descripción de imagen, cree un objeto ImageDescriptionGenerator para hacer referencia a él.

  3. (Opcional) Cree un objeto ContentFilterOptions y especifique los valores preferidos. Si decide usar valores predeterminados, puede pasar un objeto NULL.

  4. Obtenga la descripción de la imagen (LanguageModelResponse.Response) mediante una llamada al método DescribeAsync que especifica la imagen original, ImageDescriptionKind (un valor opcional para el tipo de descripción preferido) y el objeto ContentFilterOptions (opcional).

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

Consulte también