! 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 pasatrue, envía la inferencia de forma asíncrona; predeterminadofalse. -
multi_array_output
Texto opcional. Cuando las características devueltas sonMLMultiArray, especifica si se devuelve"table"o"MLMultiArray"; predeterminado"table". -
uses_cpu_only
Booleano opcional. Solo afecta a esta inferencia; si se pasatrue, 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 conmulti_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)