---
title: "Ein Objekt finden"
product: "LumiScan Object Finder"
component: "lumiscan-object-finder-de"
version: "1.1.0"
display_version: "1.1.0.7"
latest_version: true
language: "de"
url: "https://docs.hdvisionsystems.com/de/lumiscan-object-finder-de/1.1.0/lumiscan-object-finder/finding-an-object.html"
---

# Ein Objekt finden – LumiScan Object Finder

`<module>/find-object` durchsucht ein Bild einmal nach einem bekannten Objekt.

## Eingaben

| Knoten | Standard | Bedeutung |
| --- | --- | --- |
| `input/input-image-address` | (leer) | Adresse des zu durchsuchenden Bildknotens. |
| `input/object-id` | (leer) | Welches Objekt gesucht wird. **Erforderlich** - ein leerer Wert wird abgelehnt. |
| `input/confidence-threshold` | `0.6` | Kleinster akzeptierter Score, 0 bis 1. |
| `input/nms-min-dist` | `0.0` | Mindestabstand in Pixeln zwischen zwei gemeldeten Treffern. |
| `input/pyramid` | `[1,2]` | Ebenen der Bildpyramide, auf denen die Suche läuft. Keine Geschwindigkeitseinstellung - siehe [Geschwindigkeit](https://docs.hdvisionsystems.com/de/lumiscan-object-finder-de/1.1.0/lumiscan-object-finder/tuning-the-search.html#speed). |
| `input/result-coordinate` | `IMAGE` | `IMAGE` oder `CROP` - siehe unten. |
| `input/crop/*` | alle `0` | Zu durchsuchende Region; alles null durchsucht das ganze Bild. |
| `input/preprocess/bin-size` | `1` | Suche mit geringerer Auflösung: schneller, weniger präzise. Siehe [Bin-Größe](https://docs.hdvisionsystems.com/de/lumiscan-object-finder-de/1.1.0/lumiscan-object-finder/tuning-the-search.html#bin-size). |
| `input/preprocess/blur-*` | aus | Optionale Glättung - siehe [Die Suche abstimmen](https://docs.hdvisionsystems.com/de/lumiscan-object-finder-de/1.1.0/lumiscan-object-finder/tuning-the-search.html). |

## Ausführen

Setzen Sie die Eingaben und schreiben Sie dann auf `<module>/find-object/execute`:

```
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/confidence-threshold = 0.7
module-1/find-object/input/nms-min-dist         = 40
write module-1/find-object/execute
```

Lesen Sie dann `output/status-code` und `output/result`.

> [!TIP]
> Setzen Sie `nms-min-dist` auf etwa die halbe Größe des Teils in Pixeln. Ohne diesen Wert wird ein einzelnes Teil oft mehrfach gemeldet, als Häufung leicht verschobener Treffer.

## Ein Objekt pro Suche

`input/object-id` nennt einen der Einträge auf `system/objects` 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 bedeutet also mehrere Detektoren, und jeder verarbeitet das gesamte Bild erneut - das ist der teure Teil. `find-object` einmal pro Objekt auszuführen, macht diese Kosten sichtbar, statt sie hinter einer leeren Eingabe zu verstecken.

Um gemischte Teile zu sortieren, führen Sie die Methode einmal pro Objekt aus und vergleichen die Scores.

## Das Ergebnis

`output/result` ist ein `object_find_result`-Flatbuffer.

| Feld | Bedeutung |
| --- | --- |
| `matches[].x`, `.y` | Linke obere Ecke der gefundenen Vorlage, in Pixeln. |
| `matches[].width`, `.height` | Größe der Vorlage, die übereingestimmt hat, damit der Treffer gezeichnet werden kann. |
| `matches[].score` | Ähnlichkeit von 0.0 bis 1.0. |
| `matches[].object_id` | Das gefundene Objekt; bei jedem Treffer eines Durchlaufs dasselbe. |
| `best_index`, `best_score`, `best_object_id` | Der Treffer mit dem höchsten Score. |
| `image_width`, `image_height` | Der Bildausschnitt, in dem die Koordinaten liegen. |
| `confidence_threshold` | Der angewendete Schwellwert. |
| `timestamp` | Mikrosekunden seit Epoche, gesetzt beim Abschluss des Durchlaufs. |

Die Treffer sind nach Score sortiert, sodass `matches[0]` der beste ist.

Das Ergebnis enthält keine Rotation: Das gemeldete Rechteck ist achsenparallel. Wenn Sie wissen müssen, welche Orientierung gefunden wurde, geben Sie jeder Orientierung ein eigenes Objekt - `screw-m6-front`, `screw-m6-tilted` - und suchen Sie nacheinander danach. Die Antwort ist dann die `object_id`, die übereingestimmt hat.

## Bild- und Ausschnittskoordinaten

`input/result-coordinate` wählt das Bezugssystem, in dem Positionen gemessen werden:

- `IMAGE` (Standard) - das vollständige Bild an `input-image-address`. Das braucht ein Robotergriff.
- `CROP` - die durchsuchte Region, deren linke obere Ecke zu (0,0) wird.

`image_width` und `image_height` folgen derselben Wahl, sodass das Normieren einer Koordinate mit ihnen in beiden Fällen korrekt ist.

## Die Region wird genau wie angegeben durchsucht {#multiple-of-16}

Jede Größe funktioniert, und kein Teil von `input/crop` wird weggelassen. cv::linemod braucht zwar ein Bild, dessen Größe ein bestimmtes Vielfaches ist, aber der Detektor **füllt** intern bis dahin auf, statt eine ihm genehme Größe zu verlangen. Nichts, was Sie konfigurieren, muss also eine Regel erfüllen.

Früher wurde stattdessen beschnitten, was bis zu 7 Pixel am rechten und unteren Rand kostete - 31 bei `bin-size` 4. Das Beschneiden war schlimmer, als es aussah: Es verwarf Spalten, die die Kamera tatsächlich aufgenommen hatte, **und** ließ den toten Rand von cv::linemod - es ignoriert den äußeren Ring dessen, was es erhält - auf den verbliebenen Pixeln liegen. Gemessen erreichte ein Objekt an der letzten nutzbaren Position **0.79 beschnitten gegenüber 1.00 aufgefüllt**.

Die Auffüllung repliziert die Randpixel nach außen, erzeugt also keine eigenen Gradienten und kann nicht mit einer Form verwechselt werden; ein Treffer wird nie aus ihr heraus gemeldet. Sie wird nur rechts und unten angefügt, sodass jede gemeldete Position weiterhin eine Position im von Ihnen konfigurierten Bild ist.

## Was ein leeres Ergebnis bedeutet

Ein leeres Ergebnis mit `status-code` 1 bedeutet **das Objekt war nicht im Bild**, und nichts anderes.

Jeder andere Grund, aus dem eine Suche leer zurückkommen könnte - das Objekt hat kein Bild, das Bild ist unbrauchbar, eine Pyramidenebene ist ungültig, `bin-size` hat zu wenig vom Objekt zum Erkennen übrig gelassen - wird vor dem Start der Suche erkannt und als negativer Statuscode gemeldet. Siehe [Ausführungsstatus](https://docs.hdvisionsystems.com/de/lumiscan-object-finder-de/1.1.0/lumiscan-object-finder/execution-status.html).

## Erkennungsgeschwindigkeit

Das Bild wird bei der ersten Verwendung zu einem Detektor kompiliert, und dieser Detektor wird so lange wiederverwendet, wie Einstellungen und Objekt unverändert bleiben. Das Ändern einer Eingabe oder das Speichern einer neuen Vorlage baut ihn beim nächsten Durchlauf neu auf.

Das Kompilieren ist mit Abstand der teuerste Teil eines Durchlaufs. Eine Produktionsschleife, die wiederholt mit unveränderten Einstellungen ausführt, zahlt diese Kosten also einmal. Wer vor jedem Aufruf eine Einstellung ändert, zahlt sie jedes Mal.

Um die Suche selbst zu beschleunigen, verengen Sie zuerst `input/crop` und erhöhen dann `input/preprocess/bin-size`. `input/pyramid` zu erhöhen hilft **nicht** - siehe [Geschwindigkeit](https://docs.hdvisionsystems.com/de/lumiscan-object-finder-de/1.1.0/lumiscan-object-finder/tuning-the-search.html#speed).

## Jedes Bild einer Kamera durchsuchen

`find-object` durchsucht ein Bild pro Aufruf. Wie ein Modul mit denselben Eingaben jedes Bild durchsucht, das eine Kamera streamt, lesen Sie in [Objekte auf einem Bild-Stream finden (experimentell)](https://docs.hdvisionsystems.com/de/lumiscan-object-finder-de/1.1.0/lumiscan-object-finder/processing-an-image-stream.html).
