Поделиться через


Средство извлечения объектов Image

Вы можете использовать средство извлечения объектов изображений для идентификации определенных объектов на изображении. Модель принимает изображение и объект с подсказками, а затем возвращает маску идентифицированного объекта.

Дополнительные сведения об API см. в справочнике по API для функций создания образов искусственного интеллекта.

Сведения о модерации содержимого см. в разделе "Безопасность содержимого" с помощью api создания искусственного интеллекта.

Это важно

Требования к манифесту пакета: Чтобы использовать API создания изображений Windows AI, ваше приложение должно быть упаковано в формате пакета MSIX с systemAIModels возможностью, объявленной в Package.appxmanifest. Кроме того, убедитесь, что атрибут манифеста MaxVersionTested установлен на актуальную версию Windows (например, 10.0.26226.0 или более позднюю), чтобы правильно поддерживать функции ИИ Windows. Использование старых значений может привести к ошибкам "Не объявленные приложением" при загрузке модели.

<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 для прямоугольника), так как это приведет к ошибке.

Возвращаемая маска находится в формате 8-битного оттенка серого, причем пиксели маски для идентифицированного объекта имеют значение 255, а остальные — 0.

Пример работы извлекателя объектов изображения

В следующих примерах показаны способы идентификации объекта в изображении. В примерах предполагается, что у вас уже есть объект растрового изображения программного обеспечения (softwareBitmap) для входных данных.

  1. Убедитесь, что модель извлечения объектов изображения доступна путем вызова метода GetReadyState и ожидания успешного возврата метода EnsureReadyAsync .

  2. После того как модель извлечения объектов изображения будет доступна, создайте объект ImageObjectExtractor , чтобы ссылаться на него.

  3. Передайте изображение CreateWithSoftwareBitmapAsync.

  4. Создайте объект ImageObjectExtractorHint . Далее показаны другие способы создания объекта подсказки с различными входными данными.

  5. Отправьте указание модели с помощью метода 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}
    }, 
    {},
    {}
);

См. также