Wprowadzenie do tworzenia obrazów sztucznej inteligencji w zestawie SDK aplikacji systemu Windows
Ważny
Dostępne w najnowszej wersji eksperymentalnego kanału zestawu SDK aplikacji systemu Windows.
Eksperymentalny kanał zestawu SDK aplikacji systemu Windows obejmuje interfejsy API i funkcje we wczesnych etapach programowania. Wszystkie interfejsy API w kanale eksperymentalnym podlegają rozbudowanym poprawkom i zmianom powodujących niezgodność i mogą zostać usunięte z kolejnych wersji w dowolnym momencie. Funkcje eksperymentalne nie są obsługiwane w środowiskach produkcyjnych i aplikacjach, które ich używają, nie mogą być publikowane w sklepie Microsoft Store.
- Funkcje opisu obrazu nie są dostępne w Chinach kontynentalnych.
- Aplikacje samodzielne nie są obsługiwane.
Funkcje tworzenia obrazów są udostępniane przez zestaw SDK aplikacji systemu Windows za pomocą zestawu interfejsów API wspieranych przez sztuczną inteligencję (AI), które obsługują następujące możliwości:
- Super rozdzielczość obrazu: skalowanie i wyostrzanie obrazów
- opis obrazu: tworzenie tekstu opisującego obraz
- Segmentacja obrazów: identyfikowanie obiektów na obrazie
Aby uzyskać szczegółowe informacje o interfejsie API , zobacz dokumentację API dotyczącą funkcji tworzenia obrazów AI w zestawie Windows App SDK.
Aby uzyskać szczegółowe informacje na temat moderowania treści , zobacz Bezpieczeństwo treści z generatywnymi interfejsami API AI.
Napiwek
Prześlij opinię na temat tego interfejsu API i jego funkcji, tworząc nowe zgłoszenie w repozytorium GitHub Windows App SDK (uwzględniając Imaging w tytule) lub odpowiadając na istniejące zgłoszenie.
Warunki wstępne
- PC Copilot+ od Qualcomm, Intel lub AMD.
- Komputery Copilot+ oparte na AMD nie obsługują obecnie Super Rozdzielczości Obrazu.
- Model Arm64EC (przystosowany do emulacji) nie jest obecnie obsługiwany.
- Windows 11 Insider Preview Build 26120.3073 (kanały deweloperskie i beta) lub nowszy musi być zainstalowany na Twoim urządzeniu.
Co mogę zrobić z super-rozdzielczością obrazu?
API superrozdzielczości obrazów w Windows App SDK umożliwiają wyostrzanie i skalowanie obrazów.
Skalowanie jest ograniczone do maksymalnego współczynnika 8x. Wyższe czynniki skalowania mogą wprowadzać artefakty i naruszyć dokładność obrazu. Jeśli ostateczna szerokość lub wysokość jest większa niż 8x ich oryginalnych wartości, zostanie zgłoszony wyjątek.
W poniższym przykładzie pokazano, jak zmienić skalę (targetWidth
, targetHeight
) istniejącego obrazu mapy bitowej oprogramowania (softwareBitmap
) i poprawić ostrość obrazu (aby poprawić ostrość bez skalowania obrazu, po prostu określić istniejącą szerokość i wysokość obrazu) przy użyciu obiektu ImageScaler
.
Upewnij się, że model super rozdzielczości obrazu jest dostępny, wywołując metodę
ImageScaler.IsAvailable
, a następnie czekając, aż metodaImageScaler.MakeAvailableAsync
zakończy się pomyślnie.Po udostępnieniu modelu Super resolution obrazu utwórz obiekt
ImageScaler
, aby się do niego odwoływać.Pobierz wyostrzoną i skalowaną wersję istniejącego obrazu, przekazując istniejący obraz oraz żądaną szerokość i wysokość do modelu przy użyciu metody
ScaleSoftwareBitmap
.
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.Management.Deployment;
using Windows.Graphics.Imaging;
if (!ImageScaler.IsAvailable())
{
var result = await ImageScaler.MakeAvailableAsync();
if (result.Status != PackageDeploymentStatus.CompletedSuccess)
{
throw result.ExtendedError;
}
}
ImageScaler imageScaler = await ImageScaler.CreateAsync();
SoftwareBitmap finalImage = imageScaler.ScaleSoftwareBitmap(softwareBitmap, targetWidth, targetHeight);
#include <winrt/Microsoft.Graphics.Imaging.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Graphics.Imaging.h>
using namespace winrt::Microsoft::Graphics::Imaging;
using namespace winrt::Windows::Foundation;
using namespace winrt::Windows::Graphics::Imaging;
if (!ImageScaler::IsAvailable())
{
winrt::PackageDeploymentResult result = ImageScaler::MakeAvailableAsync().get();
if (result.Status() != PackageDeploymentStatus::CompletedSuccess)
{
throw result.ExtendedError();
}
}
ImageScaler imageScaler = ImageScaler::CreateAsync().get();
SoftwareBitmap finalImage = imageScaler.ScaleSoftwareBitmap(softwareBitmap, targetWidth, targetHeight);
Co mogę zrobić z opisem obrazu?
Ważny
Opis obrazu jest obecnie niedostępny w Chinach kontynentalnych.
Interfejsy API opisu obrazu w zestawie SDK aplikacji systemu Windows umożliwiają generowanie różnych typów opisów tekstu dla obrazu.
Obsługiwane są następujące typy opisów tekstu:
- ułatwienia dostępu — zawiera długi opis ze szczegółami przeznaczonymi dla użytkowników wymagających ułatwień dostępu.
- Caption — zawiera krótki opis odpowiadający podpisowi obrazu. Wartość domyślna, jeśli nie określono żadnej wartości.
- DetailedNarration — zawiera długi opis.
- OfficeCharts — zawiera opis odpowiedni dla wykresów i diagramów.
Ponieważ te interfejsy API używają modeli uczenia maszynowego (ML), sporadyczne błędy mogą wystąpić, gdy tekst nie opisuje poprawnie obrazu. W związku z tym nie zalecamy używania tych interfejsów API dla obrazów w następujących scenariuszach:
- Gdzie obrazy zawierają potencjalnie wrażliwą zawartość i niedokładne opisy mogą być kontrowersyjne, takie jak flagi, mapy, globy, symbole kulturowe lub symbole religijne.
- Dokładne opisy mają krytyczne znaczenie, na przykład w przypadku porad medycznych lub diagnostyki, treści prawnych lub dokumentów finansowych.
Pobieranie opisu tekstu z obrazu
Interfejs API opisu obrazu przyjmuje obraz, żądany typ opisu tekstu (opcjonalnie) oraz poziom moderowania zawartości, który ma zostać użyty (opcjonalnie), aby chronić się przed szkodliwym użyciem.
W poniższym przykładzie pokazano, jak uzyskać opis tekstu dla obrazu.
Notatka
Obraz musi być obiektem ImageBuffer
, ponieważ SoftwareBitmap
nie jest obecnie obsługiwany. W tym przykładzie pokazano, jak przekonwertować SoftwareBitmap
na ImageBuffer
.
Upewnij się, że model super rozdzielczości obrazu jest dostępny, wywołując metodę
ImageDescriptionGenerator.IsAvailable
, a następnie czekając, aż metodaImageDescriptionGenerator.MakeAvailableAsync
zakończy się pomyślnie.Po udostępnieniu modelu Super resolution obrazu utwórz obiekt
ImageDescriptionGenerator
, aby się do niego odwoływać.(Opcjonalnie) Utwórz obiekt
ContentFilterOptions
i określ preferowane wartości. Jeśli zdecydujesz się używać wartości domyślnych, możesz przekazać obiekt o wartości null.Pobierz opis obrazu (
LanguageModelResponse.Response
), wywołując metodęImageDescriptionGenerator.DescribeAsync
z oryginalnym obrazem, opcjonalnym enumem określającym preferowany typ opisu, i obiektemContentFilterOptions
(opcjonalnie).
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.Management.Deployment;
using Microsoft.Windows.AI.Generative;
using Microsoft.Windows.AI.ContentModeration;
using Windows.Storage.StorageFile;
using Windows.Storage.Streams;
using Windows.Graphics.Imaging;
if (!ImageDescriptionGenerator.IsAvailable())
{
var result = await ImageDescriptionGenerator.MakeAvailableAsync();
if (result.Status != PackageDeploymentStatus.CompletedSuccess)
{
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.ContentModeration.h>
#include <winrt/Microsoft.Windows.AI.Generative.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::ContentModeration;
using namespace winrt::Microsoft::Windows::AI::Generative;
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::IsAvailable())
{
winrt::PackageDeploymentResult result = ImageDescriptionGenerator::MakeAvailableAsync().get();
if (result.Status() != PackageDeploymentStatus::CompletedSuccess)
{
throw result.ExtendedError();
}
}
ImageDescriptionGenerator imageDescriptionGenerator = ImageDescriptionGenerator::CreateAsync().get();
// Convert already available softwareBitmap to ImageBuffer.
auto inputBuffer = ImageBuffer::CreateCopyFromBitmap(softwareBitmap);
// Create content moderation thresholds object.
ContentFilterOptions contentFilter{};
contentFilter.PromptMinSeverityLevelToBlock().ViolentContentSeverity(SeverityLevel::Medium);
contentFilter.ResponseMinSeverityLevelToBlock().ViolentContentSeverity(SeverityLevel::Medium);
// Get text description.
LanguageModelResponse languageModelResponse = imageDescriptionGenerator.DescribeAsync(inputImage, ImageDescriptionScenario::Caption, contentFilter).get();
string text = languageModelResponse.Response();
Co mogę zrobić za pomocą segmentacji obrazów?
Segmentacja obrazów może służyć do identyfikowania określonych obiektów na obrazie. Model przyjmuje zarówno obraz, jak i obiekt podpowiedzi i zwraca maskę zidentyfikowanego obiektu.
Wskazówki można przekazać za pomocą dowolnej kombinacji następujących elementów:
- Współrzędne punktów, które należą do tego, co identyfikujesz.
- Współrzędne punktów, które nie należą do tego, co identyfikujesz.
- Prostokąt współrzędnych, który otacza to, co identyfikujesz.
Tym więcej wskazówek, tym bardziej precyzyjny może być model. Postępuj zgodnie z tymi wskazówkami, aby zminimalizować niedokładne wyniki lub błędy.
- Unikaj używania wielu prostokątów we wskazówce, ponieważ mogą one tworzyć niedokładne maski.
- Unikaj używania wyłącznie punktów wykluczania bez dołączania punktów lub prostokąta.
- Nie podawaj więcej niż obsługiwane maksymalnie 32 współrzędne (1 dla punktu, 2 dla prostokąta), ponieważ to spowoduje wystąpienie błędu.
Zwrócona maska jest w formacie skali szarości 8-bitowej, gdzie piksele maski dla zidentyfikowanego obiektu mają wartość 255 (wszystkie inne mają wartość 0).
Identyfikowanie obiektu na obrazie
W poniższych przykładach pokazano sposoby identyfikowania obiektu na obrazie. W przykładach przyjęto założenie, że masz już obiekt mapy bitowej oprogramowania (softwareBitmap
) dla danych wejściowych.
Upewnij się, że model segmentacji obrazów jest dostępny, wywołując metodę
IsAvailable
i czekając na pomyślne zakończenie działania metodyMakeAvailableAsync
.Po udostępnieniu modelu segmentacji obrazów utwórz obiekt
ImageObjectExtractor
, aby się do niego odwoływać.Przekaż obraz do
ImageObjectExtractor.CreateWithSoftwareBitmapAsync
.Utwórz
ImageObjectExtractorHint
obiekt. Inne sposoby tworzenia obiektu wskazówek z różnymi danymi wejściowymi są pokazane później.Prześlij wskazówkę do modelu przy użyciu metody
GetSoftwareBitmapObjectMask
, która zwraca wynik końcowy.
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.Management.Deployment;
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 = 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/Windows.Graphics.Imaging.h>
#include <winrt/Windows.Foundation.h>
using namespace winrt::Microsoft::Graphics::Imaging;
using namespace winrt::Windows::Graphics::Imaging;
using namespace winrt::Windows::Foundation;
if (!ImageObjectExtractor::IsAvailable())
{
winrt::PackageDeploymentResult result = ImageObjectExtractor::MakeAvailableAsync().get();
if (result.Status() != PackageDeploymentStatus::CompletedSuccess)
{
throw result.ExtendedError();
}
}
ImageObjectExtractor imageObjectExtractor = ImageObjectExtractor::CreateWithSoftwareBitmapAsync(softwareBitmap).get();
ImageObjectExtractorHint hint(
{},
{
PointInt32{306, 212},
PointInt32{216, 336}
},
{}
);
SoftwareBitmap finalImage = imageObjectExtractor.GetSoftwareBitmapObjectMask(hint);
Określanie wskazówek z dołączonymi i wykluczonymi punktami
Ten fragment kodu pokazuje, jak używać uwzględnionych i wykluczonych punktów jako wskazówek.
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}
}
);
Określ wskazówki za pomocą prostokąta
Ten fragment kodu pokazuje, jak używać prostokąta (rectInt32 jest X, Y, Width, Height
) jako wskazówkę.
ImageObjectExtractorHint hint(
includeRects:
new List<RectInt32> {new RectInt32(370, 278, 285, 126)},
includePoints: null,
excludePoints: null );
ImageObjectExtractorHint hint(
{
RectInt32{370, 278, 285, 126}
},
{},
{}
);
Odpowiedzialne używanie sztucznej inteligencji
Te interfejsy API do tworzenia obrazów zapewniają deweloperom zaawansowane, godne zaufania modele do budowania aplikacji z bezpiecznym i pewnym działaniem AI. Użyliśmy kombinacji poniższych kroków, aby upewnić się, że te interfejsy API obrazowania są wiarygodne, bezpieczne i tworzone odpowiedzialnie. Zalecamy zapoznanie się z najlepszymi praktykami opisanymi w odpowiedzialnym rozwojem sztucznej inteligencji dla systemu Windows podczas implementowania funkcji sztucznej inteligencji w aplikacji.
- Dokładne testowanie i ocena jakości modelu w celu zidentyfikowania i ograniczenia potencjalnych zagrożeń.
- Sukcesywne wdrażanie eksperymentalnych wersji interfejsu API obrazowania. Po ostatecznej wersji eksperymentalnej wdrożenie zostanie rozwinięte do podpisanych aplikacji, aby upewnić się, że skanowanie złośliwego oprogramowania zostało zastosowane do aplikacji z lokalnymi możliwościami modelu.
- Podaj lokalny model sztucznej inteligencji dla moderowania zawartości, który identyfikuje i filtruje szkodliwą zawartość zarówno w danych wejściowych, jak i wygenerowanych przez sztuczną inteligencję danych wyjściowych wszystkich interfejsów API korzystających z modeli generowania sztucznej inteligencji. Ten lokalny model moderowania zawartości jest oparty na modelu bezpieczeństwa zawartości usługi Azure AI moderowania tekstu i zapewnia podobną wydajność.
Ważny
Nie ma nieosiągalnego systemu bezpieczeństwa zawartości i mogą wystąpić sporadyczne błędy, dlatego zalecamy zintegrowanie dodatkowych narzędzi i praktyk dotyczących odpowiedzialnej sztucznej inteligencji (RAI). Aby uzyskać więcej informacji, zobacz Odpowiedzialne tworzenie sztucznej inteligencji w systemie Windows.
Powiązana zawartość
- opracowywanie odpowiedzialnych aplikacji i funkcji sztucznej inteligencji w systemie Windows
- Referencja API dla funkcji obrazowania wspieranych przez sztuczną inteligencję w zestawie SDK aplikacji Windows
- zestaw SDK aplikacji systemu Windows
- najnowsze informacje o wersji zestawu Sdk aplikacji systemu Windows