Поделиться через


Удаление объекта изображения

Удалить объекты из изображений можно с помощью удаления объектов. Модель принимает как изображение, так и маску с серой шкалой, указывающую на удаление объекта, удаляет маскированную область из изображения и заменяет стертую область фоном изображения.

Дополнительные сведения об 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>

Пример удаления объекта Image

В следующем примере показано, как удалить объект из изображения. В примере предполагается, что у вас уже есть объекты растрового изображения программного обеспечения (softwareBitmap) для изображения и маски. Маска должна быть в формате Gray8, где каждому пикселю области, подлежащей удалению, присвоено значение 255, а всем остальным пикселям — 0.

  1. Убедитесь, что модель удаления объектов изображения доступна, вызвав метод GetReadyState и ожидая успешного возврата метода EnsureReadyAsync .
  2. После того как модель удаления объектов изображения будет доступна, создайте объект ImageObjectRemover , чтобы ссылаться на него.
  3. Наконец, отправьте изображение и маску в модель с помощью метода RemoveFromSoftwareBitmap , который возвращает окончательный результат.
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.AI;
using Microsoft.Windows.Management.Deployment;
using Windows.Graphics.Imaging;

if (ImageObjectRemover.GetReadyState() == AIFeatureReadyState.NotReady) 
{
    var result = await ImageObjectRemover.EnsureReadyAsync();
    if (result.Status != AIFeatureReadyResultState.Success)
    {
        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/Microsoft.Windows.AI.Imaging.h>
#include <winrt/Windows.Graphics.Imaging.h>
#include <winrt/Windows.Foundation.h>
using namespace winrt::Microsoft::Graphics::Imaging;
using namespace winrt::Microsoft::Windows::AI.Imaging;
using namespace winrt::Windows::Graphics::Imaging; 
using namespace winrt::Windows::Foundation;
if (ImageObjectRemover::GetReadyState() == AIFeatureReadyState::NotReady)
{
    auto loadResult = ImageObjectRemover::EnsureReadyAsync().get();

    if (loadResult.Status() != AIFeatureReadyResultState::Success)
    {
        throw winrt::hresult_error(loadResult.ExtendedError());
    }
}

ImageObjectRemover imageObjectRemover = ImageObjectRemover::CreateAsync().get();
// Insert your own imagebitmap and maskbitmap
Windows::Graphics::Imaging::SoftwareBitmap buffer = 
    imageObjectRemover.RemoveFromSoftwareBitmap(imageBitmap, maskBitmap);

См. также