Eine Vorlage finden
Durchsucht ein Live-Kamerabild nach einer gespeicherten Vorlage und meldet jedes gefundene Vorkommen.
Adresse, relativ zum Modul:
find-template/
Eingaben
Die beiden erforderlichen Werte sind das zu durchsuchende Bild und die gesuchte Vorlage. Alles andere hat einen funktionierenden Standardwert; die Parameter, die die Suche selbst steuern, sind in Die Suche abstimmen beschrieben.
| Knoten | Typ | Standard | Beschreibung |
|---|---|---|---|
|
string |
(leer) |
Data-Layer-Adresse des zu durchsuchenden Bilds. Erforderlich |
|
string |
(leer) |
Gesuchte Vorlage, wie auf |
Das Verzeichnis, aus dem sie gelesen wird, ist system/template-dir, das sich die gesamte Anwendung teilt -
siehe Speicherung der Vorlagen.
Ausgaben
| Knoten | Typ | Beschreibung |
|---|---|---|
|
flatbuffer |
Die gefundenen Treffer, nach Konfidenz sortiert |
|
int16 |
Ausführungsstatus |
|
string |
Dasselbe Ergebnis in Worten |
Das Ergebnis
output/result ist ein FlatBuffer vom Typ hdv.template_match.Result:
| Feld | Typ | Beschreibung |
|---|---|---|
|
array |
Ein Eintrag pro gefundenem Vorkommen, nach Konfidenz sortiert, höchste zuerst |
|
ulong |
Index des besten Treffers. Immer |
|
float |
Konfidenz des besten Treffers, oder |
|
string |
Die für diesen Durchlauf verwendete Vorlage |
|
string |
Der verwendete Matching-Algorithmus |
|
float |
Der angewendete Schwellwert |
|
uint |
Größe des durchsuchten Bilds, damit Koordinaten normalisiert werden können |
|
ulong |
Mikrosekunden seit der Epoche, aufgenommen beim Abschluss der Suche |
Jeder Eintrag in matches enthält:
| Feld | Typ | Beschreibung |
|---|---|---|
|
struct |
|
|
float |
Treffer-Score zwischen 0 und 1 |
|
float |
Der Skalierungsfaktor der Vorlage, bei dem dieser Treffer gefunden wurde |
|
float |
Die Drehung der Vorlage, bei der dieser Treffer gefunden wurde, in Grad |
|
Eine leere Liste |
Vorgehen
-
Setzen Sie
input/input-image-addressundinput/template-name. -
Passen Sie die Suchparameter an, wenn die Standardwerte nicht passen - siehe Die Suche abstimmen.
-
Schreiben Sie auf
find-template/execute. -
Lesen Sie
output/status-code.1bedeutet, dass die Suche gelaufen ist. -
Lesen Sie
output/resultfür die Treffer oderoutput/status-text, wenn der Statuscode negativ war.
Einmal gesetzte Eingaben behalten ihre Werte; eine wiederholte Suche ist also ein einziger Schreibvorgang auf
execute.
Häufige Fehler
Fehler sind Schritt für Schritt unter Fehlerbehebung beschrieben:
Nur einen Teil des Bilds durchsuchen
input/crop/ beschränkt die Suche auf ein Rechteck - das ist schneller und vermeidet Treffer auf einem Teil,
das zufällig an anderer Stelle im Bild erscheint. Alle vier Werte sind uint16.
Eine Breite oder Höhe von null bedeutet "bis zum Bildrand" auf dieser Achse:
| Einstellung | Durchsuchte Region |
|---|---|
alle vier null (Standard) |
das ganze Bild |
|
von (100, 50) bis zur unteren rechten Ecke |
|
ein 200 Pixel hohes Band bis zum rechten Rand |
Eine Region, die über einen Rand hinausreicht, wird abgelehnt, nicht beschnitten - ein kleinerer Suchbereich
als angefordert würde sich erst viel später bemerkbar machen, als Treffer, die einfach fehlen. Der Grund nennt
die Eingabe und die verletzte Grenze, zum Beispiel
crop/startX + crop/width (100 + 541 = 641) exceeds the image width 640. Eine Region, die kleiner als die
Vorlage ist, wird ebenfalls abgelehnt, mit Status -5.
Auf welches Bild sich die Positionen beziehen
input/result-coordinate legt fest, worauf sich die Positionen in output/result beziehen:
| Wert | Bedeutung |
|---|---|
|
Das ganze Bild unter |
|
Die durchsuchte Region, deren obere linke Ecke (0,0) ist |
Die Einstellung ändert nur, wie das Ergebnis gemeldet wird, nie, was gefunden wird. image_width und
image_height im Ergebnis folgen derselben Wahl.
Was eine fehlgeschlagene Suche hinterlässt
Die Treffer werden gelöscht, bevor die Suche beginnt; ein Durchlauf, der aus irgendeinem Grund fehlschlägt,
hinterlässt output/result also leer, statt die Treffer eines früheren Bilds zu behalten. Wer das Ergebnis
liest, ohne output/status-code zu prüfen, sieht daher nichts und keinen veralteten Treffer.
Status -1 (belegt) ist die Ausnahme: Dieser Aufruf wurde nie ausgeführt und lässt das Ergebnis der laufenden
Suche unberührt.
Jedes Bild einer Kamera durchsuchen
find-template durchsucht ein Bild pro Aufruf. Wie ein Modul jedes Bild durchsucht, das eine Kamera streamt,
mit denselben Eingaben, steht in
Vorlagen in einem Bild-Stream finden (experimentell).