280 likes | 540 Views
Statische Gestenerkennung auf einem Smartphone. Sebastian Linder, Jan Menges, Markus Jeckle. Inhalt. Projektübersicht Gestenerkennung OpenCV Android OpenCV auf Android Rock, Paper, Scissor (App) Lessons learned. 1. Projektübersicht.
E N D
Statische Gestenerkennung auf einem Smartphone Sebastian Linder, Jan Menges, Markus Jeckle
Inhalt • Projektübersicht • Gestenerkennung • OpenCV • Android • OpenCV auf Android • Rock, Paper, Scissor (App) • Lessonslearned
1. Projektübersicht • Anwendung auf Smartphone, die statische Gesten (z. B. "Daumen hoch" für OK) erkennt • Teil der Arbeit ist die Auswahl einer passenden Plattform (Android, Windows Mobile, Symbian, iPhone OS) • Verwendung passender Bildverarbeitungsalgorithmen (OpenCV)
2.1 Methoden I • Stereoskopie • Wiedergabe von Bildern mit räumlichem Eindruck der Tiefe („3D“) • Bewegungsmessung: 3D-Position + 3D-Veränderung = 6D-Vision=> dyn. Gesten
2.1 Methoden II • Histogramm • Allgemein: Säulendiagramm gibt die Häufigkeit der skalierter Merkmale wieder • Im Bildbereich: Darstellung Tonwerte, z.B. Helligkeitsverteilung • Gestenerkennungmittels Histogram of Oriented Gradients (HOG) möglich: Häufigkeitsverteilung von Steigungen
2.1 Methoden III • Template-Matching / Bildvergleich • Suche nach den Positionen, an denen das Template zu finden ist • einfacher Algorithmus • Links oben beginnend Pixel für Pixel nach rechts/unten und den Wert (zwischen 0 & 1: 0 = identisch, 1 = keine Ähnlichkeit) in eine Matrix schreiben • Problem: Rotation / Helligkeitsänderung
3. OpenCV • freie Bibliothek („Open“) mit Algorithmen für Bildverarbeitung und maschinelles Sehen („Computer Vision") • geschrieben in C/C++ • läuft auf Androd, FreeBSD, iOS, Linux, MacOS, Windows & OpenBSD
3.1 Anwendungen von OpenCV • Segmentierung • Gesichtserkennung • Gestenerkennung • Bewegungserkennung • Objekterkennung
4. Android • von Google entwickeltes OS für Smartphones und Tablets • SW-Entwicklung sehr gut dokumentiert (http://developer.android.com) • C++ Programmierung mittels NDK (NativeDK) • CPU-intensive Anwendungen • Grafik-Anwendungen • Spiele (OpenGL ES 2.0) • Java-Programmierung mittels SDK (SoftwareDK) • ausführbar in Dalvik Virtual Machine • Integration in Eclipse mittels ADT-Plugin (Android Development Tools) • Visual Layout Editor: GUI-Builder • XML-Editoren • DDMS (DalvikDebug Monitor Server)
5. OpenCV auf Android I “Android is awesome, and so is OpenCV, so wouldn't it be awesome if they could work together? Well they can, and its now officially supported in OpenCV.” • eigener Trunk imOpenCV-Repository • mittels JNI (Java Native Interface) umgesetzt • UnsereErfahrung: Kompilieren & Cross-Kompilierenerfolgslos • ImmerwiederneueKompilier- & Linkerfehler • VorgehennachdiversenAnleitungenführtenichtzumErfolg (statische Shared Objects)
5.1 JavaCV • Wrapper für häufig genutzte CV-Bibliotheken, darunter OpenCV • geschrieben von Samuel Audet, der auch Support leistet • bietet vorkompiliertes OpenCV2.2 für Android 2.2 und ARM5/7 an • Dokumentation sehr dünn (Quick Start Guide) • teilweise undokumentierte Unterschiede im Funktionsaufruf (z.B. Parameterzahl)
6. Rock, Paper, Scissor • Rock, Paper, Scissor (Stein, Papier, Schere) als Proof-of-Concept der Gestenerkennung auf Smartphone
6.1 Verlauf der Entwicklung Gestenerkennung
6.1 Ablauf der Gestenerkennung II • Bild kommt als YUV NV21 von der Kamera • Konvertierung in RGB, um in OpenCV weiter zu verarbeiten • Konvertierung in den HSV-Farbraum, um die zu segmentieren ohne auf Lichtverhältnisse Rücksicht nehmen zu müssen
6.1 Ablauf der Gestenerkennung III • „Smoothing“ (Verwischen) des Bildes, Dilatation (expandieren) & Erosion (schrumpfen) • Farbmessung von 5 Punkten im mittleren Bereich des Kamerabildes • Ist die gemessene Durchschnittsfarbe Hautfarben? • Wenn ja: Segmentierung im HS(V)-Farbraum mit Durchschnittsfarbe (+- delta), Dilatation & Erosion
6.1 Ablauf der Gestenerkennung IV • Alle Konturen werden erkannt • Größte Fläche/Kontur (Hand) im Bild wird gesucht
6.1 Ablauf der Gestenerkennung V • Die größte Kontur wird ausgeschnitten („Region ofinterest“), und dem Template-Matching übergeben • Auswahl der in Frage kommenden Geste(n) (Stein Papier/Schere) aufgrund des Seitenverhältnisses • Zuschneiden des Templates, so dass es mindestens einmal komplett in das Bild passt
6.1 Ablauf der Gestenerkennung VI • Template-Matchingfüllt Matrizen (für jede untersuchte Geste eine) mit den Matching-Werten, daraus suchen wir uns jeweils das Minimum (= höchste Identität) • Das kleinste Minimum ist die erkannte Geste, sofern sie einen Schwellwert nicht überschreitet
7. Lessonslearned I • Eine sinnvolle Anwendung der Gestenerkennung auf Smartphones ist kaum zu finden • Bedienung mittels großer Touchscreens oft komfortabler • hoher Akkuverbrauch durch Kamera schließt Dauernutzung aus • OpenCV sehr mächtige Bibliothek, welche gut dokumentiert ist und viel Anwendung im „Augmented Reality“-Bereich findet • Android Trunk jedoch noch in den Kinderschuhen, jedoch wird daran weiter gearbeitet • Android-Entwicklung einfach zu erlernen • sehr gute Dokumentation • viele Communities & Tutorials • Design mittels Layout Editor anfangs kompliziert, nach Eingewöhnungszeit aber nutzbar
7. Lessonslearned II • Gestenerkennung an sich gut erforscht, jedoch stark von Lichtverhältnissen abhängig • Template-MatchingMethode nicht zuverlässig genug • Gesten sehen nie gleich aus (keine Muster) • Rotation nicht berücksichtigt (implementierbar, aber teuer) • HOGs vermutlich besserer Ansatz, jedoch höherer Aufwand • Sinnvolles Themengebiet für weitere Projektarbeiten • Netzwerkkomponente würde RPS mehr Sinn verleihen • unter Android aufgrund der Performance eventuell mittels NDK
Statischen Gestenerkennung auf einem Smartphone Vielen Dank für die Aufmerksamkeit!