이미지 개체 추출기를 사용하여 이미지의 특정 개체를 식별할 수 있습니다. 모델은 이미지와 "힌트" 객체를 모두 사용하여 식별된 객체의 마스크를 반환합니다.
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>
힌트 제공
다음의 조합을 통해 힌트를 제공할 수 있습니다.
- 식별 대상에 속하는 점의 좌표입니다.
- 식별 대상에 속하지 않는 점의 좌표입니다.
- 식별 대상을 묶는 좌표 사각형입니다.
힌트가 많을수록 모델이 더 정확해질 수 있습니다. 부정확한 결과 또는 오류를 최소화하려면 다음 힌트 지침을 따르세요.
- 부정확한 마스크를 생성할 수 있으므로 힌트에 여러 사각형을 사용하지 마세요.
- 제외 지점만 단독으로 사용하지 말고, 포함 지점이나 사각형을 함께 사용하십시오.
- 오류가 반환되므로 지원되는 최대 32개의 좌표(점의 경우 1, 사각형의 경우 2)를 초과하여 지정하지 마세요.
반환된 마스크는 식별된 개체의 마스크 픽셀이 255의 값을 가지는 회색조-8 형식의 마스크입니다 (식별되지 않은 다른 모든 픽셀의 값은 0입니다).
이미지 객체 추출기 예제
다음 예제에서는 이미지 내에서 개체를 식별하는 방법을 보여 줍니다. 이 예제에서는 입력에 대한 소프트웨어 비트맵 개체(softwareBitmap)가 이미 있다고 가정합니다.
GetReadyState 메서드를 호출하고 EnsureReadyAsync 메서드가 성공적으로 반환되도록 대기하여 이미지 개체 추출기 모델을 사용할 수 있는지 확인합니다.
Image Object Extractor 모델을 사용할 수 있게 되면 ImageObjectExtractor 개체를 만들어 참조합니다.
ImageObjectExtractorHint 개체를 만듭니다. 다른 입력을 사용하여 힌트 개체를 만드는 다른 방법은 나중에 설명합니다.
최종 결과를 반환하는 GetSoftwareBitmapObjectMask 메서드를 사용하여 모델에 힌트를 제출합니다.
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);
포함된 점과 제외된 점을 사용하여 힌트 지정
이 코드 조각은 포함된 점과 제외된 점을 모두 힌트로 사용하는 방법을 보여 줍니다.
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}
}
);
사각형을 사용하여 힌트 지정
이 코드 조각은 직사각형(RectInt32는 X, Y, Width, Height)을 힌트로 사용하는 방법을 보여 줍니다.
ImageObjectExtractorHint hint(
includeRects:
new List<RectInt32> {new RectInt32(370, 278, 285, 126)},
includePoints: null,
excludePoints: null );
ImageObjectExtractorHint hint(
{
RectInt32{370, 278, 285, 126}
},
{},
{}
);