Aller au contenu principal

! Effectuer une inférence d’image avec un inféreur CoreML (:predict)

Déclaration

resultat, message_erreur = objet_inference_visuelle:predict(image_a_analyser)

ou

soumis, message_erreur = objet_inference_visuelle:predict(image_a_analyser, {
async = asynchrone,
multi_array_output = "table" ou "MLMultiArray",
uses_cpu_only = uniquement CPU pour cette inférence,
})

Paramètres

  • image_a_analyser
    objet image, image à analyser

  • async
    type booléen, paramètre facultatif, soumet l’inférence de manière asynchrone si true, false par défaut

  • multi_array_output
    type texte, paramètre facultatif, lorsque des valeurs de feature MLMultiArray sont renvoyées, indique s’il faut renvoyer "table" ou "MLMultiArray", "table" par défaut

  • uses_cpu_only
    type booléen, paramètre facultatif, concerne uniquement cette inférence ; true force l’utilisation du CPU pour cette inférence

Valeur renvoyée

  • resultat
    type table

    Structure renvoyée par un modèle de détection d’objets
    {
    {
    ["y"] = number_value,
    ["x"] = number_value,
    ["w"] = number_value,
    ["h"] = number_value,
    ["confidence"] = number_value(0.0 ~ 100.0),
    ["name"] = string_value,
    },
    ...
    }
    Structure renvoyée par un modèle de classification d’images
    {
    {
    ["confidence"] = number_value(0.0 ~ 100.0),
    ["name"] = string_value,
    },
    ...
    }
    Structure renvoyée par un autre type de modèle
    {
    ...
    }

Description

  • Disponible à partir de la version logicielle 1.3.8
  • Les systèmes antérieurs à iOS 12 ne sont pas pris en charge
  • Utilise le contexte d’inférence visuelle pour analyser l’image et renvoie le résultat
  • Si le modèle renvoie une feature MLMultiArray, multi_array_output = "MLMultiArray" permet de conserver l’objet tenseur natif pour le post-traitement
  • :run() est un alias de :predict() ; après une soumission asynchrone, utilisez :is_done() et :results() pour lire le résultat
  • L’objet d’inférence visuelle prend également en charge :metadata(), :compute_units(), :image_crop_and_scale_option(), :class_labels() et :is_vision_request()

Exemple

compiled_model_path = XXT_HOME_PATH..'/models/yolo11m.mlmodelc' -- Emplacement du modèle compilé

file.remove(compiled_model_path) -- Recompiler à chaque fois pendant les tests ; cette ligne peut être commentée lorsque le modèle est stable

if not file.exists(compiled_model_path) then -- Compiler une copie si aucun modèle compilé n’existe encore
local tmp_path, err = coreml.compile_model(XXT_HOME_PATH..'/models/yolo11m.mlpackage') -- Compiler le modèle
if not tmp_path then
error(err)
end
file.move(tmp_path, compiled_model_path, 'mo') -- Déplacer le modèle compilé vers l’emplacement indiqué
end

vnrequest, err = coreml.new_vision_request(compiled_model_path) -- Créer un inféreur à partir du modèle
if not vnrequest then
error(err)
end

rets = vnrequest:predict(screen.image()) -- Effectuer l’inférence de l’image avec l’inféreur
nLog(rets)