Introduzione all'imaging di intelligenza artificiale nel SDK per app di Windows
Articolo
Importante
Questa funzionalità non è ancora disponibile. È previsto che venga fornito in una prossima versione sperimentale del canale di SDK per app di Windows.
Il canale sperimentale SDK per app di Windows include API e funzionalità nelle fasi iniziali dello sviluppo. Tutte le API nel canale sperimentale sono soggette a revisioni estese e modifiche di rilievo e possono essere rimosse dalle versioni successive in qualsiasi momento. Non sono supportate per l'uso in ambienti di produzione e le app che usano funzionalità sperimentali non possono essere pubblicate in Microsoft Store.
Le funzionalità di creazione dell'immagine saranno supportate dal SDK per app di Windows tramite un set di API basate sull'intelligenza artificiale (AI) supportate sia per la scalabilità che per la nitidezza delle immagini (risoluzione con super risoluzione immagini) e per identificare gli oggetti all'interno di un'immagine (segmentazione di immagini).
Fornire commenti e suggerimenti su queste API e sulle relative funzionalità creando un nuovo problema nel repository GitHub SDK per app di Windows. (Assicurarsi di includere Imaging nel titolo!)
I PC CoPilot+ basati su AMD non supportano la risoluzione super-immagine.
Cosa è possibile fare con la risoluzione SDK per app di Windows e risoluzione con super risoluzione immagini?
Usare le nuove funzionalità di risoluzione superiore delle immagini di intelligenza artificiale nelle SDK per app di Windows per affinare le immagini e affinare le immagini durante il ridimensionamento.
Nota
Il ridimensionamento viene ridimensionato fino a un fattore massimo di 8 volte (i fattori di scala superiore possono introdurre artefatti e compromettere l'accuratezza dell'immagine). Se la larghezza finale o l'altezza è maggiore di 8 volte i valori originali, verrà generata un'eccezione.
Aumentare la nitidezza di un'immagine
Questo esempio mostra come modificare la scala (, targetWidth) di un'immagine bitmap software esistente (targetHeightsoftwareBitmap) e migliorarne la nitidezza (se si vuole migliorare la nitidezza senza ridimensionare l'immagine, specificare la larghezza e l'altezza dell'immagine originale).
Prima di tutto, si garantisce che il modello image super resolution sia disponibile chiamando il metodo IsAvailable e attendendo che il metodo MakeAvailableAsync venga restituito correttamente.
Dopo aver reso disponibile il modello image super resolution, viene creato un oggetto per farvi riferimento.
Si ottiene quindi l'immagine finale inviando l'immagine originale e la larghezza e l'altezza dell'immagine finale al modello usando il metodo 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);
Cosa posso fare con la segmentazione di SDK per app di Windows e immagine?
La segmentazione dell'immagine può essere usata per identificare oggetti specifici in un'immagine. Il modello accetta sia un'immagine che un oggetto "hint" e restituisce una maschera dell'oggetto identificato.
Gli hint possono essere forniti tramite qualsiasi combinazione dei seguenti elementi:
Coordinate per i punti che appartengono a ciò che si sta identificando.
Coordinate per i punti che non appartengono a ciò che si sta identificando.
Rettangolo di coordinate che racchiude ciò che si sta identificando.
Maggiore è il numero di suggerimenti forniti, maggiore è la precisione del modello. Tuttavia, seguire queste linee guida per evitare risultati o errori non accurati.
Evitare di usare più rettangoli in un suggerimento perché possono produrre una maschera imprecisa.
Evitare di usare punti di esclusione esclusivamente senza includere punti o un rettangolo.
Non specificare più del massimo supportato di 32 coordinate (1 per un punto, 2 per un rettangolo) perché verrà restituito un errore.
La maschera restituita è in formato grigioscale-8. I pixel dell'oggetto identificato all'interno della maschera sono 255 (il resto è 0 senza pixel che contengano alcun valore tra).
Identificare un oggetto all'interno di un'immagine
Gli esempi seguenti illustrano i vari modi in cui è possibile identificare un oggetto all'interno di un'immagine. Si supponga di avere già un oggetto bitmap software (softwareBitmap) per l'input.
Prima di tutto, assicurarsi che il modello di segmentazione dell'immagine sia disponibile chiamando il metodo IsAvailable e attendendo che il metodo MakeAvailableAsync restituisca correttamente.
Quando il modello di segmentazione immagine è disponibile, viene creato un oggetto per farvi riferimento.
Successivamente, creiamo una classe ImageObjectExtractor passando l'immagine a ImageObjectExtractor.CreateWithImageBufferAsync (o CreateWithSoftwareBitmapAsync a seconda del tipo di immagine).
Verrà quindi creato un oggetto ImageObjectExtractorHint (verranno illustrati altri modi per creare un oggetto hint con input diversi più avanti in questo argomento).
Infine, si invia l'hint al modello usando il metodo GetSoftwareBitmapObjectMask, che restituisce il risultato finale.
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);
Specificare hint con punti inclusi ed esclusi
In questo frammento di codice viene illustrato come usare punti inclusi ed esclusi come hint.
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) });
Scoprire i generatori di immagini basati su intelligenza artificiale. Informazioni sugli strumenti di creazione di immagini come Microsoft Image Creator. Comprendere le potenziali applicazioni nei contesti lavorativi e didattici e individuare le procedure consigliate per ottenere risultati ottimali. Migliorare le competenze e trasformare il processo creativo con generatori di immagini basati su intelligenza artificiale.