PROZESSKinect-Anwendungen erfolgreich testenSchattenspieleBei der Entwicklung einer Komponente zur Erkennung von Gesten ha...
PROZESSOpenNI-Installation (/Samples). Hier sind           [Abb. 2]viele wichtige Szenarien abgedeckt und es           Sig...
PROZESS Kinect-Anwendungen erfolgreich testenPerson bewegte die linke Hand vor dem           Buchtipp: Emotionales Interak...
Nächste SlideShare
Wird geladen in …5
×

Dotnetpro 5 2012_schattenspiele_heinichen_merwald

629 Aufrufe

Veröffentlicht am

Kinect-Anwendungen erfolgreich testen. Bei der Entwicklung einer Komponente zur Erkennung von Gesten haben die Autoren der Testbarkeit besondere
Aufmerksamkeit geschenkt: Über ihre Erfahrungen berichten sie in diesem Best-Practice-Artikel.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
629
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
11
Aktionen
Geteilt
0
Downloads
2
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Dotnetpro 5 2012_schattenspiele_heinichen_merwald

  1. 1. PROZESSKinect-Anwendungen erfolgreich testenSchattenspieleBei der Entwicklung einer Komponente zur Erkennung von Gesten haben die Autoren der Testbarkeit besondereAufmerksamkeit geschenkt: Über ihre Erfahrungen berichten sie in diesem Best-Practice-Artikel. Auf einen Blick K Was sind eigentlich Gesten? inect von Microsoft ist derzeit in aller Munde – oder besser gesagt in aller Hände. Weltweit steuern über zehn Im Glossar des OpenNI-Frameworks [4] werden Millionen Menschen mithilfe der eingebauten Gesten wie folgt definiert: „Expressing an instruction 3D-Technologie ihre XBox, PCs oder eingebet- through bodily movements“ (Open NI Documenta­ teten Systeme (Abbildung 1). Kinect wurde von tion, 2011, S. 38). Microsoft zusammen mit der Firma Prime­ enseS Es fällt auf, dass die Interpretation der Geste als entwickelt. Man kann damit Software durch Anweisung (Instruction) Bestandteil dieser Definition Körperbewegungen bedienen. Diese Art der ist. Wie man diese Gesten verwendet, sollte nach Meinung der Autoren kein definierendes Element Steuerung wird durch eine Kombination von sein. Wir trennen daher die Definition der Geste von Tiefensensor, 3D-Mikrofon, Farbkamera und der Definition der Gestenerkennung. Letzteres liefert Software ermöglicht. dann die technische Basis, um eine Geste beispiels- Noch nie hat sich ein technisches Gerät so weise als Anweisung für den Computer zu nutzen: schnell so oft verkauft wie Kinect [1]. Eigentlich 1. Eine Geste ist eine Folge von körperlichen, symbol- ist das nicht verwunderlich, denn das Natural haften Bewegungen. User Interface (NUI) birgt enorme Möglichkei- 2. Eine Gestenerkennung liefert nach Ablauf der Jörg Heinichen und Michael ten. Seit Kurzem ist das lang erwartete Kinect- Geste eine binäre Aussage über deren Ausführung. Merwald sind bei der Zühlke SDK [2] von Microsoft erhältlich, die Gerüchte Engineering GmbH als Software- über eine Integration in Windows 8 gären schon Ingenieure mit den Schwerpunk- seit einiger Zeit [3]. Ein Zeichen, dass Kinect ten Microsoft-Technologien, auch im MS-Produktportfolio eine wichtige Was muss dafür auf die Einkaufsliste? Ein Testing und innovative Bedien- Rolle einnehmen wird. Um es kurz zu machen: K ­ inect, ein API, ein ansprechendes User Interface konzepte tätig und stehen nicht Es wird in der nächsten Zeit noch viel mehr An- und intuitive Gesten nebst Erkennung – lesen Sie nur beruflich vor der Kinect. Gerne stehen sie für Fragen wendungen auf Basis der Kinect geben – nicht dazu auch den Kasten Was sind eigentlich Gesten?. und Anregungen unter joerg. nur im Spielebereich. Die Hauptrolle ist schnell besetzt: Kinect ist heinichen@zuehlke.com und Was würden Sie denn lieber mit den Hän- überall im Handel erhältlich. michael.merwald@zuehlke.com den steuern, ganz ohne Tastatur oder Maus? Das benötigte Software Development Kit zur Verfügung. Lassen Sie Ihrer Kreativität einfach mal freien (SDK) dagegen war zum Zeitpunkt der An- Lauf. Vielleicht durch die nächste PowerPoint- wendungsentwicklung noch nicht von Mi- Inhalt Präsentation mit eleganten Handbewegungen crosoft verfügbar. Deswegen wurde OpenNI ▸ Das OpenNI-Framework. navigieren? Einem Industrierobotor neue Bewe- [4] als Middleware gewählt. OpenNI ist ein ▸ Was sind Gesten? gungen durch einfaches „Vormachen“ beibrin- OpenSource-Framework, das eine allgemeine ▸ Eine Testbibliothek anlegen. gen? Oder den Fernsehsender mit einfachen Schnittstelle für NI-Geräte etablieren möchte Winksignalen wechseln? (siehe auch Kasten OpenNI). Hinter dieser Non- dnpCode Für die Autoren war ein Showcase schnell Profit-Vereinigung steht neben anderen Firmen A1205Kinect gefunden: Im Rahmen eines internen Projekts maßgeblich PrimeSense, ihres Zeichens Ent- wurde eine Anwendung für Messen und Events wicklerin des Referenzdesigns von Kinect. Das entwickelt. Mit einfachen Gesten soll der Besu- inzwischen verfügbare Microsoft API und die cher das Projektportfolio der Firma durchsuchen OpenNI-Schnittstelle zeigen große Überschnei- können. dungen. Dies und OpenNIs verheißungsvolle Roadmap [5] lassen eine Koexistenz beider An- sätze realistisch erscheinen. Auch an die .NET-Entwickler hat OpenNI gedacht: Die Bibliothek ist als .NET-Wrapper (OpenNI.NET [6]) auf der Webseite kostenlos verfügbar. Die manchmal nicht ganz reibungs- lose Installation des Gesamtsystems kann mithilfe der inzwischen breiten Community[Abb. 1] Kinect-Sensorleiste für durchgeführt werden. Die ersten Schritte erfol-XBOX 360. gen unter Zuhilfenahme von Beispielen aus der106 5.2012 www.dotnetpro.de
  2. 2. PROZESSOpenNI-Installation (/Samples). Hier sind [Abb. 2]viele wichtige Szenarien abgedeckt und es Signatur deslassen sich schnell Erfolge erzielen. Datenrekor- Aber wieder zurück zu unserem konkre- ders.ten Projekt: Wir verschieben das schickeUI auf später und werfen zunächst einenBlick auf den Kern der Anwendung : dieErkennung von eigenen Gesten.Eigene Gesten erkennenDas OpenNI-Framework sieht vor, eigeneModule zur Gestenerkennung als „Middle­ware Components“ zu integrieren. Wirwollten aber den Test machen, ob es auchinnerhalb der .NET-Umgebung möglich ist,eine stabile und performante Erkennungvon eigenen Gesten zu realisieren. Das Er-gebnis: Es ist sogar gut möglich. Doch was, public IDictionarylong, [Timestamp]|[SkeletonJoint.Head]|wenn eine solche These nicht vorwegge- DictionarySkeletonJoint, [SkeletonJoint.Neck]|nommen, sondern nachhaltig und wieder- SkeletonJointPosition Data { [alle weiteren Member der Auflistung get; private set; } OpenNI.SkeletonJoint]holbar bestätigt werden soll ? Damit sindwir bei der Testbarkeit angekommen. Ein einfaches Startszenario ist leicht Als Key wird der Zeitstempel gespei- Damit ist der technische Unterbau zurvorstellbar : Die ersten theoretischen chert, der beim Eintreffen jedes Daten- Aufnahme von Testdaten mit Kinect er-Überlegungen werden in einen Algorith- satzes anliegt. Damit werden zeitliche stellt: Jeder Datensatz enthält neben demmus gegossen und jeder Versuch der Ve- Aspekte bei der Auswertung der Daten Zeitpunkt des Eintreffens des Frames allerifizierung eines weiteren Entwicklungs- berücksichtigt. 3D-Positionen aller Gelenke. Mit diesenschritts endet in der mühsamen Sequenz Da für die Gestenerkennung die Positi- Daten können die Algorithmen zur Ges-„Stuhl nach hinten schieben, aufstehen, onsdaten der Gelenke ausreichend sind, tenerkennung wiederholbar „gefüttert“Kalibrierungspose einnehmen, warten, wird nicht der im OpenNI verfügbare und somit deterministisch geprüft wer-ausprobieren“. Nach kurzer Zeit ist klar: Rekorder verwendet, sondern die im Fol- den. Zur Steuerung reicht ein einfachesdieses Prozedere ist für eine zielgerichte- genden beschriebene eigene Erweiterung Debug-UI, siehe Abbildung 3. Welche Test-te Entwicklungstätigkeit eher ungeeignet (Abbildung 2). Zum Schreiben der Daten fälle sind nun eigentlich interessant und(man denke nur an Debugging-Sessions). wird eine Objektinstanz des folgenden In- sollten aufgenommen werden?Eine wiederholbare Automatisierung terfaces verwendet:muss gefunden werden. Wink doch mal! Folgender Vertrag beschreibt die Anfor- public interface ITestDataWriter Alle Menschen unterscheiden sich von­ {derungen: Die Typen SkeletonJoint und einander – und zwar nicht nur in Ausse- void Write(IDictionarylong,SkeletonJointPosition sind im OpenNI- hen, Größe und Körperbau, sondern auch IDictionarySkeletonJoint,Framework definiert und beschreiben die SkeletonJointPosition data, im Verhalten. Unsere Tests mit KollegenMenge der verfügbaren Gelenke und de- string path); ergaben interessante Ausführungsvarian-ren Position im Raum. } ten des Auftrags „Wink doch mal!“. Eine Die zu verarbeitenden Daten werden indieser Struktur gehalten: Analog ist eine implementierende Klas- se der folgenden Schnittstelle zum Lesen OpenNI der Daten zu erstellen: public interface ITestDataReader OpenNI ist ein allgemeines Framework zum { Zugriff auf 3D-Sensoren, also nicht ausschließ- IDictionarylong, lich für Kinect. OpenNI bietet ein API zur IDictionarySkeletonJoint, Programmierung von NUI-Geräten und muss SkeletonJointPosition Read( einerseits mit Gerätetreibern für Sensoren (zum string path); Beispiel für Kinect) bestückt und andererseits } von einer Anwendungssoftware gesteuert werden. Zunächst ist hier C++/Native-Code In diesem Fall werden Implementierun- vorgesehen. Die Programmierung gegen die gen der Interfaces für die Ablage und den Schnittstelle ist aber auch mit verwaltetem Zugriff von lokalen Daten im Dateisystem Code (.NET) möglich. Weitere Informationen erstellt, wobei für jeden von der Kamera und Downloads finden Sie unter [4]. eintreffenden Frame ein Datensatz in fol- gende Struktur serialisiert wird: [Abb. 3] Debug-UI.www.dotnetpro.de 5.2012107
  3. 3. PROZESS Kinect-Anwendungen erfolgreich testenPerson bewegte die linke Hand vor dem Buchtipp: Emotionales InteraktionsdesignTorso unterhalb der Schulter und naheam Körper mit kleinem seitlichen Aus- Der Leser findet in den in diesem Buch vorge-schlag. Eine andere Testperson winkte stellten Modellen und einem Notationssystemdagegen ausladend mit der rechten Hand, für Gesten praktische Arbeitshilfen. Der ersteweit von sich und nach oben gestreckt. Teil des Buches setzt sich mit Möglichkeiten undDie verschiedenen Möglichkeiten, eine Grenzen beim Einsatz von Gesten in der PraxisGeste auszuführen, sind somit ein Grund, auseinander. Die technischen Voraussetzungen werden im zweiten Teil vertieft. Der dritte Teilmehrere Testdateien für jede zu prüfende widmet sich den allgemeinen Prinzipien derBewegung aufzunehmen. Gestensteuerung. Ein weiterer Grund ist der zur Live-Aus-führungszeit wahrscheinlich unterschied-liche Abstand der Person zur Kamera: Autor Rainer DorauFalls der zu testende Algorithmus die Z- Verlag Springer, 2011, 266 SeitenAchse – also den Abstand der Person zur Preis 59,95 EuroKamera – betrachtet, sollten von der glei- ISBN 978-3-642-03100-7chen Person möglichst gleiche Bewegun- Rezension www.dotnetpro.de/A1110Booksgen in verschiedenen Abständen zu Kinectaufgenommen werden. Begründung: EineBewegung in einem Abstand a besitzt ausSicht der Kamera einen größeren Bewe- sich relativ schnell eine ansehnliche Test- Mit etwas mehr generalisierendem Codegungsumfang als die Ausführung der exakt bibliothek, die natürlich noch ausgeführt kann noch die Abhängigkeit zu einer ein-gleichen Bewegung bei einem Abstand von werden soll. Was bei allen auszuführen- zelnen Datei aus dem Testcase ausgelösta+1 (Abhängigkeit von der Z-Achse). Aus den Tests gleich ist, wird in eine Basisklas- werden und es können – je nach Teststra-unserer Erfahrung eignen sich Entfernun- se GestureRecognizerTestBase gepackt. tegie – ganze Verzeichnisse (zum Beispielgen von 1,5 Metern und 3,0 Metern gut. Dazu zählt in erster Linie die Funktiona- TestWave) mit dem dazugehörigen lität, Testdaten einzulesen und diese dem Recognizer durchlaufen werden.Testbibliothek anlegen spezifischen Recognizer zur Verfügung zuTestdaten sind besonders dann sinnvoll, stellen. Der entsprechende Ausschnitt aus Fazitwenn die gleiche Bewegung mehrfach der Basisklasse sieht so aus: Ohne eine ständige, automatisierte Über-aufgenommen wird. Die Testperson führt prüfbarkeit ist es nicht sinnvoll, sichbeispielsweise die Geste „Winken“ fünf- public class GestureRecognizerTestBase ernsthaft mit der Entwicklung von Ges- {mal nacheinander in einer gültigen Form tenerkennungs-Algorithmen mit Kinect protected static intaus. In einer weiteren Session wiederholt zu beschäftigen. Der hier gezeigte An- RunRecognizerWithFile(sie die gleiche Bewegung bewusst unter- string testFile, satz ist ganz klar pragmatisch orientiert,oder übertrieben weitere fünf Mal (ungül- IGestureRecognizer gestureRecognizer) hat sich in der Praxis aber vollständigtige Fälle). Es ist ratsam, pro Testaufnah- { bewährt. Vor allem beim Feintuning derme (sprich: Testdatendatei) jeweils nur //Implementierung Algorithmen (das heißt Veränderung dergültige oder nur ungültige Fälle zusam- } Parametrierung von variablen Größenmenzufassen. Damit wird die gegenseiti- zur Laufzeit) hat der verwendete Ansatzge Auslöschung von „false positives“ und Diese Methode nimmt als Parameter die sehr gute Dienste geleistet. Damit werden„false negatives“ vermieden. Testdatei und den spezifischen Gestenal- eventuelle Wechselwirkungen der Para- Eine konsistente Benennung und Ab- gorithmus entgegen und gibt die Anzahl meter untereinander einfach abgesichert.lage der Testdaten ist für den Überblick der positiven Erkennungen zurück. Somit Der Aufbau des Testsystems unterstütztwichtig. Folgende Struktur bietet sich an: bleiben in der eigentlichen Testmethode die schnelle und unkomplizierte Aufnah- als Aufgaben die Auswahl der Testdatei und me weiterer Testdaten – ein wertvollerWave_150_5.txt des Recognizers sowie der Vergleich der An- Aspekt bei der Einrichtung eines Conti-SwipeLeft_300_0.txt... zahl der erwarteten mit den tatsächlichen nuous-Integration-Prozesses. [bl] positiven Erkennungen übrig: Das Schema lautet also: [1] Kinect-Verkaufszahlen, www.dotnetpro.de/ [TestMethod] SLA1205Kinect1[Geste]_[Abstand zur Kamera in cm]_[An- public void Recognize_Wave150_5() [2] MSDN-Forum zum Kinect SDK für Windows, zahl der erwarteten positiven Testfälle] { //Arrange www.dotnetpro.de/SLA1205Kinect2 var waveRecognizer = new WaveRecognizer(); Die erste Datei beinhaltet demzufol- [3] Kinect für Windows 8, //Actge Testdaten für die Geste Wave, die in www.dotnetpro.de/SLA1205Kinect3 int recognized = RunRecognizerWithFile(einem Abstand von 1,5 Metern aufge- @TestWave_150_5.txt, [4] OpenNI, www.openni.orgnommen wurden, wobei der spezifische waveRecognizer); [5] he Future of OpenNI, TErkennungsalgorithmus genau fünfmal //Assert www.dotnetpro.de/SLA1205Kinect4eine positive Rückmeldung geben muss, Assert.AreEqual(5, recognized); [6] OpenNI.NET,um den Test zu bestehen. So entwickelt } www.dotnetpro.de/SLA1205Kinect5108 5.2012 www.dotnetpro.de

×