! 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. Beitruewird die Inferenz asynchron übermittelt; Standardwert istfalse. -
multi_array_output
Zeichenkette, optional. Legt beiMLMultiArray-Featurewerten fest, ob"table"oder"MLMultiArray"zurückgegeben wird; Standardwert ist"table". -
uses_cpu_only
Boolean, optional. Wirkt nur auf diese Inferenz; beitruewird für diesen Aufruf nur die CPU (CPUOnly) verwendet.
Rückgabewert
-
result
TabelleRü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 mitmulti_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)