Statische Gestenerkennung auf einem Smartphone
description
Transcript of Statische Gestenerkennung auf einem Smartphone
![Page 1: Statische Gestenerkennung auf einem Smartphone](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/1.jpg)
STATISCHE GESTENERKENNUNG AUF EINEM SMARTPHONESebastian Linder, Jan Menges, Markus Jeckle
![Page 2: Statische Gestenerkennung auf einem Smartphone](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/2.jpg)
Inhalt1. Projektübersicht2. Gestenerkennung3. OpenCV4. Android5. OpenCV auf Android6. Rock, Paper, Scissor (App)7. Lessons learned
![Page 3: Statische Gestenerkennung auf einem Smartphone](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/3.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/4.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/5.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/6.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/7.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/8.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/9.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/10.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/11.jpg)
3.1 Anwendungen von OpenCV
Segmentierung Gesichtserkennung Gestenerkennung Bewegungserkennung Objekterkennung
![Page 12: Statische Gestenerkennung auf einem Smartphone](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/12.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/13.jpg)
4.1 Visual Layout Editor
![Page 14: Statische Gestenerkennung auf einem Smartphone](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/14.jpg)
4.2 DDMS
![Page 15: Statische Gestenerkennung auf einem Smartphone](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/15.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/16.jpg)
5. OpenCV auf Android II
![Page 17: Statische Gestenerkennung auf einem Smartphone](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/17.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/18.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/19.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/20.jpg)
Konvertierungen
Segmentierung
Konturenfindung
Zuschneide
n
Template-Matching
6.1 Ablauf der Gestenerkennung I
![Page 21: Statische Gestenerkennung auf einem Smartphone](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/21.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/22.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/23.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/24.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/25.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/26.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/27.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062520/56815b78550346895dc97394/html5/thumbnails/28.jpg)
Vielen Dank für die Aufmerksamkeit!
Statischen Gestenerkennung auf einem Smartphone