Introducción a la creación de imágenes de IA en el SDK de Aplicaciones para Windows
Importante
Esta característica aún no está disponible. Se espera que se envíe en una próxima versión experimental del canal de la SDK de Aplicaciones para Windows.
El canal experimental del SDK de Aplicaciones para Windows incluye API y características que se encuentran en las primeras fases del desarrollo. Todas las API del canal experimental están sujetas a revisiones exhaustivas y cambios importantes y se pueden eliminar de versiones posteriores en cualquier momento. No son compatibles para el uso en entornos de producción, y las aplicaciones que utilizan las características experimentales no se pueden publicar en Microsoft Store.
Las características de creación de imágenes serán compatibles con el SDK de Aplicaciones para Windows a través de un conjunto de API respaldadas por inteligencia artificial (IA) que pueden escalar y afilar imágenes (super resolución de imágenes), así como identificar objetos dentro de una imagen (segmentación de imágenes).
Para obtener más información sobre la API, consulte API ref for AI-backing imaging features in the SDK de Aplicaciones para Windows (Referencia de API para las características de creación de imágenes respaldadas por IA en la SDK de Aplicaciones para Windows).
Sugerencia
Proporcione comentarios sobre estas API y su funcionalidad mediante la creación de un nuevo problema en el repositorio de GitHub de SDK de Aplicaciones para Windows. (Asegúrese de incluir imágenes en el título).
Requisitos previos
- Equipos CoPilot+
Nota:
Los equipos CoPilot+ basados en AMD no admiten la super resolución de imágenes.
¿Qué puedo hacer con la SDK de Aplicaciones para Windows y la super resolución de imágenes?
Use las nuevas características de super resolución de imágenes de IA en la SDK de Aplicaciones para Windows para afilar imágenes y afilar imágenes al escalarlas.
Nota:
El escalado se ajusta a un factor máximo de 8x (los factores de escala más altos pueden introducir artefactos y poner en peligro la precisión de la imagen). Si el ancho final o alto es mayor que 8 veces sus valores originales, se producirá una excepción.
Aumento de la nitidez de una imagen
En este ejemplo se muestra cómo cambiar la escala (targetWidth
, targetHeight
) de una imagen de mapa de bits de software existente () y mejorar su nitidez (softwareBitmap
si desea mejorar la nitidez sin escalar la imagen, especifique el ancho y el alto de la imagen original).
- En primer lugar, nos aseguramos de que el modelo de super resolución de imágenes esté disponible llamando al método IsAvailable y esperando a que el método MakeAvailableAsync se devuelva correctamente.
- Una vez que el modelo de super resolución de imágenes está disponible, creamos un objeto para hacer referencia a él.
- A continuación, obtenemos la imagen final mediante el envío de la imagen original y el ancho y alto de destino de la imagen final al modelo mediante el método ScaleSoftwareBitmap.
using Microsft.Windows.Imaging;
using Windows.Graphics.Imaging;
if (!ImageScaler.IsAvailable())
{
var result = ImageScaler.MakeAvailableAsync();
if (result.Status != PackageDeploymentStatus.CompletedSuccess)
{
throw result.ExtendedError;
}
}
var imageScaler = await ImageScaler.CreateAsync();
var finalImage = imageScaler.ScaleSoftwareBitmap(softwareBitmap, targetWidth, targetHeight);
#include "winrt/Microsoft.Graphics.Imaging.h"
#include "winrt/Windows.Graphics.Imaging.h"
using namespace winrt::Windows::Graphics::Imaging;
using namespace winrt::Microsoft::Graphics::Imaging;
if (!ImageScaler::IsAvailable())
{
auto result = ImageScaler::MakeAvailableAsync();
if (result.Status() != AsyncStatus::Completed)
{
throw result.ErrorCode();
}
}
ImageScaler imageScaler = ImageScaler::CreateAsync().get();
ImageBuffer buffer = imageScaler.ScaleSoftwareBitmap(softwareBitmap, targetWidth, targetHeight);
¿Qué puedo hacer con el SDK de Aplicaciones para Windows y la segmentación de imágenes?
La segmentación de imágenes se puede usar para identificar objetos específicos en una imagen. El modelo toma una imagen y un objeto "hints" y devuelve una máscara del objeto identificado.
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 de 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. Sin embargo, siga estas instrucciones de sugerencia para evitar errores o resultados 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. Los píxeles del objeto identificado dentro de la máscara son 255 (el resto son 0 sin píxeles que contengan ningún valor entre sí).
Identificación de un objeto dentro de una imagen
En los ejemplos siguientes se muestran las distintas formas de identificar un objeto dentro de una imagen. Se supone que ya tiene un objeto de mapa de bits de software (softwareBitmap
) para la entrada.
- En primer lugar, nos aseguramos de que el modelo de segmentación de imágenes esté disponible llamando al método IsAvailable y esperando a que el método MakeAvailableAsync se devuelva correctamente.
- Una vez disponible el modelo de segmentación de imágenes, creamos un objeto para hacer referencia a él.
- A continuación, creamos una clase ImageObjectExtractor pasando la imagen a ImageObjectExtractor.CreateWithImageBufferAsync (o CreateWithSoftwareBitmapAsync según el tipo de imagen).
- A continuación, crearemos un objeto ImageObjectExtractorHint (mostramos otras formas de crear un objeto de sugerencia con entradas diferentes más adelante en este tema).
- Por último, se envía la sugerencia al modelo mediante el método GetSoftwareBitmapObjectMask, que devuelve el resultado final.
using Microsft.Windows.Imaging;
using Windows.Graphics.Imaging;
if (!ImageObjectExtractor.IsAvailable())
{
var result = await ImageObjectExtractor.MakeAvailableAsync();
if (result.Status != PackageDeploymentStatus.CompletedSuccess)
{
throw result.ExtendedError;
}
}
ImageObjectExtractor imageObjectExtractor =
await ImageObjectExtractor.CreateWithSoftwareBitmapAsync(softwareBitmap);
ImageObjectExtractorHint hint(
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/Windows.Graphics.Imaging.h"
using namespace winrt::Windows::Graphics::Imaging;
using namespace winrt::Microsoft::Graphics::Imaging;
if (!ImageObjectExtractor::IsAvailable())
{
auto result = ImageObjectExtractor::MakeAvailableAsync();
if (result.Status() != AsyncStatus::Completed)
{
throw result.ErrorCode();
}
}
ImageObjectExtractor imageObjectExtractor =
ImageObjectExtractor::CreateWithSoftwareBitmapAsync(softwareBitmap).get();
ImageObjectExtractorHint hint(
{},
{
PointInt32{306, 212},
PointInt32{216, 336}
},
{}
);
SoftwareBitmap finalImage = imageObjectExtractor.GetSoftwareBitmapObjectMask(hint);
Especificar sugerencias con puntos incluidos y excluidos
En este fragmento de código, se 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
En este fragmento de código, se 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}
},
{},
{}
);
Recursos adicionales
Contenido relacionado
- Desarrollar Características y Aplicaciones Responsables de IA Generativa en Windows
- Referencia de API para las características de creación de imágenes respaldadas por IA en la SDK de Aplicaciones para Windows
- SDK para aplicaciones de Windows
- Notas de la versión más reciente para el SDK de Aplicaciones para Windows