다음을 통해 공유


이미지 전경 추출기

ImageForegroundExtractor를 사용하여 입력 이미지의 전경을 분할하고 배경 제거 및 스티커 생성과 같은 기능을 사용하도록 설정할 수 있습니다.

반환된 마스크는 그레이스케일 8 형식입니다. 픽셀 값 범위는 0에서 255까지입니다. 여기서 0은 배경 픽셀을 나타내고, 255는 전경 픽셀을 나타내고, 중간 값은 전경과 배경 픽셀의 혼합을 나타냅니다.

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>

비트맵 이미지에서 마스크 생성

  1. GetReadyState를 호출하고 EnsureReadyAsync가 성공적으로 완료되어 ImageForegroundExtractor 개체가 준비되었는지 확인합니다.
  2. 모델이 준비되면 CreateAsync 를 호출하여 ImageForegroundExtractor 개체를 인스턴스화합니다.
  3. 입력 이미지를 사용하여 GetMaskFromSoftwareBitmap 을 호출하여 포그라운드 마스크를 생성합니다.
using Microsoft.Windows.AI.Imaging;
using Microsoft.Windows.AI;

if (ImageForegroundExtractor.GetReadyState() == AIFeatureReadyState.NotReady)
{
    var result  = await ImageForegroundExtractor.EnsureReadyAsync();
    if (result.Status != AIFeatureReadyResultState.Success)
    {
        throw result.ExtendedError;
    }
}

var model = await ImageForegroundExtractor.CreateAsync();

// Insert your own softwareBitmap here.
var foregroundMask = model.GetMaskFromSoftwareBitmap(softwareBitmap);
#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 (ImageForegroundExtractor::GetReadyState() == AIFeatureReadyState::NotReady)
{
    auto loadResult = ImageForegroundExtractor::EnsureReadyAsync().get();

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

auto model = co_await ImageForegroundExtractor::CreateAsync();

// Insert your own softwareBitmap here.
auto foregroundMask = model.GetMaskFromSoftwareBitmap(softwareBitmap);

참고하십시오