Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Описание изображения в настоящее время недоступно в Китае.
API описания изображения можно использовать для создания различных типов текстовых описаний для изображения.
Дополнительные сведения об API см. в справочнике по API для функций создания образов искусственного интеллекта.
Сведения о модерации содержимого см. в разделе "Безопасность содержимого" с помощью api создания искусственного интеллекта.
Это важно
Требования к манифесту пакета: Чтобы использовать API создания изображений Windows AI, ваше приложение должно быть упаковано в формате пакета MSIX с systemAIModels возможностью, объявленной в Package.appxmanifest. Кроме того, убедитесь, что атрибут манифеста MaxVersionTested установлен на актуальную версию Windows (например, 10.0.26226.0 или более позднюю), чтобы правильно поддерживать функции ИИ Windows. Использование старых значений может привести к ошибкам "Не объявленные приложением" при загрузке модели.
<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>
Типы описания
Поддерживаются следующие типы текстовых описаний:
- Краткое описание , подходящее для диаграмм и схем.
- Подробное описание: предоставляет развернутое описание.
- Схема — предоставляет краткое описание, подходящее для заголовка изображения. Значение по умолчанию, если значение не указано.
- Доступно . Предоставляет длинное описание с подробными сведениями, предназначенными для пользователей с потребностями специальных возможностей.
Ограничения
Так как эти API используют модели машинного обучения, иногда могут возникать ошибки, в которых текст не описывает изображение правильно. Поэтому мы не рекомендуем использовать эти API для образов в следующих сценариях:
- Где изображения содержат потенциально конфиденциальное содержимое и неточные описания могут быть спорными, такими как флаги, карты, глобусы, культурные символы или религиозные символы.
- Если точные описания являются критически важными, например для медицинских консультаций или диагностики, юридического содержимого или финансовых документов.
Пример описания изображения
В следующем примере показано, как получить текстовое описание изображения на основе указанного типа описания (необязательно) и уровня модерации содержимого (необязательно).
Замечание
Изображение должно быть объектом ImageBuffer , так как SoftwareBitmap в настоящее время не поддерживается (в этом примере показано, как преобразовать SoftwareBitmap в ImageBuffer).
Убедитесь, что модель описания изображения доступна, вызвав метод GetReadyState , а затем дождитесь успешного возврата метода EnsureReadyAsync .
После того как модель описания изображений будет доступна, создайте объект ImageDescriptionGenerator , чтобы ссылаться на него.
(Необязательно) Создайте объект ContentFilterOptions и укажите предпочитаемые значения. Если вы решили использовать значения по умолчанию, можно передать null-объект.
Получите описание изображения (LanguageModelResponse.Response), вызвав метод DescriptionAsync , указывающий исходный образ, ImageDescriptionKind (необязательное значение для предпочтительного типа описания) и объект ContentFilterOptions (необязательно).
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();