Compartilhar via


Extrator de primeiro plano de imagem

Você pode usar ImageForegroundExtractor para segmentar o primeiro plano de uma imagem de entrada e habilitar recursos como remoção de plano de fundo e geração de adesivos.

A máscara retornada está no formato greyscale-8. Os valores de pixel variam de 0 a 255, onde 0 representa pixels de plano de fundo, 255 representa pixels de primeiro plano e valores intermediários indicam uma mistura de pixels de primeiro plano e plano de fundo.

Para obter detalhes da API, consulte referência de API para recursos de imagem de IA.

Para obter detalhes de moderação de conteúdo, consulte Segurança de conteúdo com APIs de IA generativas.

Importante

Requisitos de manifesto do pacote: para usar APIs de imagem de IA do Windows, seu aplicativo deve ser empacotado como um pacote MSIX com a systemAIModels funcionalidade declarada em seu Package.appxmanifest. Além disso, verifique se o atributo do manifesto está configurado para uma versão recente do MaxVersionTested Windows (por exemplo, 10.0.26226.0 ou posterior) para suportar adequadamente os recursos de IA do Windows. O uso de valores mais antigos pode causar erros "Não declarados por aplicativo" ao carregar o modelo.

<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>

Gerando uma máscara de uma imagem bitmap

  1. Chame GetReadyState e aguarde a conclusão do EnsureReadyAsync com êxito para confirmar se o objeto ImageForegroundExtractor está pronto.
  2. Depois que o modelo estiver pronto, chame CreateAsync para criar uma instância de um objeto ImageForegroundExtractor.
  3. Chame GetMaskFromSoftwareBitmap com a imagem de entrada para gerar a máscara de primeiro plano.
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);

Consulte também