Saltar al contenido principal

! Ejecutar inferencia de imágenes con un ejecutor CoreML (:predict)

Declaración

resultado, información_del_error = objeto_ejecutor_visual:predict(imagen_a_procesar)

o

enviado, información_del_error = objeto_ejecutor_visual:predict(imagen_a_procesar, {
async = es_asíncrono,
multi_array_output = "table" o "MLMultiArray",
uses_cpu_only = CPU,
})

Parámetros

  • imagen_a_procesar
    Objeto de imagen que se someterá a inferencia.

  • async
    Booleano opcional. Si se pasa true, envía la inferencia de forma asíncrona; predeterminado false.

  • multi_array_output
    Texto opcional. Cuando las características devueltas son MLMultiArray, especifica si se devuelve "table" o "MLMultiArray"; predeterminado "table".

  • uses_cpu_only
    Booleano opcional. Solo afecta a esta inferencia; si se pasa true, esta ejecución usa únicamente la CPU.

Valor de retorno

  • resultado
    Tabla.

    Estructura devuelta por un modelo de detección de objetos
    {
    {
    ["y"] = number_value,
    ["x"] = number_value,
    ["w"] = number_value,
    ["h"] = number_value,
    ["confidence"] = number_value(0.0 ~ 100.0),
    ["name"] = string_value,
    },
    ...
    }
    Estructura devuelta por un modelo de clasificación de imágenes
    {
    {
    ["confidence"] = number_value(0.0 ~ 100.0),
    ["name"] = string_value,
    },
    ...
    }
    Estructura devuelta por otros tipos de modelo
    {
    ...
    }

Descripción

  • Disponible desde la versión 1.3.8
  • No admite sistemas iOS anteriores a iOS 12.
  • Ejecuta la inferencia de la imagen mediante el contexto de inferencia visual y devuelve el resultado.
  • Si el modelo devuelve características MLMultiArray, puedes conservar el objeto tensor nativo con multi_array_output = "MLMultiArray" para continuar el posprocesamiento.
  • :run() es un alias de :predict(); tras un envío asíncrono, puedes usar :is_done() y :results() para leer el resultado.
  • El objeto ejecutor visual también admite :metadata(), :compute_units(), :image_crop_and_scale_option(), :class_labels() y :is_vision_request().

Ejemplo

compiled_model_path = XXT_HOME_PATH..'/models/yolo11m.mlmodelc' -- Ubicación del modelo compilado

file.remove(compiled_model_path) -- Durante las pruebas, recompilar cada vez; comenta esta línea cuando el modelo sea estable

if not file.exists(compiled_model_path) then -- Si todavía no existe un modelo compilado, compilar uno
local tmp_path, err = coreml.compile_model(XXT_HOME_PATH..'/models/yolo11m.mlpackage') -- Compilar el modelo
if not tmp_path then
error(err)
end
file.move(tmp_path, compiled_model_path, 'mo') -- Mover el modelo compilado a la ubicación indicada
end

vnrequest, err = coreml.new_vision_request(compiled_model_path) -- Crear un ejecutor a partir del modelo
if not vnrequest then
error(err)
end

rets = vnrequest:predict(screen.image()) -- Ejecutar la inferencia de la imagen
nLog(rets)