Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Důležité
Popis obrázku je momentálně nedostupný v Číně.
Rozhraní API popisu obrázku můžete použít k vygenerování různých typů textových popisů obrázku.
Podrobnosti o rozhraní API najdete v tématu Referenční informace k rozhraní API pro funkce vytváření obrázků AI.
Podrobnosti o moderování obsahu najdete v tématu Zabezpečení obsahu pomocí rozhraní API pro generování AI.
Důležité
Požadavky manifestu balíčku: Aby bylo možné používat rozhraní API Windows AI pro zpracování obrazu, musí být vaše aplikace zabalená jako balíček MSIX s deklarovanou systemAIModels možností ve vašem Package.appxmanifest manifestu. Kromě toho se ujistěte, že je atribut manifestu MaxVersionTested nastavený na nejnovější verzi Windows (např 10.0.26226.0 . nebo novější), aby správně podporoval funkce AI systému Windows. Použití starších hodnot může při načítání modelu způsobit chyby "Není deklarováno aplikací".
<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 popisů
Podporují se následující typy textových popisů:
- Stručný – poskytuje popis vhodný pro grafy a diagramy.
- Podrobné – poskytuje dlouhý popis.
- Diagram – poskytuje krátký popis vhodný pro titulek obrázku. Výchozí hodnota, pokud není zadána žádná hodnota.
- Přístupnost – poskytuje dlouhý popis s podrobnostmi určenými pro uživatele s potřebami přístupnosti.
Omezení
Vzhledem k tomu, že tato rozhraní API používají modely strojového učení (ML), mohou občas dojít k chybám, kdy text nepopisuje obrázek správně. Proto nedoporučujeme používat tato rozhraní API pro obrázky v následujících scénářích:
- Pokud obrázky obsahují potenciálně citlivý obsah a nepřesné popisy, mohou být problematické, jako jsou vlajky, mapy, glóbusy, kulturní symboly nebo náboženské symboly.
- Pokud jsou přesné popisy kritické, například pro lékařské poradenství nebo diagnostiku, právní obsah nebo finanční dokumenty.
Příklad popisu obrázku
Následující příklad ukazuje, jak získat textový popis obrázku na základě zadaného typu popisu (volitelné) a úrovně moderování obsahu (volitelné).
Poznámka:
Image musí být objekt ImageBuffer , protože SoftwareBitmap není aktuálně podporován (tento příklad ukazuje, jak převést SoftwareBitmap na ImageBuffer).
Ujistěte se, že je model popisu obrázku k dispozici voláním metody GetReadyState a potom počkejte, až se úspěšně dokončí metoda EnsureReadyAsync.
Jakmile je model Popis obrázku k dispozici, vytvořte objekt ImageDescriptionGenerator , který na něj odkazuje.
(Volitelné) Vytvořte objekt ContentFilterOptions a zadejte preferované hodnoty. Pokud se rozhodnete použít výchozí hodnoty, můžete předat objekt null.
Získejte popis obrázku (LanguageModelResponse.Response) voláním metody DescribeAsync určující původní image , ImageDescriptionKind (volitelná hodnota pro upřednostňovaný typ popisu) a ContentFilterOptions objekt (volitelné).
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();