Compartilhar via


Extrator de objeto de imagem

Você pode usar o Extrator de Objeto de Imagem para identificar objetos específicos em uma imagem. O modelo utiliza tanto uma imagem quanto um objeto de "dicas" e retorna uma máscara do objeto identificado.

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>

Fornecendo dicas

Você pode fornecer dicas por meio de qualquer combinação do seguinte:

  • Coordenadas para pontos que pertencem ao que você está identificando.
  • Coordenadas para pontos que não pertencem ao que você está identificando.
  • Um retângulo de coordenadas que inclui o que você está identificando.

Quanto mais dicas você fornecer, mais preciso o modelo pode ser. Siga estas diretrizes de dica para minimizar resultados ou erros imprecisos.

  • Evite usar vários retângulos em uma dica, pois eles podem produzir uma máscara imprecisa.
  • Evite usar pontos de exclusão exclusivamente sem pontos de inclusão ou um retângulo.
  • Não especifique mais do que o máximo permitido de 32 coordenadas (1 para um ponto, 2 para um retângulo), pois isso retornará um erro.

A máscara retornada está no formato greyscale-8 com os pixels da máscara para o objeto identificado com um valor de 255 (todas as outras com um valor de 0).

Exemplo do Extrator de Objeto de Imagem

Os exemplos a seguir mostram maneiras de identificar um objeto dentro de uma imagem. Os exemplos pressupõem que você já tenha um objeto bitmap de software (softwareBitmap) para a entrada.

  1. Verifique se o modelo do Extrator de Objeto de Imagem está disponível chamando o método GetReadyState e aguardando o método EnsureReadyAsync retornar com êxito.

  2. Depois que o modelo do Extrator de Objeto de Imagem estiver disponível, crie um objeto ImageObjectExtractor para referenciá-lo.

  3. Passe a imagem para CreateWithSoftwareBitmapAsync.

  4. Crie um objeto ImageObjectExtractorHint . Outras maneiras de criar um objeto de dica com entradas diferentes são demonstradas posteriormente.

  5. Envie a dica para o modelo usando o método GetSoftwareBitmapObjectMask , que retorna o resultado final.

using Microsoft.Graphics.Imaging;
using Microsoft.Windows.AI;
using Microsoft.Windows.Management.Deployment;
using Windows.Graphics.Imaging;

if (ImageObjectExtractor.GetReadyState() == AIFeatureReadyState.NotReady) 
{
    var result = await ImageObjectExtractor.EnsureReadyAsync();
    if (result.Status != AIFeatureReadyResultState.Success)
    {
        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/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 (ImageObjectExtractor::GetReadyState() == AIFeatureReadyState::NotReady)
{
    auto loadResult = ImageObjectExtractor::EnsureReadyAsync().get();

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

ImageObjectExtractor imageObjectExtractor = ImageObjectExtractor::CreateWithSoftwareBitmapAsync(softwareBitmap).get();

ImageObjectExtractorHint hint(
    {},
    {
        Windows::Graphics::PointInt32{306, 212},        
        Windows::Graphics::PointInt32{216, 336}
    },
    {}
);

Windows::Graphics::Imaging::SoftwareBitmap finalImage = imageObjectExtractor.GetSoftwareBitmapObjectMask(hint);

Especificar dicas com pontos incluídos e excluídos

Este snippet de código demonstra como usar pontos incluídos e excluídos como dicas.

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}
    }
);

Especificar dicas com retângulo

Este snippet de código demonstra como usar um retângulo (RectInt32 é X, Y, Width, Height) como uma dica.

ImageObjectExtractorHint hint(
    includeRects: 
        new List<RectInt32> {new RectInt32(370, 278, 285, 126)},
    includePoints: null,
    excludePoints: null ); 
ImageObjectExtractorHint hint(
    { 
        RectInt32{370, 278, 285, 126}
    }, 
    {},
    {}
);

Consulte também