Sonntag, 29. Juni 2008

Konfiguration und Kompilierung von HandVU Source Code

OpenCV - testen der Beispiele und Einsicht in die C-Programmierung.

Nach dem ich nun OpenCV installiert habe, habe ich die Beispiele ausprobiert die unter dem Verzeichnis
C:\Programme\OpenCV\samples\c angelegt worden sind. Es ist anfangs Sinnvoll, als erste Einarbeitung in OpenCV, sich mit einigen dieser Beispielprogramme zu beschäftigen, wie Beispielsweise die Gesichtserkennung „facedetect“. Zu jedem Beispiel gibt es die Source Code in C++ geschrieben, die kompiliert und ausprobiert werden kann.

Kompilieren von HandVU

Beim ersten Ausführen der HandVU - Sources Code, habe ich 48 Fehler erhalten.
Eine von diesen Fehlern, ist die Meldung, dass die unten aufgelisteten Umgebungsvariablen, nicht gefunden werden.

$(INC_OPENCV)
$(INC_OPENCV_CXCORE)
$(INC_OPENCV_HIGHGUI)
$(INC_OPENCV_AUX)

Diese habe ich unter Systemeigenschaften-> Erweitert -> Umgebungsvariablen und Systemvariablen angelegt.



Eine weitere Fehlermeldung war die, dass einige Headerdateien, wie beispielsweise die „streams.h“ Headerdatei nicht gefunden werden.


Um diese Fehlermeldung zu beheben, muss das DirectX SDK mit dem Verzeichnis DirectShow eingebunden werden.

Auf der Homepage http://msdn.microsoft.com/directx/ habe ich mir Microsoft DirectX 9.0 SDK installiert.
Wichtig ist, dass in der DirectX SDK Version, das Verzeichnis DirectShow vorhanden sein muss.


Anpassung der DirectX SDK include files unter Visual Studio 2005:

Unter EXTRAS->OPTIONEN->Projekte und Projektmappen muss unter VCC+-Verzeichnisse unter den Includedatein noch das folgende Verzeichnis hinzugefügt werden.

C:\DXSDK\Samples\C++\DirectShow\BaseClasses


Nach dem ich die oben genannten Fehler behoben und die Umgebungsvariable für HandVU angepasst habe, wurde mir beim erneuten kompilieren
der HandVU, nun 27 Fehler angezeigt.

Beim kompilieren habe ich die unten aufgelistete Fehlermeldung erhalten.


C:\Programme\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'PVOID64'
C:\Programme\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
C:\Programme\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'Buffer'
C:\Programme\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.



Dieser Fehler ist eine, mit DirectX SDK zusammenhängte Fehlermeldung.

Folgende Seite war mir bei der Behebung, dieser Fehlermeldung sehr hilfreich.

http://forums.msdn.microsoft.com/en-US/vclanguage/thread/51043152-3ab6-4a9e-b3c1-2dba8300d9bb

Um die oben aufgelistete Fehlermeldung zu beheben, muss man unter Visual Studio-> Extras->Optionen->Projekte und Projektmappen-> VC++-Verzeichnisse die Liste nach der Includedatei sortieren.

Die Includedateien sollten, primär vor allen anderen Dateien stehen.





Nach dem ich diese Anpassung durchgeführt habe, wurde mir beim erneuten kompilieren, nur noch 2 Fehlermeldungen angezeigt.





Diese 2 Fehlermeldungen habe ich behoben, in dem ich unter HandVU_img.cpp, die Headerdatei „errno.h“ eingefügt habe.

Ich habe keine Fehlermeldung erhalten, jedoch muss man nun ein Verzeichnis für ein .DLL Datei angeben, die zum ausführen von HandVU benötigt wird.

Donnerstag, 22. Mai 2008

Softwareinstallation & Test

Nach dem ich die Software OpenCV und HandVU nach der Installationsanleitung installiert habe, war der nächste Schritt, das Testen der Software.
Hierzu sollte zunächst, die WebCam angeschlossen sein. Die WebCam sollte eine Auflösung von 320x240 Pixel oder eine höhere Auflösung haben.

Nach dem die WebCam angeschlossen ist, kann das Programm HandVU_OpenCV gestartet werden.
Nach dem Starten der Software, erscheint das Kamerabild und ein großes Rechteck, in der die Hand positioniert werden muss, bis die Hand erkannt wird.
Dabei sollte man den Handrücken, der rechten Hand, in das Rechteck platzieren, da diese Handposition am besten erkannt wird.




In den weiteren Bilder wird ersichtlich, wie die richtige Handstellung sein sollte, um die Handgestenerkennung zu gewährleisten:








Man sollte auf gute Lichtverhältnisse im Raum achten.
Der Raum darf weder zu dunkel, noch zu hell sein. Durch Sonnenschein, wird beispielsweise, die Erkennung der Hand durch die WebCam beeinträchtigt.
Auch Hautfarbeähnliche Hintergründe sollte man vermeiden.
In meinen Tests habe ich festgestellt, dass beispielsweise helle Holztüren als Hintergrund, nicht für den Einsatz von HandVU geeignet sind.
Bei dunklen Hintergründen wurde die Hand sehr schnell erkannt.

Die Hand wird erst erkannt, wenn das große Rechteck verschwindet und auf der erkannten Hand, weiße Punkte verteilt werden.
Dabei ist der große weiße Punkt, der Mittelpunkt des Recheckes.

Nun wird beim bewegen der Handrücken, die Hand mit den weißen Punkten mitverfolgt.
Jetzt hat man die Möglichkeit, die Hand durch sehr schnelles drehen, mit der Handinnenfläche in Richtung der Kamera zu zeigen.

Man hat auch die Möglichkeit, die Hand durch andere Objekte auszutauschen. Beispielsweise habe ich das mit einer Tasse aus Glas(siehe u. Bild) ausprobiert. Die Objektverfolgung der Tasse, hat sehr gut funktioniert.


Das bedeutet aber nicht, dass das Objekt beim Programmstart von HandVU eingesetzt werden kann. Da muss weiterhin die Hand vor die WebCam gehalten werden, bis die Handfläche erkannt wird.

Die Hand wird auch dann sehr gut erkannt, wenn sich im Hintergrund Personen bewegen.

Bilder der Testergebnisse:





Webseite:


http://www.movesinstitute.org/~kolsch/HandVu/doc/index.html

Mittwoch, 21. Mai 2008

Aktueller Stand und weitere Vorgehensweisen

Kurzbeschreibung:

Mit Hilfe einer USB-Kamera und HandVU OpenCV werden die Handbewegungen erfasst und anhand der ermittelten x,y-Koordinaten der Hand, die Balken des Spiels „PONG“ per Handbewegung gesteuert.

Projektplan bis Semesterende:

[1] Installation der Software HandVU & OpenCV
[2] Testen der Installierten Software
[3] Analyse in OpenCV, HandVU und Programmierung mit C++
[4] Ermittlung der Handposition und ankoppeln mit dem Spiel „PONG“
[5] Verbesserung der Performance eventuelle Änderungen anpassen

Dienstag, 20. Mai 2008

Einsatz von HandVU & OpenCV

Die Software HandVU, implementiert eine Sammlung Vision basierte Schnittstellen, für die Erkennung der Handgeste.
Bei der Erkennung der Handgeste, wird die Hand in Realzeit erkannt.
Das Softwarepaket von HandVU besteht aus den wichtigsten HandVU Bibliotheken und mehreren Anwendungen, die mit dem Einsatz von OpenCV ermöglicht wird.
Wie im vorherigen Beitrag schon vorgestellt, ist OpenCV eine
freie Bibliothek für Bilderkennung. Die Bibliothek enthält eine Vielzahl von nützlichen Algorithmen für Tracking, Segmentierung etc.

HandVU beruht auf einen Client-Server-Ansatz, die einen Hand-Gesten-Server zu Verfügung stellt. Nach dem man sich auf diesen Server eingeloggt hat, empfängt man für jedes von HandVU berarbeitet Bild der Kamera die Handkoordinate (x,y), sowie die momentane Handgeste.

Ein Beispiel Einsatz von HandVU, ist die Handgestenerkennung, zur Kontrolle einer Multimedia Plattform, die von Philips Applied Technologies in Eindhoven/Niederlande entwickelt wurde. Dabei handelt es sich um ein Handzeichen gesteuerte 3D GUI.

Einen Eindruck von dieser Entwicklung, kann man sich unter dem folgenden Link machen:

http://www.schroeder-wendt.com/blog/2006/09/25/diesmal-nix-zum-anfassen-handgesten-erkennung-zur-kontrolle-einer-multimedia-plattform/


Den Einsatz von HandVU, finde ich für die Realisierung des Projektes als sehr angebracht, da neben der Handgestenerkennung, auch die Handposition als x,y-Koordinate ermittelt wird.
Da die Gestenerkennung sehr viel an Ressourcen verbraucht, werde ich die Funktion der Gestenerkennung nicht in Anspruch nehmen.

Die ermittelten x,y-Koordinatenwerte aus der Handposition, werde ich mit dem
x,y-Koordinaten der Spielbalken, aus dem Spiel PONG koppeln, die dann durch Handbewegung in Realzeit angesteuert werden soll.

Installationsanleitung für HandVU:

http://www.movesinstitute.org/~kolsch/HandVu/doc/InstallationWindows.html

Mittwoch, 30. April 2008

OpenCV - Open Source Computer Vision Library

In meinen weiteren Recherchen habe ich OpenCV (Open Source Computer Vision Library) entdeckt, die ich für meine weiteren Arbeiten zur Realisierung der Aufgabenstellung einsetzen werde.

OpenCV ist eine quelloffene Programmbibliothek die von Intel-Forscher veröffentlicht wurde. Das Softwarepaket wurde für Linux und Windows OS entwickelt und im Jahr 2000 veröffentlicht. OpenCV soll Softwareentwicklern helfen, stereoskopische Bilderkennung in ihre Produkte zu integrieren. Die Software erlaubt, Tiefeninformationen aus bewegten und stehenden Bildern, die von zwei Kameraaugen erfasst werden können.

Damit könnte beispielsweise der Bereich Gestenerkennung, bei dem es auch stark auf die dritte Dimension ankommt, verbessert werden. Intel erhofft sich damit auch Möglichkeiten der besseren Objektverfolgung und der Gesichtserkennung.

Bei OpenCV handelt es sich aber nicht nur um voll ausgereifte Lösungen und Funktionen, die sofort Einsatzbereit sind. Je nach Anforderungsbedarf, müssen die Funktionen dementsprechend angepasst oder ergänzt werden.

OpenCV ist für die Programmiersprachen C und C++ geschrieben und enthält Algorithmen für die Bildverarbeitung und maschinelles Sehen die rund 500 Imagingfunktionen enthält.

Im September 2006 wurde die Version 1.0 herausgegeben.
Die Stärke von OpenCV liegt in ihrer Geschwindigkeit und in der großen Menge der Algorithmen aus neuesten Forschungsergebnissen.
Die Bibliothek umfasst unter anderm Algorithmen für Gesichtserkennung, 3D-Funktionalität, Haar-Klassifikatoren, verschiedene sehr schnelle Filter (Sobel, Canny, Gauß) und Funktionen für die Kamerakalibrierung.
Die Software besitzt auch eine Exportschnittstelle zum Softwareentwicklungstool Matlab.

Hilfreiche Webseiten:

[1] http://sourceforge.net/projects/opencvlibrary/
[2] http://www.intel.com/technology/computing/opencv/index.htm
[3] http://opencvlibrary.sourceforge.net
[4] http://groups.yahoo.com/group/OpenCV

Literatur:

• Grundlagen der Bildverarbeitung – Klaus D. Tönnis
• Digitale Bildverarbeitung/ Grundlagen und Anwendungen – Peter Haberäcker
• Werkzeuge der Signalverarbeitung – Beate Meffert & Olaf Hochmuth

Donnerstag, 17. Januar 2008

Ermittlung und Vorgehensweise bei der Handposition

Zur Ermittlung der Hand, wird in im bewegten Bild nach der Hand gesucht und deren Position in Bildschirmkoordinaten ermittelt. Dessen Position wird durch eine Bildmaske beschrieben.
Ein Bildpunkt wird markiert, wenn er Position der Hand zugeordnet werden kann. Zusätzlichwird die Lage des Mittelpunktes der Hand berechnet.

Ich möchte zunächst einmal, den Bereich des Bildes eingrenzen, in dem sich die Hand befindet.
Dazu gibt es eine statistische Suche. Dabei werden die Farbwerte statistisch ausgewählte Bildpunkte mit den Farbwerten der Hand verglichen.
Was zu den Farbwerten der Hand gehört, wird in einem Histogramm bestimmt.
Als Bereich Bs wird nun das Gebiet abgegrenzt, in dem die Dichte der Bildpunkte am höchsten ist.
In diesem Gebiet die eingegrenzt wurde, befindet sich dann auch die Hand.
Der Bereich wird durch einen Startpunkt (xS,yS) und
einen Endpunkt (xE,yE) definiert. Start- und Endpunkt werden in Bildkoordinaten beschrieben.


Bild : Handerkennung & Handermittlung


Wie im obigen Bild zu sehen ist, wurden einige Pixel der Hand identifiziert. Durch eine Segementierung in dem eingegrenzten Bereich BS wird die gesamte Handfläche freigelegt. Dafür wird eine Region Growing-Algorithmus verwendet. Als Startpunkt für den Algorithmus
wird der Mittelpunkt des Bereichs BS gewählt. Ausgehend von diesem Startpunkt werden
die Farbwerte aller Nachbarn mit den Farbwerten verglichen, die als Farbe der Hand
definiert werden. Es wird kein fester Farbwert definiert sondern ein Farbbereich.
Liegt ein Farbwert in dem gesuchten Farbbereich, wird der Bildpunkt in einer Bildmaske markiert.
Jedes Feld in der Maske entspricht einem Bildpunkt im Videobild. Anschließend
werden die weiteren Nachbarn untersucht. Das Verfahren stoppt erst, wenn keine weiteren
Pixel mehr gefunden werden, die dem definierten Wertebereich der Hand entsprechen
oder wenn der Rand des Bereichs BS erreicht worden ist. Das Ergebnis des Region Growing-
Algorithmus ist die segmentierte Fläche der Hand.

Neben der Fläche werden deren Randpixel ermittelt und in der Bildmaske markiert. dadurch
wird die Kontur der Hand ermittelt.

Als nächstes wird kontrolliert, ob die segmentierte Fläche und die Kontur auch die
Hand ist. Dafür werden zwei Merkmale definiert, die Anhand von Regeln überprüft werden:

1. Die Anzahl der segmentierten Pixel im Verhältnis zur Fläche des eingegrenzten Bereichs BS.

2. Die Anzahl der Randpixel im Verhältnis zum Bereich BS.


Entsprechen die Merkmale der segmentierten Flächen den gesuchten Merkmalen, so wird
die Fläche als Hand definiert. Ansonsten wird der Vorgang abgebrochen und erst mit dem
nächsten aufgenommenen Videobild fortgesetzt.



Quelle:
Bild und Verfahren aus dem Beitrag:
Verfahren zur Darstellung von Händen in einer interaktiven Augmented Reality Anwendung.