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.
Ważne
Opis obrazu jest obecnie niedostępny w Chinach.
Interfejsy API opisu obrazu umożliwiają generowanie różnych typów opisów tekstu dla obrazu.
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>
Typy opisu
Obsługiwane są następujące typy opisów tekstu:
- Krótki — zawiera opis odpowiedni dla wykresów i diagramów.
- Szczegółowe — zawiera długi opis.
- Diagram — zawiera krótki opis odpowiedni dla podpisu obrazu. Wartość domyślna, jeśli nie określono żadnej wartości.
- Dostępne — zawiera długi opis ze szczegółami przeznaczonymi dla użytkowników z potrzebami dotyczącymi ułatwień dostępu.
Ograniczenia
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.
Przykład opisu obrazu
W poniższym przykładzie pokazano, jak uzyskać opis tekstu dla obrazu na podstawie określonego typu opisu (opcjonalnie) i poziomu moderowania zawartości (opcjonalnie).
Uwaga / Notatka
Obraz musi być obiektem ImageBuffer , ponieważ mapa SoftwareBitmap nie jest obecnie obsługiwana (w tym przykładzie pokazano, jak przekonwertować mapę SoftwareBitmap na wartość ImageBuffer).
Upewnij się, że model opisu obrazu jest dostępny, wywołując metodę GetReadyState , a następnie czekając na pomyślne zwrócenie metody EnsureReadyAsync .
Po udostępnieniu modelu opisu 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ę DescribeAsync określając oryginalny obraz, ImageDescriptionKind (opcjonalną wartość preferowanego typu opisu) i obiekt ContentFilterOptions (opcjonalnie).
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.Management.Deployment;
using Microsoft.Windows.AI;
using Microsoft.Windows.AI.ContentModeration;
using Windows.Storage.StorageFile;
using Windows.Storage.Streams;
using Windows.Graphics.Imaging;
if (ImageDescriptionGenerator.GetReadyState() == AIFeatureReadyState.NotReady)
{
var result = await ImageDescriptionGenerator.EnsureReadyAsync();
if (result.Status != AIFeatureReadyResultState.Success)
{
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.Imaging.h>
#include <winrt/Microsoft.Windows.AI.ContentSafety.h>
#include <winrt/Microsoft.Windows.AI.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;
using namespace winrt::Microsoft::Windows::AI::ContentSafety;
using namespace winrt::Microsoft::Windows::AI::Imaging;
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::GetReadyState() == AIFeatureReadyState::NotReady)
{
auto loadResult = ImageDescriptionGenerator::EnsureReadyAsync().get();
if (loadResult.Status() != AIFeatureReadyResultState::Success)
{
throw winrt::hresult_error(loadResult.ExtendedError());
}
}
ImageDescriptionGenerator imageDescriptionGenerator =
ImageDescriptionGenerator::CreateAsync().get();
// Convert already available softwareBitmap to ImageBuffer.
auto inputBuffer = Microsoft::Graphics::Imaging::ImageBuffer::CreateForSoftwareBitmap(softwareBitmap);
// Create content moderation thresholds object.
ContentFilterOptions contentFilter{};
contentFilter.PromptMaxAllowedSeverityLevel().Violent(SeverityLevel::Medium);
contentFilter.ResponseMaxAllowedSeverityLevel().Violent(SeverityLevel::Medium);
// Get text description.
auto response = imageDescriptionGenerator.DescribeAsync(inputBuffer, ImageDescriptionKind::BriefDescription, contentFilter).get();
string text = response.Description();