Ein Objekt anlegen
system/create-object schneidet ein Rechteck aus einem Live-Kamerabild aus und speichert es als Objekt. So
lernen Sie ein Objekt mit der echten Kamera, in der echten Beleuchtung, im echten Arbeitsabstand ein.
Es ist eine anwendungsweite Operation, keine modulbezogene: Sie schreibt in das eine Objektverzeichnis, das alle Module teilen, sodass ein einmal eingelerntes Objekt von jedem Modul gefunden werden kann.
Eingaben
| Knoten | Bedeutung |
|---|---|
|
Adresse des Bildknotens, aus dem ausgeschnitten wird. |
|
Der Name des Objekts. Wird zu |
|
Linke obere Ecke der auszuschneidenden Region. |
|
Größe der Region. Beide müssen größer als 0 sein. |
Ein Objekt einlernen
-
Legen Sie das Teil in der Orientierung vor die Kamera, in der es tatsächlich ankommt.
-
Setzen Sie
object-idauf den Namen des Objekts. -
Setzen Sie den Ausschnitt um das Teil und schreiben Sie auf
execute.
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
Das Bild wird nach <object-dir>/screw-m6.png geschrieben, und system/objects übernimmt es sofort.
Mehrere Orientierungen
Der Detektor dreht das Bild nicht, also ist ein Objekt ein Erscheinungsbild. Ein Teil, das in mehr als einer
Orientierung ankommt, braucht ein Objekt pro Orientierung - screw-m6-front, screw-m6-tilted - und einen
find-object-Durchlauf für jedes.
|
Beginnen Sie mit den Orientierungen, in denen das Teil wirklich ankommt. Jede zusätzliche Ansicht kostet etwas Matching-Zeit und bringt Toleranz gegenüber genau dieser Orientierung - Ansichten, die Sie nie sehen werden, bringen nichts. |
Wie eng der Ausschnitt sein sollte
Lassen Sie einige Pixel Hintergrund um das Teil - aber nur wenige. Beide Richtungen kosten etwas, und die zu enge Seite ist diejenige, die unbemerkt fehlschlägt.
Der Detektor stützt sich auf Gradienten, und eine Kante existiert nur dort, wo auf der anderen Seite etwas anderes ist. Schneiden Sie genau entlang der Silhouette des Teils, ist auf der anderen Seite nichts, und die Kontur erzeugt überhaupt keine Merkmale. Der Detektor glättet mit 7x7 und wendet dann einen 3x3-Sobel an, beide mit nach außen replizierten Randpixeln. Daher verwirft er den äußersten Ring des Bildes und berechnet etwa 4 Pixel von jedem Rand nach innen abgeschwächte Gradienten.
|
Ein Ausschnitt, der an der Silhouette endet, verbirgt die Kontur des Teils vor dem Detektor. Entweder wird das Objekt rundweg abgelehnt - gemeldet als fehlgeschlagener Durchlauf, der es benennt, denn eine Vorlage muss eine Mindestzahl starker Gradientenpunkte liefern - oder es wird angenommen, aber nur auf die inneren Details des Teils gestützt. Der Detektor verkleinert die Vorlage auf die Region, in der er Merkmale gefunden hat, und matcht dann auf weniger, als das Bild zeigt; ein Teil, das sich vor allem durch seine Kontur auszeichnet, matcht dann schlecht. |
Etwa 5 Pixel Rand genügen, und mehr bringt nichts. Hintergrund innerhalb der Vorlage ist Hintergrund, den der Detektor dann zu sehen erwartet. Ein zu weiter Ausschnitt, der eine Werkbankkante oder ein benachbartes Teil einschließt, macht das Matching also weniger zuverlässig. Streben Sie ein dünnes, gleichmäßiges Band der Oberfläche an, auf der das Teil normalerweise liegt.
Bei Erfolg meldet output/object-path die geschriebene Datei, relativ zum Konfigurationsverzeichnis, und
system/objects wird aktualisiert. Jedes Modul trainiert vor seiner nächsten Erkennung neu, sodass eine neue
Ansicht sofort nutzbar ist.
Fehler
Der gesamte Ausschnitt muss innerhalb des Bildes liegen. Eine Region, die darüber hinausgeht, wird abgelehnt; die Meldung nennt den Rand und die Bildgröße:
error: Crop region does not fit inside the 1920x1080 image: crop/startY + crop/height (1000 + 200 = 1200) exceeds the image height 1080
object-id wird relativ zum Konfigurationsverzeichnis interpretiert. Ein absoluter Pfad oder einer, der mit
.. hinausführt, wird mit Status -2 abgelehnt.
output/object-path wird geleert, wenn ein Durchlauf beginnt, sodass ein fehlgeschlagener Durchlauf nie einen
Pfad auf eine Vorlage hinterlässt, die er nicht geschrieben hat. Siehe
Ausführungsstatus.
Fehler sind Schritt für Schritt unter Fehlerbehebung beschrieben: