Zum Hauptinhalt springen

! Bildinferenz mit dem CoreML-Inferenzmodul (:predict)

Deklaration

result, err = vision_request:predict(image)

oder

submitted, err = vision_request:predict(image, {
async = is_async,
multi_array_output = "table" or "MLMultiArray",
uses_cpu_only = nur_CPU_verwenden,
})

Parameter

  • image
    Bildobjekt, das zu inferierende Bild.

  • async
    Boolean, optional. Bei true wird die Inferenz asynchron übermittelt; Standardwert ist false.

  • multi_array_output
    Zeichenkette, optional. Legt bei MLMultiArray-Featurewerten fest, ob "table" oder "MLMultiArray" zurückgegeben wird; Standardwert ist "table".

  • uses_cpu_only
    Boolean, optional. Wirkt nur auf diese Inferenz; bei true wird für diesen Aufruf nur die CPU (CPUOnly) verwendet.

Rückgabewert

  • result
    Tabelle

    Rückgabestruktur eines Objekterkennungsmodells
    {
    {
    ["y"] = number_value,
    ["x"] = number_value,
    ["w"] = number_value,
    ["h"] = number_value,
    ["confidence"] = number_value(0.0 ~ 100.0),
    ["name"] = string_value,
    },
    ...
    }
    Rückgabestruktur eines Bildklassifikationsmodells
    {
    {
    ["confidence"] = number_value(0.0 ~ 100.0),
    ["name"] = string_value,
    },
    ...
    }
    Rückgabestruktur anderer Modelltypen
    {
    ...
    }

Hinweise

  • Ab Softwareversion 1.3.8 verfügbar
  • Systeme vor iOS 12 werden nicht unterstützt.
  • Das Bild wird über den Vision-Inferenzkontext verarbeitet und das Inferenzergebnis zurückgegeben.
  • Gibt das Modell MLMultiArray-Featurewerte zurück, kann mit multi_array_output = "MLMultiArray" das native Tensorobjekt für die weitere Nachverarbeitung erhalten bleiben.
  • :run() ist ein Alias für :predict(); nach einer asynchronen Übermittlung können die Ergebnisse mit :is_done() und :results() gelesen werden.
  • Das Vision-Inferenzobjekt unterstützt außerdem Methoden wie :metadata(), :compute_units(), :image_crop_and_scale_option(), :class_labels() und :is_vision_request().

Beispiel

compiled_model_path = XXT_HOME_PATH..'/models/yolo11m.mlmodelc' -- Speicherort des kompilierten Modells

file.remove(compiled_model_path) -- Während des Tests bei jedem Lauf neu kompilieren; nach Stabilisierung des Modells kann diese Zeile auskommentiert werden.

if not file.exists(compiled_model_path) then -- Falls noch kein kompiliertes Modell vorhanden ist, eines kompilieren.
local tmp_path, err = coreml.compile_model(XXT_HOME_PATH..'/models/yolo11m.mlpackage') -- Modell kompilieren
if not tmp_path then
error(err)
end
file.move(tmp_path, compiled_model_path, 'mo') -- Kompiliertes Modell an den Zielort verschieben
end

vnrequest, err = coreml.new_vision_request(compiled_model_path) -- Inferenz-Request aus dem Modell erstellen
if not vnrequest then
error(err)
end

rets = vnrequest:predict(screen.image()) -- Bild mit dem Request inferieren
nLog(rets)