Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss18:teilprojekte:tracking

Tracking

Die Pucks auf dem Luftkissentisch werden mithilfe von zwei verschiedenen Algorithmen verfolgt.
Um die Pucks im ersten Frame des Videos zu finden, werden sogenannte HAAR-Algorithmen verwendet. Übergibt man einem solchen Algorithmus ein Bild und eine speziell erstellte XML-Datei mit Suchparametern, gibt er die Bereiche, in denen sich die gesuchten Objekte befinden, zurück.
Diese Bereiche werden dann von dem zweiten Algorithmus: Camshift verwendet, um die Pucks in allen weiteren Frames zu verfolgen. Dazu sucht der Algorithmus den Puck innerhalb eines größeren Bereichs um die vorherige Position herum. Die Koordinaten der Bereiche, in denen die Pucks gefunden wurden, werden dann für jeden Frame an die Haupt-Datenstruktur übergeben und dort verarbeitet.

Da sich Camshift als zu unzuverlässig für unsere Anwendung herausgestellt hat, haben wir uns stattdessen für den KCF-Tracker (Kernelized Correlation Filters) entschieden. Dieser brachte deutlich bessere Ergebnisse, wenn das Tracking funktioniert, Kollisionen führten jedoch oft zu Fehlschlägen und damit zum Verlust des jeweiligen Pucks. Um dieses Problem zu beheben, wollen wir die Pucks mit einem Punkt in der Mitte makieren und nur diesen Mittelpunkt verfolgen, sodass die Box, die verfolgt wird, sich niemals mit anderen Boxen schneiden kann. Um diesen Ansatz zu testen und mit dem Ansatz der Verfolgung des gesamten Pucks (Boxen können sich schneiden) zu vergleichen, haben wir eine Simulation mehrerer Pucks in Processing (Java) geschrieben, aufgezeichnet und mit dem Tracker ausgewertet. Die Puck-Simulation basiert auf der Aufgabe, ein Pong-Spiel zu schreiben, aus dem Robotiklabor im WiSe 2017/18.

Der reale Test der Idee, die Pucks zu markieren hat gezeigt, dass der Tracker dadurch sehr viel präziser und zuverlässiger läuft. Um die Zuverlässigkeit noch weiter zu erhöhen, überprüft der Tracker nach jedem Frame, ob noch alle Pucks vorhanden sind und versucht, falls notwendig, mithilfe der Kaskade verlorene Pucks wiederzufinden, damit der Tracker diese weiter verfolgen kann. Mit dieser Maßnahme können Fälle, wo ein Puck für einzelne Frames verdeckt (von der Route des Pucks abhängig) oder zu schnell ist, umgangen werden. Da wir bei dem großen Test mit markierten Pucks mit vielen Pucks gearbeitet haben, wurde die schlechte Performance unserer Implementierung des Trackers sehr auffällig. Um die Performance zu verbessern, haben wir das Tracking der Pucks mithilfe von Multi-Threading parallelisiert. Dies ist möglich, da jeder Puck eine eigene, unabhägige Instanz des KCF-Trackers verwendet. Dadurch läuft der Prozess des Herausfinden der neuen Position eines Pucks jetzt parallel und die Daten werden am Ende durch Thread-Synchronisierung wieder zusammengeführt und auf dem Frame angezeigt. Die derzeitige Implementierung verwendet so viel Prozessorleistung, wie der verwendete PC zulässt.


Autor: Dennis Claußner

ss18/teilprojekte/tracking.txt · Zuletzt geändert: 2018/08/24 18:07 von dclaussner