Перейти к основному содержимому

! Инференс изображения с помощью CoreML (:predict)

Объявление

результат, сообщение_об_ошибке = объект_визуального_инференсера:predict(изображение_для_инференса)

или

отправлено, сообщение_об_ошибке = объект_визуального_инференсера:predict(изображение_для_инференса, {
async = асинхронный_режим,
multi_array_output = "table" или "MLMultiArray",
uses_cpu_only = использовать_только_CPU,
})

Параметры

  • изображение_для_инференса
    Объект изображения, изображение для инференса

  • async
    Логическое значение, необязательный параметр. При true инференс отправляется асинхронно; по умолчанию false

  • multi_array_output
    Текстовое значение, необязательный параметр. Для возвращаемых признаков MLMultiArray задаёт "table" или "MLMultiArray"; по умолчанию "table"

  • uses_cpu_only
    Логическое значение, необязательный параметр; влияет только на текущий инференс, при true в этом инференсе используется только CPU

Возвращаемое значение

  • результат
    Таблица

    Структура результата модели обнаружения объектов
    {
    {
    ["y"] = number_value,
    ["x"] = number_value,
    ["w"] = number_value,
    ["h"] = number_value,
    ["confidence"] = number_value(0.0 ~ 100.0),
    ["name"] = string_value,
    },
    ...
    }
    Структура результата модели классификации изображений
    {
    {
    ["confidence"] = number_value(0.0 ~ 100.0),
    ["name"] = string_value,
    },
    ...
    }
    Структура результата модели другого типа
    {
    ...
    }

Описание

  • Доступно в версиях ПО 1.3.8 и выше
  • Не поддерживается в системах ниже iOS 12
  • Выполняет инференс изображения в контексте визуального инференса и возвращает результат
  • Если модель возвращает признаки MLMultiArray, параметр multi_array_output = "MLMultiArray" позволяет сохранить нативный объект тензора для последующей постобработки
  • :run() является псевдонимом :predict(); после асинхронной отправки результат можно получить через :is_done() и :results()
  • Объект визуального инференсера также поддерживает методы :metadata(), :compute_units(), :image_crop_and_scale_option(), :class_labels(), :is_vision_request() и другие

Пример

compiled_model_path = XXT_HOME_PATH..'/models/yolo11m.mlmodelc' -- Место хранения скомпилированной модели

file.remove(compiled_model_path) -- На этапе тестирования компилировать заново при каждом запуске; после стабилизации модели эту строку можно закомментировать

if not file.exists(compiled_model_path) then -- Если скомпилированной модели ещё нет, скомпилировать её
local tmp_path, err = coreml.compile_model(XXT_HOME_PATH..'/models/yolo11m.mlpackage') -- Скомпилировать модель
if not tmp_path then
error(err)
end
file.move(tmp_path, compiled_model_path, 'mo') -- Переместить скомпилированную модель в указанный путь
end

vnrequest, err = coreml.new_vision_request(compiled_model_path) -- Создать инференсер из модели
if not vnrequest then
error(err)
end

rets = vnrequest:predict(screen.image()) -- Выполнить инференс изображения с помощью инференсера
nLog(rets)