다음을 통해 공유


이미지 개체 지우기

개체 지우기를 사용하여 이미지에서 개체를 제거할 수 있습니다. 모델은 제거할 개체를 나타내는 이미지와 회색조 마스크를 모두 사용하고, 이미지에서 마스킹된 영역을 지우고, 지운 영역을 이미지 배경으로 바꿉니다.

API 세부 정보는AI 이미징 기능에 대한 API 참조를 참조하세요.

콘텐츠 조정 세부 정보는생성 AI API를 사용한 콘텐츠 안전성을 참조하세요.

중요합니다

패키지 매니페스트 요구 사항: Windows AI 이미징 API를 사용하려면 앱이 선언된 systemAIModels기능을 사용하여 MSIX 패키지로 Package.appxmanifest 패키지되어야 합니다. 또한 매니페스트의 MaxVersionTested 특성이 Windows AI 기능을 제대로 지원하도록 최신 Windows 버전(예: 10.0.26226.0 이상)으로 설정되어 있는지 확인합니다. 이전 값을 사용하면 모델을 로드할 때 "앱에서 선언되지 않음" 오류가 발생할 수 있습니다.

<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)가 이미 있다고 가정합니다. 마스크는 제거할 영역의 각 픽셀이 255로 설정되고 다른 모든 픽셀이 0으로 설정된 Gray8 형식이어야 합니다.

  1. GetReadyState 메서드를 호출하고 EnsureReadyAsync 메서드가 성공적으로 반환되도록 대기하여 Image Object Erase 모델을 사용할 수 있는지 확인합니다.
  2. Image Object Erase 모델을 사용할 수 있게 되면 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);

참고하십시오