Schlagwort-Archive: OpenCV

RAT: Gesichtserkennung und Stereoskopie

15_2_4Hier abgebildet der 4 Achsen-Robot-ARm von Sainsmart, den ich inzwischen um eine vierte Achse erweitert habe (siehe Fotos unten), der die „Augen“ meines Versuchsaufbaus trägt. Die Bewegung des Arms ist zurzeit deaktiviert, wird später das Tracken eines Objekts ermöglichen.
Zuletzt hatte ich gezeigt, dass es mit OpenCV relativ simpel ist, eine Gesichtserkennung zu realisieren. Jetzt geht es eine kleinen Schritt weiter. Nun soll die Software erkennen, welche konkrete Person gerade vor der Linse ist. Dazu habe ich einen Algorithmus entworfen, der aus dem aktuellen Frame die relevanten Bildteile herausschneidet, normaliusiert und mit einer Datenbank von bekannten Mustern vergleicht. Logischerweise sollte dieser Abgleich performant sein. Momentan habe ich knapp 800 Thumbnails in der Datenbank, die je Identifizierung einmal komplett durchlaufen werden. Deshalb habe ich die Muster und das Live-Bild auf 100×100 Pixel heruntergerechnet. Der Abgleich selbst läuft zurzeit (auf dem PC) in 0.17 Sekunden durch. Noch akzeptabel! Mal schauen, wie später der Raspberry damit klar kommt. Der Vergleich ist reine Mathematik. Das Ergebnis wird anhand des besten Wertes und eines zu erreichenden Schwellwertes entschieden.

face_thumbsDanach gibt es noch ein Zuverlässigkeits-Gate, dass die Fehlerlesungen nach Möglichkeit herausfiltert und so die Erkennung glättet. Die Treffergenauigkeit lässt noch zu wünschen übrig, wird aber mit der Zahl der divergierenden Musterdateien besser. (siehe Video)
Zusätzlich gibt es einen Reorg-Lauf, der dafür sorgt, dass mathematisch redundante Muster entfernt werden.

Stereoskopie

Mein Versuchsaufbau besitzt 2 parallel angeordnete Kameras. Die Idee dahinter ist, dass die Kameras als zusätzliche Möglichkeit zur Orientierung benutzt werden.
Ein Aspekt dabei ist die Stereoskopie. Vereinfacht: Beide Bilder werden miteinander verglichen, die sich durch die unterschiedlichen Perspektiven ergebenden Unterschiede ergeben eine so genannte Depthmask, letztlich ein Bild, dass etwas darüber aussagt, wie weit ein Gegenstand entfernt ist. In diesem Beispiel bedeutet das, je heller eine Fläche, umso näher ist sie an den Kameras.

IMG_0856
4 Axis Arm mit installierten Stereo-Kameras
IMG_0854
Die zusätzliche 5. Achse zum Neigen der Kamera-Ebene

 IMG_0855

RAT: putting it all together

Projekt-Psychologie: Es ist vielleicht die unbewusste Angst vor dem finalen Schritt. Je näher ich dem Ziel komme, umso langsamer erscheinen mir selbst die Fortschritte. In diesem Beitrag widme ich mich dem Thema Multitasking. Die Ressourcen des Raspbery sind begrenzt, so viel ist mal klar. Mit den sehr rechenintensiven visuellen Komponenten heißt es also haushalten. In der Software laufen mehrere unabhängige Tasks und meine Devise lautet, durch Umverteilung von Rechenzeit, den jeweils wichtigen Tasks zu unterstützen.

  1. Die Haupt-Ereignisschleife (rat_controller), in der alle events zusammenlaufen und verarbeitet werden.
  2. Der Sensortask, der fortlaufend den Arduino abfragt und von dort die Meßwerte der Ultraschall-Abstands-Sensoren, des Kompass usw. bekommt.
  3. Der Video-Tasks, der die Kamerabilder auswertet und nach „interessanten“ Objekten fahndet (mein kleiner gelber Ball)
  4. Darüber hinaus gibt es noch den Audio-Task, der zurzeit aber noch nicht aktiv ist (,weil noch nicht so wichtig).

Das alles spielt zusammen. Die Frage, ob die Meßfrequenz im Zusammenspiel mit der Videoauswertung akzeptable Ergebnisse liefert, erhoffe ich mir von den nächsten Experimenten.

 

OpenCV: Catch The Ball

Die Fähigkeiten des RAT entwickeln sich fort. Mir drängt sich der Vergleich mit der wachsenden Wahrnehmungsfähigkeit eines Säuglings auf, der deine Umgebung zunächst nur schemenhaft erkennt, um dann immer bewusster auf Signale zu reagieren. Man verzeihe mir diese Hybris.

Logische Fortschreibung des visuellen Subsystems ist, wie im letzten Beitrag angekündigt, das Erkennen von Konturen bzw. Objekten. Am einfachsten sind dabei simple geometrische Formen, wie zum Beispiel ein Kreis als Projektion eines runden Körpers. OpenCV bietet dafür leistungsfähige Funktionen. In diesem Falle nutze ich HoughCircles(), was mir eine Liste von erkannten Kreisformen innerhalb eines Bildes (oder Frames) liefert. Die visuellen Fähigkeiten des RAT habe ich in einer Subklasse gebündelt, sinnigerweise rat_eyes genannt.

 

Für eine höhere Verlässlichkeit der Ergebnisse muss man mit den Parametern experimentieren, um das Optimum zu finden. Unter Anderem spielen die konkreten Lichtverhältnisse eine nicht unerhebliche Rolle. Wie im Video zu erkennen ist, springt das Erkennungsergebnis von Frame zu Frame gelegentlich. Dafür benötige ich eine Software-Dämpfung, die letztlich aus einer Menge von Ergebnissen das wahrscheinlich richtige herausfiltert.

Die Entfernung zum Objekt lässt sich theoretisch auf 2 Wegen ermitteln.

  1. Wenn das Objekt bekannt ist (die tatsächliche Größe des Balls), lässt sich über den ermittelten Radius des Bildes die Entfernung zurückrechnen. Wenig elegant, weil wenig flexibel. Je weiter die Entfernung, umso ungenauer zudem.
  2. Mit dem Bild der zweiten Kamera ist die Verschiebung des Objekts abhängig von der Entfernung (Disparität). Diese Methode ist unabhängig vom betrachteten Objekt, also flexibler. Auch steigt der Messfehler mit höherer Entfernung.

sonderschau_net_bild_1_gross

OpenCV: Die Griechen und mein RAT

Eine Woche Kreta war einerseits sehr erholsam, andererseits war es eine erzwungene Bastelpause beim Projekt RAT. Viel Zeit, sich über Grundsätzliches Gedanken zu machen. Mein ganz privates „Quo vadis“. Im Kern bleibt natürlich der Weg das Ziel. Gleichwohl kann es nicht schaden, den Versuch einer Zieldefinition zu unternehmen.

Was also soll der kleine Racker letztendlich können?

  1. Die Umgebung wahrnehmen und daraus Handlungen ableiten. Der Begriff der Umgebung bedarf der genaueren Definition. Es geht um visuelle Wahrnehmung, also Gegenstände eines bekannten Musters (der gelbe Ball,  die rote Tasse, der olle Schuh,…)  oder gar Personen (mich, Mutti, irgendein anderer Mensch, Frau Merkel…). Umgebung bedeutet für mein Verständnis aber auch Hören. Der RAT soll über Spracherkennung verfügen und einfache, gesprochene Kommandos entgegennehmen und ausführen können. Entsprechende Frameworks werden im www reihenweise angeboten.
  2. Bewegung ohne Reue. Der RAT soll sich autonom durch die Gegend bewegen können, konkrete Ziele ansteuern und dabei  Hindernissen ausweichen.