Anleitung: Ein Teil in einem Kamerabild finden

Durchgängige Anleitung von einer laufenden Kamera bis zum Matching-Ergebnis, mit dem Modul, das die Anwendung bei der Installation für Sie anlegt.

Bevor Sie beginnen

  • LumiScan Cam Driver oder eine andere Bildquelle läuft auf demselben Gerät - derselben ctrlX CORE oder demselben ctrlX IPC oder demselben PC - und hat ein Bild aufgenommen.

  • Sie kennen die Adresse ihres Bildknotens. Für Kamera 1 des Cam Driver:

    hdvisionsystems/lumiscan-cam-driver/camera1/output/image

Alle Pfade sind im Folgenden relativ zur Anwendung:

hdvisionsystems/lumiscan-template-finder/

Das Erstellen einer Vorlage ist eine Operation der gesamten Anwendung, unter system/; die Suche gehört zum Modul module-1.

Schritt 1 - Beide Operationen auf die Kamera richten

Setzen Sie die Bildadresse bei beiden Operationen:

system/create-template/input/input-image-address = hdvisionsystems/lumiscan-cam-driver/camera1/output/image
module-1/find-template/input/input-image-address = hdvisionsystems/lumiscan-cam-driver/camera1/output/image

Es sind absichtlich getrennte Knoten - eine Vorlage kann aus einer Kamera ausgeschnitten und in einer anderen gesucht werden.

Schritt 2 - Ein Bild mit dem Teil im Sichtfeld aufnehmen

Lösen Sie in der Kameraanwendung eine Aufnahme aus, mit dem Teil so positioniert, wie es in der Produktion liegen wird. Die Vorlage wird aus diesem Bild ausgeschnitten; seine Beleuchtung und sein Arbeitsabstand werden damit zur Referenz.

Schritt 3 - Die Vorlage ausschneiden

Ermitteln Sie die Pixelkoordinaten einer Region, die das Teil enthält. Am einfachsten lesen Sie sie in der Bildvorschau der Kameraanwendung ab.

Dann:

system/create-template/input/crop/startX    = 100
system/create-template/input/crop/startY    = 200
system/create-template/input/crop/width     = 190
system/create-template/input/crop/height    = 100
system/create-template/input/template-name = screw

Schreiben Sie auf system/create-template/execute und lesen Sie dann system/create-template/output/status-code.

1 bedeutet, dass es funktioniert hat, und system/create-template/output/template-path zeigt jetzt templates/screw.png.

Erhalten Sie -5, passt die Region nicht in das Bild; output/status-text nennt die tatsächliche Bildgröße.

Schritt 4 - Anhand desselben Bilds prüfen

Bevor Sie etwas ändern, durchsuchen Sie das Bild, aus dem Sie eben ausgeschnitten haben:

module-1/find-template/input/template-name = screw

Schreiben Sie auf module-1/find-template/execute und lesen Sie module-1/find-template/output/result.

Sie sollten genau einen Treffer erhalten, dessen oriented_bounding_box in der Mitte der angegebenen Region liegt - (195, 250) für die obigen Werte - mit einer Konfidenz nahe 1.

Diese Prüfung ist die halbe Minute wert, die sie dauert. Wird die Vorlage nicht einmal in dem Bild gefunden, aus dem sie stammt, liegt das Problem an der Region oder der Bildadresse, und keine Abstimmung der Parameter wird das beheben.

Schritt 5 - Ein echtes Bild durchsuchen

Nehmen Sie ein neues Bild mit dem Teil in einer anderen Position auf und suchen Sie erneut. Der Treffer sollte dem Teil folgen.

Wird nichts gefunden, hat das Teil gegenüber der Vorlage wahrscheinlich Größe oder Ausrichtung geändert. Gehen Sie zu Schritt 6.

Schritt 6 - Die Suche bei Bedarf erweitern

Nur wenn Schritt 5 fehlgeschlagen ist:

Das Teil dreht sich. Setzen Sie einen Drehungsbereich mit grober Schrittweite:

module-1/find-template/input/rotation/max-rot  = 360
module-1/find-template/input/rotation/step-rot = 5

Das Teil ändert den Abstand. Setzen Sie einen Skalierungsbereich:

module-1/find-template/input/scale/min-scale  = 0.9
module-1/find-template/input/scale/max-scale  = 1.1
module-1/find-template/input/scale/step-scale = 0.05

Jede Kombination ist ein eigener Durchlauf über das Bild; beide Einstellungen zusammen sind also 72 x 5 = 360 Durchläufe. Erweitern Sie einen Bereich nach dem anderen und hören Sie auf, sobald das Teil zuverlässig gefunden wird.

Wenn die Erweiterung des Bereichs Treffer an falschen Stellen erzeugt, erhöhen Sie den Schwellwert:

module-1/find-template/input/match-thresh = 0.95

Der Grund ist in Die Suche abstimmen erklärt.

Schritt 7 - Die Einstellungen behalten

Die Einstellungen sind wirksam, aber noch nicht dauerhaft. Damit sie nach einem Neustart wiederhergestellt werden:

system/save-module-inputs/input/module-id = module-1

Schreiben Sie auf system/save-module-inputs/execute.

Die Vorlagendatei selbst ist bereits dauerhaft - sie ist eine Datei im Konfigurationsverzeichnis der Anwendung, das auf ctrlX OS Teil der aktiven Solution ist.

In der Produktion

Ein Zyklus ist jetzt ein einziger Schreibvorgang auf module-1/find-template/execute, gefolgt von:

  1. module-1/find-template/output/status-code lesen - negativ bedeutet, dass die Suche fehlgeschlagen ist

  2. module-1/find-template/output/result lesen - best_score und matches[0] liefern den besten Treffer

Zwischen den Zyklen muss nichts weiter gesetzt werden. Wie jedes Bild der Kamera ohne einen Aufruf pro Bild durchsucht wird, steht in Vorlagen in einem Bild-Stream finden (experimentell).