Anleitung: Ein Teil in einem Kamerabild finden

Von Anfang bis Ende: ein Teil von einer Live-Kamera einlernen, es finden und die Einstellungen so sichern, dass sie einen Neustart überstehen.

Bevor Sie beginnen

  • LumiScan Cam Driver ist auf demselben Gerät installiert und veröffentlicht ein Bild, zum Beispiel unter hdvisionsystems/lumiscan-cam-driver/camera1/output/image.

  • LumiScan Object Finder ist installiert - auf ctrlX OS auch lizenziert -, und system/modules listet module-1.

  • Das Teil liegt vor der Kamera, in der Beleuchtung, die die Installation tatsächlich verwenden wird.

Schritt 1: Die erste Ansicht einlernen

Sehen Sie sich das Live-Bild an und notieren Sie das Pixelrechteck, das das Teil einnimmt - auf ctrlX OS zeigt die ctrlX-Weboberfläche das Bild - oder lesen Sie width und height vom Bildknoten.

Setzen Sie die Eingaben und führen Sie aus:

system/create-object/input/input-image-address = hdvisionsystems/lumiscan-cam-driver/camera1/output/image
system/create-object/input/object-id           = screw-m6
system/create-object/input/crop/startX         = 820
system/create-object/input/crop/startY         = 400
system/create-object/input/crop/width          = 160
system/create-object/input/crop/height         = 120
write system/create-object/execute

Prüfen Sie, ob system/create-object/output/status-code 1 ist und output/object-path die Datei nennt. system/objects sollte jetzt screw-m6 enthalten.

Schneiden Sie eng aus. Hintergrund innerhalb der Vorlage ist Hintergrund, den der Detektor zu sehen erwartet.

Schritt 2: Die anderen Orientierungen einlernen

Der Detektor dreht ein Bild nicht. Jede Orientierung, in der das Teil ankommt, braucht daher ein eigenes Objekt. Wiederholen Sie Schritt 1 mit einer anderen object-id - etwa screw-m6-tilted - und suchen Sie in einem eigenen Durchlauf danach.

Kommt das Teil immer nur in einer Lage an, genügt ein Objekt.

Schritt 3: Das Teil finden

module-1/find-object/input/input-image-address = hdvisionsystems/lumiscan-cam-driver/camera1/output/image
module-1/find-object/input/object-id           = screw-m6
module-1/find-object/input/nms-min-dist        = 40
write module-1/find-object/execute

Lesen Sie module-1/find-object/output/status-code. 1 bedeutet, dass der Durchlauf abgeschlossen wurde; lesen Sie dann output/result.

nms-min-dist bei etwa der halben Größe des Teils in Pixeln verhindert, dass ein Teil als Häufung von Treffern gemeldet wird.

Schritt 4: Den Schwellwert anhand echter Teile setzen

Führen Sie Schritt 3 mehrmals mit echten Teilen aus und notieren Sie den score der echten Treffer. Setzen Sie dann

module-1/find-object/input/confidence-threshold = <a little below the worst genuine score>

Liegen die echten Scores nahe am Schwellwert, schalten Sie die Glättung ein - setzen Sie module-1/find-object/input/preprocess/blur-sigma-x auf 1.0 - und messen Sie erneut. Siehe Die Suche abstimmen.

Schritt 5: Dauerhaft machen

Einstellungen wirken sofort, werden aber erst gespeichert, wenn Sie es verlangen:

system/save-module-inputs/input/module-id = module-1
write system/save-module-inputs/execute
write system/save-current-modules/execute

Beide sollten Status 1 melden. Das Modul und seine Einstellungen kommen jetzt nach einem Neustart zurück.

Schritt 6: Aus einem Steuerungsprogramm ausführen

Pro Zyklus:

  1. Schreiben Sie auf module-1/find-object/execute.

  2. Lesen Sie module-1/find-object/output/status-code.

  3. Ist er negativ, ist der Durchlauf fehlgeschlagen - lesen Sie output/status-text für den Grund und verwenden Sie das Ergebnis nicht.

  4. Ist er 1, lesen Sie output/result. Eine leere matches-Liste bedeutet, dass das Teil nicht da war.

Lesen Sie die Ausgaben, bevor Sie das nächste execute auslösen: Ein Durchlauf leert sie beim Start.

Wie jedes Bild der Kamera ohne einen Aufruf pro Bild durchsucht wird, lesen Sie in Objekte auf einem Bild-Stream finden (experimentell).

Wenn das Teil nicht gefunden wird

Probleme sind Schritt für Schritt unter Fehlerbehebung beschrieben: