Statische Gestenerkennung auf einem Smartphone

28
STATISCHE GESTENERKENNUNG AUF EINEM SMARTPHONE Sebastian Linder, Jan Menges, Markus Jeckle

description

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. - PowerPoint PPT Presentation

Transcript of Statische Gestenerkennung auf einem Smartphone

Page 1: Statische Gestenerkennung auf einem Smartphone

STATISCHE GESTENERKENNUNG AUF EINEM SMARTPHONESebastian Linder, Jan Menges, Markus Jeckle

Page 2: Statische Gestenerkennung auf einem Smartphone

Inhalt1. Projektübersicht2. Gestenerkennung3. OpenCV4. Android5. OpenCV auf Android6. Rock, Paper, Scissor (App)7. Lessons learned

Page 3: Statische Gestenerkennung auf einem Smartphone

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)

Page 4: Statische Gestenerkennung auf einem Smartphone

1.1 Welche Anwendung?• Wieso sollte der Nutzer dazu Gesten benutzen?Heimsteuerung

(Jalousien/Radio/Garage)

• deutlich schneller und bequemer per TouchscreenGalerie-Steuerung

• hoher Akkuverbrauch durch Dauereinsatz der Kamera• Umsetzung erfordert Kommunikation Smartphone

AutoradioAuto-Radio-Steuerung

• als Showcase/Proof-of-concept geeignet, da Gesten Bestandteil des Spiels sindStein-Papier-Schere Spiel

Page 5: Statische Gestenerkennung auf einem Smartphone

1.2 Welche Plattform?• Einarbeitung in Objective-C zu aufwendig

& langwierigiOS• veraltete Plattform => fehlende

UnterstützungWindows Mobile

• veraltete Plattform• Smartphones mit Symbian?Symbian• große Community• Support (SDK)• intern seit OpenCV2.2 unterstützt

(theoretisch)Android

Page 6: Statische Gestenerkennung auf einem Smartphone

2. Gestenerkennung

• Form der Hand ausschlaggebend, nicht die Bewegung

• Geringere Leistungsanforderung, daher für Smartphones eher geeignet

Statische Geste

• Bewegung ausschlaggebend• Hohe Leistungsanforderung (Microsoft Kinect)

Dynamische Geste

Page 7: Statische Gestenerkennung auf einem Smartphone

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

Page 8: Statische Gestenerkennung auf einem Smartphone

2.1 Methoden II Histogramm

Allgemein: Säulendiagramm gibt die Häufigkeit der skalierter Merkmale wieder

Im Bildbereich: Darstellung Tonwerte, z.B. Helligkeitsverteilung

Gestenerkennung mittels Histogram of Oriented Gradients (HOG) möglich: Häufigkeitsverteilung von Steigungen

Page 9: Statische Gestenerkennung auf einem Smartphone

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

Page 10: Statische Gestenerkennung auf einem Smartphone

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 &

OpenBSD2006Version 1.0

2009Version 2.0

2011Version 2.2 (Android-Unterstützung)

Page 11: Statische Gestenerkennung auf einem Smartphone

3.1 Anwendungen von OpenCV

Segmentierung Gesichtserkennung Gestenerkennung Bewegungserkennung Objekterkennung

Page 12: Statische Gestenerkennung auf einem Smartphone

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 (Dalvik Debug Monitor Server)

Page 13: Statische Gestenerkennung auf einem Smartphone

4.1 Visual Layout Editor

Page 14: Statische Gestenerkennung auf einem Smartphone

4.2 DDMS

Page 15: Statische Gestenerkennung auf einem Smartphone

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 im OpenCV-Repository mittels JNI (Java Native Interface) umgesetzt Unsere Erfahrung: Kompilieren & Cross-Kompilieren erfolgslos

Immer wieder neue Kompilier- & Linkerfehler Vorgehen nach diversen Anleitungen führte nicht zum Erfolg (statische

Shared Objects)

Page 16: Statische Gestenerkennung auf einem Smartphone

5. OpenCV auf Android II

Page 17: Statische Gestenerkennung auf einem Smartphone

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)

Page 18: Statische Gestenerkennung auf einem Smartphone

6. Rock, Paper, Scissor Rock, Paper, Scissor (Stein, Papier, Schere) als Proof-of-Concept

der Gestenerkennung auf Smartphone

Benutzer zeigt die

Geste

Smartphone erkennt

diese

Computergeste wird generiert

Vergleich der beiden

Gesten

Gewinner erhält Punkt

Page 19: Statische Gestenerkennung auf einem Smartphone

6.1 Verlauf der Entwicklung1.

Prototyp

(natives

OpenCV auf

Windows)

2. Prototyp (JavaCV auf

Windows)

JavaCV

auf Android

RPS-SpielGestenerkennung

Page 20: Statische Gestenerkennung auf einem Smartphone

Konvertierungen

Segmentierung

Konturenfindung

Zuschneide

n

Template-Matching

6.1 Ablauf der Gestenerkennung I

Page 21: Statische Gestenerkennung auf einem Smartphone

Konvertierungen

Segmentierung

Konturenfindung

Zuschneide

n

Template-Matching

1. Bild kommt als YUV NV21 von der Kamera

2. Konvertierung in RGB, um in OpenCV weiter zu verarbeiten

3. Konvertierung in den HSV-Farbraum, um die zu segmentieren ohne auf Lichtverhältnisse Rücksicht nehmen zu müssen

6.1 Ablauf der Gestenerkennung II

Page 22: Statische Gestenerkennung auf einem Smartphone

6.1 Ablauf der Gestenerkennung III

Konvertierungen

Segmentierung

Konturenfindung Zuschneiden Template-

Matching

1. „Smoothing“ (Verwischen) des Bildes, Dilatation (expandieren) & Erosion (schrumpfen)

2. Farbmessung von 5 Punkten im mittleren Bereich des Kamerabildes

3. Ist die gemessene Durchschnittsfarbe Hautfarben?4. Wenn ja: Segmentierung im HS(V)-Farbraum mit

Durchschnittsfarbe (+- delta), Dilatation & Erosion

Page 23: Statische Gestenerkennung auf einem Smartphone

6.1 Ablauf der Gestenerkennung IV

Konvertierungen

Segmentierung

Konturenfindung Zuschneiden Template-

Matching

1. Alle Konturen werden erkannt2. Größte Fläche/Kontur (Hand) im Bild wird

gesucht

Page 24: Statische Gestenerkennung auf einem Smartphone

6.1 Ablauf der Gestenerkennung V

Konvertierungen

Segmentierung

Konturenfindung Zuschneiden Template-

Matching

1. Die größte Kontur wird ausgeschnitten („Region of interest“), und dem Template-Matching übergeben

2. Auswahl der in Frage kommenden Geste(n) (Stein Papier/Schere) aufgrund des Seitenverhältnisses

3. Zuschneiden des Templates, so dass es mindestens einmal komplett in das Bild passt

Page 25: Statische Gestenerkennung auf einem Smartphone

6.1 Ablauf der Gestenerkennung VI

Konvertierungen

Segmentierung

Konturenfindung Zuschneiden Template-

Matching

1. Template-Matching füllt Matrizen (für jede untersuchte Geste eine) mit den Matching-Werten, daraus suchen wir uns jeweils das Minimum (= höchste Identität)

2. Das kleinste Minimum ist die erkannte Geste, sofern sie einen Schwellwert nicht überschreitet

Page 26: Statische Gestenerkennung auf einem Smartphone

7. Lessons learned 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

Page 27: Statische Gestenerkennung auf einem Smartphone

7. Lessons learned II Gestenerkennung an sich gut erforscht, jedoch stark von

Lichtverhältnissen abhängig Template-Matching Methode 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

Page 28: Statische Gestenerkennung auf einem Smartphone

Vielen Dank für die Aufmerksamkeit!

Statischen Gestenerkennung auf einem Smartphone