! Инференс изображения с помощью 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)