Release Notes: v1.1.0

Erstes funktionsfähiges Release von LumiScan Object Finder. Frühere Versionen registrierten die Data-Layer-Knoten der Anwendung, lieferten aber ein festes Platzhalterergebnis zurück, sodass nichts von dem Folgenden vorher nutzbar war.

Neu

Formbasierte Objekterkennung. <module>/find-object/execute durchsucht ein Kamerabild nach einem bekannten Objekt und meldet jedes Vorkommen, jeweils mit Position, Größe der übereinstimmenden Vorlage, Score und Namen des Objekts. Das Matching erfolgt auf Gradientenorientierungen statt auf Pixelintensitäten und toleriert daher Beleuchtungsänderungen und Oberflächentexturen, an denen Intensitätskorrelation scheitert.

Ein Objekt ist ein Bild, gespeichert als <object-dir>/<object-id>.png, wobei der Dateiname die Objekt-ID ist. Der Detektor dreht oder skaliert es nicht, sodass ein Teil, das in mehreren Orientierungen erkannt werden muss, mehrere Objekte ist - screw-m6-front, screw-m6-tilted -, nach denen nacheinander gesucht wird. Siehe Objektspeicher.

Ein Objekt pro Suche. <module>/find-object/input/object-id nennt das Objekt und ist erforderlich; ein leerer Wert wird mit Statuscode -2 abgelehnt. Es gibt keinen Durchlauf „nach allem suchen": Ein Detektor wird um ein Bild herum aufgebaut; die Suche nach mehreren Objekten bedeutete also mehrere Detektoren, und der Detektor verarbeitet jedes Mal das ganze Bild einmal - der teure Teil. Die Methode einmal pro Objekt auszuführen, hält diese Kosten sichtbar.

Einlernen von der Live-Kamera. system/create-object/execute schneidet eine Region aus einem Kamerabild aus und speichert sie als <object-id>.png, sodass ein Objekt in der echten Beleuchtung im echten Arbeitsabstand eingelernt werden kann, ohne Dateien zu übertragen. Das Speichern unter einer bestehenden ID ersetzt diese, und output/object-path meldet, wo die Datei abgelegt wurde.

Mehrere Module, jedes mit eigenem find-object, eigenen Einstellungen und Ergebnissen, sodass eine Installation mehrere Kameras gleichzeitig überwachen kann. Eine Lizenz gilt für zehn Module.

Ein Objektverzeichnis für die Anwendung, system/object-dir, dessen Objekte auf system/objects aufgelistet werden - ein Eintrag pro .png, was zugleich die vollständige Liste der Vorlagen ist. system/set-object-dir wechselt es und speichert die Wahl.

Eine Geschwindigkeitseinstellung, die wirkt. input/preprocess/bin-size sucht mit geringerer Auflösung: Sowohl das Bild als auch das Bild des Objekts werden vor dem Matching um diesen ganzzahligen Faktor verkleinert, sodass die Kosten mit der Pixelzahl sinken. Auf einem Full-HD-Bild mit einem 128x128-Objekt war 2 gemessen etwa sechsmal schneller bei unverändertem Score und 4 etwa vierzehnmal schneller. Das erkauft es mit Präzision - Positionen werden auf bin-size Pixel quantisiert - und mit Detail, denn ein weit genug gebinntes Objekt verliert die Kanten, auf die sich der Detektor stützt, und wird abgelehnt, was als fehlgeschlagener Durchlauf und nicht als fehlendes Teil gemeldet wird. Positionen werden immer in den Pixeln des Bildes gemeldet, das Sie konfiguriert haben. input/pyramid klingt wie eine Geschwindigkeitseinstellung und ist keine: Tiefere Pyramiden waren gemessen etwas langsamer.

Eine Region of Interest pro Durchlauf, input/crop, und die Wahl, ob Positionen in Bild- oder Ausschnittskoordinaten gemeldet werden.

Ein Status auf jeder Operation: output/status-code und output/status-text, wobei ein negativer Code immer bedeutet, dass der Durchlauf fehlgeschlagen ist und nichts erzeugt hat.

Wissenswert

Die zu durchsuchende Region wird genau wie konfiguriert durchsucht - der Detektor braucht eine bestimmte Größe und füllt bis dahin auf, statt einen Teil Ihrer Region wegzulassen. Positionen bleiben exakt, sodass ein bei y=300 gemeldeter Treffer bei y=300 im von Ihnen konfigurierten Bild liegt.

Ein leeres Ergebnis bedeutet, dass das Objekt nicht im Bild war, und nichts anderes. Jeder andere Grund, aus dem eine Suche leer zurückkommen könnte - das Bild des Objekts fehlt, das Bild ist unbrauchbar, eine Pyramidenebene ist ungültig, das Bild hat zu wenig Kontrast, als dass der Detektor sich darauf stützen könnte, bin-size hat zu wenig davon übrig gelassen -, wird vor dem Start der Suche abgefangen und als negativer Statuscode gemeldet. Siehe Ausführungsstatus.

Ungültige Eingaben werden alle gemeinsam gemeldet, jede mit Nennung der fehlerhaften Eingabe und ihres Werts.

Objekte und das Objektverzeichnis werden immer relativ zum Konfigurationsverzeichnis der Anwendung interpretiert. Absolute Pfade und Pfade, die daraus hinausführen, werden abgelehnt.