Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
A Descrição da Imagem está atualmente indisponível na China.
Você pode usar as APIs de Descrição da Imagem para gerar vários tipos de descrições de texto para uma imagem.
Para obter detalhes da API, consulte referência de API para recursos de imagem de IA.
Para obter detalhes de moderação de conteúdo, consulte Segurança de conteúdo com APIs de IA generativas.
Importante
Requisitos de manifesto do pacote: para usar APIs de imagem de IA do Windows, seu aplicativo deve ser empacotado como um pacote MSIX com a systemAIModels funcionalidade declarada em seu Package.appxmanifest. Além disso, verifique se o atributo do manifesto está configurado para uma versão recente do MaxVersionTested Windows (por exemplo, 10.0.26226.0 ou posterior) para suportar adequadamente os recursos de IA do Windows. O uso de valores mais antigos pode causar erros "Não declarados por aplicativo" ao carregar o modelo.
<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>
Tipos de descrição
Há suporte para os seguintes tipos de descrições de texto:
- Resumo – Oferece uma descrição apropriada para gráficos e diagramas.
- Detalhado – Fornece uma descrição longa.
- Diagrama – Fornece uma breve descrição adequada para uma legenda de imagem. O padrão se nenhum valor for especificado.
- Acessível – Fornece uma longa descrição com detalhes destinados aos usuários com necessidades de acessibilidade.
Limitações
Como essas APIs usam modelos de ML (Machine Learning), erros ocasionais podem ocorrer em que o texto não descreve a imagem corretamente. Portanto, não recomendamos o uso dessas APIs para imagens nos seguintes cenários:
- Onde as imagens contêm conteúdo potencialmente confidencial e descrições imprecisas podem ser controversas, como sinalizadores, mapas, globos, símbolos culturais ou símbolos religiosos.
- Quando descrições precisas são críticas, como para orientação médica ou diagnóstico, conteúdo legal ou documentos financeiros.
Exemplo de Descrição da Imagem
O exemplo a seguir mostra como obter uma descrição de texto para uma imagem com base no tipo de descrição especificado (opcional) e no nível de moderação de conteúdo (opcional).
Observação
A imagem deve ser um objeto ImageBuffer , pois o SoftwareBitmap não tem suporte no momento (este exemplo demonstra como converter SoftwareBitmap em ImageBuffer).
Verifique se o modelo de Descrição da Imagem está disponível chamando o método GetReadyState e aguardando o método EnsureReadyAsync retornar com êxito.
Depois que o modelo de Descrição da Imagem estiver disponível, crie um objeto ImageDescriptionGenerator para referenciá-lo.
(Opcional) Crie um objeto ContentFilterOptions e especifique seus valores preferenciais. Se você optar por usar valores padrão, poderá passar um objeto nulo.
Obtenha a descrição da imagem (LanguageModelResponse.Response) chamando o método DescribeAsync especificando a imagem original, o ImageDescriptionKind (um valor opcional para o tipo de descrição preferencial) e o objeto ContentFilterOptions (opcional).
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();