Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Внимание
Доступен в последнем экспериментальном канале выпуска Windows App SDK.
Экспериментальный канал пакета SDK для приложений Windows включает API и функции на ранних этапах разработки. Все API-интерфейсы в экспериментальном канале подвергаются обширным исправлениям и критическим изменениям и могут быть удалены из последующих выпусков в любое время. Экспериментальные функции не поддерживаются для использования в рабочих средах и приложениях, которые используют их, не могут быть опубликованы в Microsoft Store.
- Функции описания изображений недоступны в Китае.
Функции визуализации предоставляются пакетом SDK для приложений Windows с помощью набора API, поддерживаемых искусственным интеллектом (ИИ), которые поддерживают следующие возможности:
- Сверхразрешение изображения: масштабирование и улучшение резкости изображения.
- Описание изображения: создание текста, описывающего изображение.
- Сегментация изображений: определение объектов в изображении.
- Удаление объектов из изображения.
Дополнительные сведения об API см. в статье с описанием функций ИИ обработки изображений в Windows App SDK.
Сведения о модерации содержимого см. в разделе "Безопасность содержимого" с помощью api создания искусственного интеллекта.
Совет
Предоставьте отзыв об этих API-интерфейсах и их функциональных возможностях, создав новую проблему в репозитории GitHub пакета SDK для Приложений Windows ( включив образы в название) или отвечая на существующую проблему.
Необходимые требования
-
Компьютер Copilot+ от Qualcomm, Intel или AMD.
- В настоящее время только компьютеры на базе Qualcomm Copilot+ поддерживают описание изображений.
- Компьютеры на базе AMD с Copilot+ в настоящее время не поддерживают суперразрешение изображений.
- Arm64EC (совместимая с эмуляцией) в настоящее время не поддерживается.
- Windows 11 Insider Preview Build 26120.3073 (Каналы разработки и бета-версии) или более поздней версии должны быть установлены на устройстве.
Что можно сделать с суперразрешением изображения?
API-интерфейсы супер разрешения изображений в пакете SDK для приложений Windows позволяют увеличить и масштабировать изображения.
Масштабирование ограничено максимальным коэффициентом 8x. Более высокие коэффициенты масштабирования могут привести к артефактам и компрометации точности изображений. Если окончательная ширина или высота больше 8x исходных значений, будет создано исключение.
В следующем примере показано, как изменить масштаб (targetWidth
,) targetHeight
существующего растрового изображения программного обеспечения () и улучшить резкость изображения (softwareBitmap
чтобы повысить резкость изображения без масштабирования изображения, просто указать существующую ширину и высоту изображения) с помощью объекта ImageScaler .
Убедитесь, что модель разрешения изображений доступна, вызвав метод ImageScaler.GetReadyState , а затем дождитесь успешного возврата метода ImageScaler.EnsureReadyAsync .
После того как модель суперразрежение изображений будет доступна, создайте объект ImageScaler , чтобы ссылаться на него.
Получите точимую и масштабируемую версию существующего изображения, передав существующий образ и нужную ширину и высоту модели с помощью метода ScaleSoftwareBitmap .
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.Management.Deployment;
using Windows.Graphics.Imaging;
if (!ImageScaler.GetReadyState())
{
var result = await ImageScaler.EnsureReadyAsync();
if (result.Status != PackageDeploymentStatus.CompletedSuccess)
{
throw result.ExtendedError;
}
}
ImageScaler imageScaler = await ImageScaler.CreateAsync();
SoftwareBitmap finalImage = imageScaler.ScaleSoftwareBitmap(softwareBitmap, targetWidth, targetHeight);
#include <winrt/Microsoft.Graphics.Imaging.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Graphics.Imaging.h>
using namespace winrt::Microsoft::Graphics::Imaging;
using namespace winrt::Windows::Foundation;
using namespace winrt::Windows::Graphics::Imaging;
if (!ImageScaler::GetReadyState())
{
winrt::PackageDeploymentResult result = ImageScaler::EnsureReadyAsync().get();
if (result.Status() != PackageDeploymentStatus::CompletedSuccess)
{
throw result.ExtendedError();
}
}
ImageScaler imageScaler = ImageScaler::CreateAsync().get();
SoftwareBitmap finalImage = imageScaler.ScaleSoftwareBitmap(softwareBitmap, targetWidth, targetHeight);
Что можно сделать с описанием изображения?
Внимание
Описание изображения в настоящее время недоступно в Китае.
API описания изображений в пакете SDK для приложений Windows предоставляют возможность создавать различные типы текстовых описаний для изображения.
Поддерживаются следующие типы текстовых описаний:
- Специальные возможности . Предоставляет длинное описание с подробными сведениями, предназначенными для пользователей с потребностями специальных возможностей.
- Заголовок — предоставляет краткое описание, подходящее для заголовка изображения. Значение по умолчанию, если значение не указано.
- DetailedNarration — предоставляет длинное описание.
- OfficeCharts — предоставляет описание, подходящее для диаграмм и схем.
Так как эти API используют модели машинного обучения, иногда могут возникать ошибки, в которых текст не описывает изображение правильно. Поэтому мы не рекомендуем использовать эти API для образов в следующих сценариях:
- Где изображения содержат потенциально конфиденциальное содержимое и неточные описания могут быть спорными, такими как флаги, карты, глобусы, культурные символы или религиозные символы.
- Если точные описания являются критически важными, например для медицинских консультаций или диагностики, юридического содержимого или финансовых документов.
Получение текстового описания из изображения
API описания изображений принимает изображение, нужный тип описания текста (необязательно) и уровень модерации содержимого, который требуется использовать (необязательно) для защиты от вредного использования.
В следующем примере показано, как получить текстовое описание изображения.
Примечание.
Изображение должно быть объектом ImageBuffer , так как SoftwareBitmap в настоящее время не поддерживается. В этом примере показано, как преобразовать SoftwareBitmap в ImageBuffer.
Убедитесь, что модель разрешения изображений доступна, вызвав метод ImageDescriptionGenerator.GetReadyState , а затем дождитесь успешного возврата метода ImageDescriptionGenerator.EnsureReadyAsync .
После того как модель суперразрешения изображений будет доступна, создайте объект ImageDescriptionGenerator , чтобы ссылаться на него.
(Необязательно) Создайте объект ContentFilterOptions и укажите предпочитаемые значения. Если вы решили использовать значения по умолчанию, можно передать null-объект.
Получите описание изображения (LanguageModelResponse.Response), вызвав метод ImageDescriptionGenerator.DescribeAsync с исходным изображением, перечислением для предпочтительного типа описания (необязательно) и объектом ContentFilterOptions (необязательно).
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.Management.Deployment;
using Microsoft.Windows.AI.Generative;
using Microsoft.Windows.AI.ContentModeration;
using Windows.Storage.StorageFile;
using Windows.Storage.Streams;
using Windows.Graphics.Imaging;
if (!ImageDescriptionGenerator.GetReadyState())
{
var result = await ImageDescriptionGenerator.EnsureReadyAsync();
if (result.Status != PackageDeploymentStatus.CompletedSuccess)
{
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.ContentModeration.h>
#include <winrt/Microsoft.Windows.AI.Generative.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::ContentModeration;
using namespace winrt::Microsoft::Windows::AI::Generative;
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())
{
winrt::PackageDeploymentResult result = ImageDescriptionGenerator::EnsureReadyAsync().get();
if (result.Status() != PackageDeploymentStatus::CompletedSuccess)
{
throw result.ExtendedError();
}
}
ImageDescriptionGenerator imageDescriptionGenerator = ImageDescriptionGenerator::CreateAsync().get();
// Convert already available softwareBitmap to ImageBuffer.
auto inputBuffer = ImageBuffer::CreateCopyFromBitmap(softwareBitmap);
// Create content moderation thresholds object.
ContentFilterOptions contentFilter{};
contentFilter.PromptMinSeverityLevelToBlock().ViolentContentSeverity(SeverityLevel::Medium);
contentFilter.ResponseMinSeverityLevelToBlock().ViolentContentSeverity(SeverityLevel::Medium);
// Get text description.
LanguageModelResponse languageModelResponse = imageDescriptionGenerator.DescribeAsync(inputImage, ImageDescriptionScenario::Caption, contentFilter).get();
string text = languageModelResponse.Response();
Что можно сделать с сегментацией изображений?
Сегментация изображений может использоваться для идентификации определенных объектов в изображении. Модель принимает как изображение, так и объект "подсказки" и возвращает маску идентифицированного объекта.
Подсказки можно предоставить с помощью любого сочетания следующих значений:
- Координаты для точек, принадлежащих к определяемому вами элементу.
- Координаты для точек, которые не относятся к определяемому вами элементу.
- Прямоугольник координаты, включающий определяемый вами объект.
Чем больше подсказок вы предоставляете, тем более точной может быть модель. Следуйте этим советам, чтобы минимизировать неточные результаты или ошибки.
- Избегайте использования нескольких прямоугольников в подсказке, так как они могут создавать неточные маски.
- Избегайте использования точек исключения исключительно без включения точек или прямоугольника.
- Не указывайте больше, чем поддерживаемые максимум 32 координат (1 для точки, 2 для прямоугольника), так как это приведет к ошибке.
Возвращаемая маска находится в формате серой шкалы-8 с пикселями маски для идентифицированного объекта со значением 255 (все остальные имеют значение 0).
Определение объекта в изображении
В следующих примерах показаны способы идентификации объекта в изображении. В примерах предполагается, что у вас уже есть объект растрового изображения программного обеспечения (softwareBitmap
) для входных данных.
Убедитесь, что модель сегментации изображений доступна путем вызова метода GetReadyState и ожидания успешного возврата метода EnsureReadyAsync .
После того как модель сегментации изображений будет доступна, создайте объект ImageObjectExtractor , чтобы ссылаться на него.
Передайте изображение в ImageObjectExtractor.CreateWithSoftwareBitmapAsync.
Создайте объект ImageObjectExtractorHint . Далее показаны другие способы создания объекта подсказки с различными входными данными.
Отправьте указание модели с помощью метода GetSoftwareBitmapObjectMask , который возвращает окончательный результат.
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.Management.Deployment;
using Windows.Graphics.Imaging;
if (!ImageObjectExtractor.GetReadyState())
{
var result = await ImageObjectExtractor.EnsureReadyAsync();
if (result.Status != PackageDeploymentStatus.CompletedSuccess)
{
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/Windows.Graphics.Imaging.h>
#include <winrt/Windows.Foundation.h>
using namespace winrt::Microsoft::Graphics::Imaging;
using namespace winrt::Windows::Graphics::Imaging;
using namespace winrt::Windows::Foundation;
if (!ImageObjectExtractor::GetReadyState())
{
winrt::PackageDeploymentResult result = ImageObjectExtractor::EnsureReadyAsync().get();
if (result.Status() != PackageDeploymentStatus::CompletedSuccess)
{
throw result.ExtendedError();
}
}
ImageObjectExtractor imageObjectExtractor = ImageObjectExtractor::CreateWithSoftwareBitmapAsync(softwareBitmap).get();
ImageObjectExtractorHint hint(
{},
{
PointInt32{306, 212},
PointInt32{216, 336}
},
{}
);
SoftwareBitmap finalImage = imageObjectExtractor.GetSoftwareBitmapObjectMask(hint);
Указание подсказок с включенными и исключенными точками
В этом фрагменте кода показано, как использовать как включенные, так и исключенные точки в качестве подсказок.
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}
}
);
Указание подсказок с прямоугольником
В этом фрагменте кода показано, как использовать прямоугольник (RectInt32 является X, Y, Width, Height
) в качестве указания.
ImageObjectExtractorHint hint(
includeRects:
new List<RectInt32> {new RectInt32(370, 278, 285, 126)},
includePoints: null,
excludePoints: null );
ImageObjectExtractorHint hint(
{
RectInt32{370, 278, 285, 126}
},
{},
{}
);
Что можно сделать с удалением объектов?
Удаление объектов можно использовать для удаления объектов из изображений. Модель принимает как изображение, так и маску с серой шкалой, указывающую на удаление объекта, удаляет маскированную область из изображения и заменяет стертую область фоном изображения.
Удаление нежелательных объектов из образа
В следующем примере показано, как удалить объект из изображения. В примере предполагается, что у вас уже есть объекты растрового изображения программного обеспечения (softwareBitmap
) для изображения и маски. Маска должна быть в формате Gray8, где каждому пикселю области, подлежащей удалению, присвоено значение 255, а всем остальным пикселям — 0.
- Убедитесь, что модель сегментации изображений доступна путем вызова метода GetReadyState и ожидания успешного возврата метода EnsureReadyAsync .
- После того как модель удаления объектов будет доступна, создайте объект ImageObjectRemover , чтобы ссылаться на него.
- Наконец, отправьте изображение и маску в модель с помощью метода RemoveFromSoftwareBitmap , который возвращает окончательный результат.
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.Management.Deployment;
using Windows.Graphics.Imaging;
if (!ImageObjectRemover.GetReadyState())
{
var result = await ImageObjectRemover.EnsureReadyAsync();
if (result.Status != PackageDeploymentStatus.CompletedSuccess)
{
throw result.ExtendedError;
}
}
ImageObjectRemover imageObjectRemover = await ImageObjectRemover.CreateAsync();
SoftwareBitmap finalImage = imageObjectRemover.RemoveFromSoftwareBitmap(imageBitmap, maskBitmap); // Insert your own imagebitmap and maskbitmap
#include <winrt/Microsoft.Graphics.Imaging.h>
#include <winrt/Windows.Graphics.Imaging.h>
#include <winrt/Windows.Foundation.h>
using namespace winrt::Microsoft::Graphics::Imaging;
using namespace winrt::Windows::Graphics::Imaging;
using namespace winrt::Windows::Foundation;
if (!ImageObjectRemover::GetReadyState())
{
winrt::PackageDeploymentResult result = ImageObjectRemover::EnsureReadyAsync().get();
if (result.Status() != PackageDeploymentStatus::CompletedSuccess)
{
throw result.ExtendedError();
}
}
ImageObjectRemover imageObjectRemover = ImageObjectRemover::CreateAsync().get();
SoftwareBitmap buffer = imageObjectRemover.RemoveFromSoftwareBitmap(imageBitmap, maskBitmap); // Insert your own imagebitmap and maskbitmap
Ответственный ИИ
Эти API-интерфейсы для работы с изображениями предоставляют разработчикам мощные, надежные модели для создания приложений с безопасным и защищенным использованием искусственного интеллекта. Мы использовали сочетание следующих шагов, чтобы гарантировать, что эти API-интерфейсы визуализации являются надежными, безопасными и созданными ответственно. Мы рекомендуем ознакомиться с рекомендациями, описанными в статье "Разработка ответственного искусственного интеллекта" в Windows при реализации функций ИИ в приложении.
- Тщательное тестирование и оценка качества модели для выявления и устранения потенциальных рисков.
- Поэтапное развертывание экспериментальных выпусков имиджевой API. После окончательного экспериментального выпуска развертывание будет расширено для подписанных приложений, чтобы убедиться, что проверки вредоносных программ были применены к приложениям с возможностями локальной модели.
- Предоставьте локальную модель ИИ для модерации содержимого, которая определяет и фильтрует вредное содержимое как входных, так и созданных ИИ выходных данных любых API, использующих созданные модели искусственного интеллекта. Эта локальная модель модерации контента основана на модели безопасности содержимого Azure AI для модерации текста и обеспечивает аналогичную производительность.
Внимание
Система безопасности содержимого не является неразрешимой и иногда возникает ошибка, поэтому мы рекомендуем интегрировать дополнительные инструменты и методики ответственного ИИ. Дополнительные сведения см. в статье "Разработка ответственного искусственного интеллекта" в Windows.