Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Za pomocą programu Image Object Extractor można zidentyfikować określone obiekty na obrazie. Model przyjmuje zarówno obraz, jak i obiekt podpowiedzi i zwraca maskę zidentyfikowanego obiektu.
Aby uzyskać szczegółowe informacje o interfejsie API, zobacz dokumentację interfejsu API dotyczącą funkcji przetwarzania obrazów AI.
Aby uzyskać szczegółowe informacje na temat moderowania zawartości, zobacz Bezpieczeństwo zawartości za pomocą interfejsów API generowania sztucznej inteligencji.
Ważne
Wymagania manifestu pakietu: aby korzystać z interfejsów API tworzenia obrazów sztucznej inteligencji systemu Windows, aplikacja musi być spakowana jako pakiet MSIX z funkcją systemAIModels zadeklarowaną w pliku Package.appxmanifest. Ponadto upewnij się, że atrybut manifestu MaxVersionTested jest ustawiony na najnowszą wersję systemu Windows (np 10.0.26226.0 . lub nowszą), aby prawidłowo obsługiwać funkcje sztucznej inteligencji systemu Windows. Użycie starszych wartości może spowodować błędy "Nie zadeklarowane przez aplikację" podczas ładowania modelu.
<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>
Podawanie wskazówek
Wskazówki można podać 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 ma format greyscale-8 z pikselami maski dla zidentyfikowanego obiektu o wartości 255 (wszystkie inne mają wartość 0).
Przykład wyodrębniania obiektów obrazu
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 wyodrębniania obiektów obrazu jest dostępny, wywołując metodę GetReadyState i czekając na pomyślne zwrócenie metody EnsureReadyAsync .
Po udostępnieniu modelu wyodrębniania obiektów obrazu utwórz obiekt ImageObjectExtractor w celu odwołania się do niego.
Przekaż obraz do CreateWithSoftwareBitmapAsync.
Utwórz obiekt ImageObjectExtractorHint . 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.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);
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}
},
{},
{}
);