跳到主要内容

! 使用 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)