Compartir a través de


Extractor de objetos de imagen

El Extractor de objetos de imagen se puede usar para identificar objetos específicos en una imagen. El modelo toma tanto una imagen como un objeto de "pistas" y devuelve una máscara del objeto identificado.

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>

Proporcionar sugerencias

Las sugerencias se pueden proporcionar a través de cualquier combinación de lo siguiente:

  • Coordenadas para los puntos que pertenecen a lo que está identificando.
  • Coordenadas para los puntos que no pertenecen a lo que está identificando.
  • Rectángulo de coordenadas que incluye lo que está identificando.

Cuantos más sugerencias proporcione, más precisa puede ser el modelo. Siga estas instrucciones de sugerencia para minimizar los resultados o errores inexactos.

  • Evite usar varios rectángulos en una sugerencia, ya que pueden producir una máscara inexacta.
  • Evite usar puntos de exclusión exclusivamente sin incluir puntos ni un rectángulo.
  • No especifique más que el máximo admitido de 32 coordenadas (1 para un punto, 2 para un rectángulo), ya que devolverá un error.

La máscara devuelta está en formato de escala gris-8 con los píxeles de la máscara para el objeto identificado que tiene un valor de 255 (todos los demás tienen un valor de 0).

Ejemplo del extractor de objetos de imagen

En los ejemplos siguientes se muestran formas de identificar un objeto dentro de una imagen. En los ejemplos se asume que ya dispones de un objeto de mapa de bits de software (softwareBitmap) para la entrada.

  1. Asegúrese de que el modelo extractor de objetos de imagen está disponible llamando al método GetReadyState y esperando a que el método EnsureReadyAsync se devuelva correctamente.

  2. Una vez disponible el modelo extractor de objetos de imagen, cree un objeto ImageObjectExtractor para hacer referencia a él.

  3. Pase la imagen a CreateWithSoftwareBitmapAsync.

  4. Cree un objeto ImageObjectExtractorHint . Otras formas de crear un objeto de sugerencia con entradas diferentes se muestran más adelante.

  5. Envíe la sugerencia al modelo mediante el método GetSoftwareBitmapObjectMask , que devuelve el resultado final.

using Microsoft.Graphics.Imaging;
using Microsoft.Windows.AI;
using Microsoft.Windows.Management.Deployment;
using Windows.Graphics.Imaging;

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

ImageObjectExtractor imageObjectExtractor = await ImageObjectExtractor.CreateWithSoftwareBitmapAsync(softwareBitmap);

ImageObjectExtractorHint hint = new ImageObjectExtractorHint{
    includeRects: null, 
    includePoints:
        new List<PointInt32> { new PointInt32(306, 212),
                               new PointInt32(216, 336)},
    excludePoints: null};
SoftwareBitmap finalImage = imageObjectExtractor.GetSoftwareBitmapObjectMask(hint);
#include <winrt/Microsoft.Graphics.Imaging.h> 
#include <winrt/Microsoft.Windows.AI.Imaging.h>
#include <winrt/Windows.Graphics.Imaging.h>
#include <winrt/Windows.Foundation.h>
using namespace winrt::Microsoft::Graphics::Imaging; 
using namespace winrt::Microsoft::Windows::AI.Imaging;
using namespace winrt::Windows::Graphics::Imaging; 
using namespace winrt::Windows::Foundation;

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

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

ImageObjectExtractor imageObjectExtractor = ImageObjectExtractor::CreateWithSoftwareBitmapAsync(softwareBitmap).get();

ImageObjectExtractorHint hint(
    {},
    {
        Windows::Graphics::PointInt32{306, 212},        
        Windows::Graphics::PointInt32{216, 336}
    },
    {}
);

Windows::Graphics::Imaging::SoftwareBitmap finalImage = imageObjectExtractor.GetSoftwareBitmapObjectMask(hint);

Especificar sugerencias con puntos incluidos y excluidos

Este fragmento de código muestra cómo usar puntos incluidos y excluidos como sugerencias.

ImageObjectExtractorHint hint(
    includeRects: null,
    includePoints: 
        new List<PointInt32> { new PointInt32(150, 90), 
                               new PointInt32(216, 336), 
                               new PointInt32(550, 330)},
    excludePoints: 
        new List<PointInt32> { new PointInt32(306, 212) });
ImageObjectExtractorHint hint(
    {}, 
    { 
        PointInt32{150, 90}, 
        PointInt32{216, 336}, 
        PointInt32{550, 330}
    },
    { 
        PointInt32{306, 212}
    }
);

Especificar sugerencias con rectángulo

Este fragmento de código muestra cómo usar un rectángulo (RectInt32 es X, Y, Width, Height) como sugerencia.

ImageObjectExtractorHint hint(
    includeRects: 
        new List<RectInt32> {new RectInt32(370, 278, 285, 126)},
    includePoints: null,
    excludePoints: null ); 
ImageObjectExtractorHint hint(
    { 
        RectInt32{370, 278, 285, 126}
    }, 
    {},
    {}
);

Consulte también