Digitales Fenster

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche


Digitales Fenster
Team: Steffen Bareiß
Hannes Dauner
Hannes Twardzik


Hut mit 3 grünen LEDs


Kurzbeschreibung

Die Position sowie die Blickrichtung einer interagierenden Person sollen sich perspektivisch korrekt in einem "digitalen Fenster" widerspiegeln. Der Benutzer trägt hierzu eine Kopfbedeckung mit 3 LEDs. Eine Kamera nimmt den Benutzer auf. Durch eine Bildverarbeitung am PC werden die Positionen der LEDs ermittelt und an eine 3D-Engine weitergeleitet. Nach Berechnung der Längen und der perspektivischen Korrekturen wird die Kamera der 3D-Engine in Echtzeit gesteuert und die 3D-Welt wird auf einem Bildschirm dargestellt.

Aufgrund der begrenzten Zeit haben wir uns vor allem auf die Bildverarbeitung und die Datenübertragung per OSC konzentriert.

Verwendete Software

Blockschaltbild des Gesamtsystems

Digifenster system.png

Bildverarbeitung in EyesWeb

Digifenster eyesweb.PNG
  1. Video Aufnahme mit FrameGrabber
  2. Binarisierung: ImageConverter: Konvertierung des Bilds in Schwarz-Weiß; ThresholdOperation: Schwellwert-Regelung
  3. Image to Blobs: extrahiert verbundene Pixel zu einem Blob und gibt diese als Blob-Liste aus
  4. ExtractBlobFromList: entnimmt größten Blob aus Blob-Liste
  5. Shape2DInfo-double: entnimmt Schwerpunkt von Blob
  6. Kaskadenförmige Wiederholung; Arithmetik-Block: subtrahiert die Pixel des gefundenen Blobs vom ursprünglichen Bild; Image to Blobs: erzeugt neue Blob-Liste mit verbleibenden Blobs
  7. Übergabe an OSC

OSC

Um die durch die Bildverarbeitung gewonnenen Koordinaten von EyesWeb nach Blender in Echtzeit übertragen zu können, hat man sich für das OSC-Protokoll entschieden. Innerhalb von EyesWeb gibt es dafür einen Block – den OSC-Client. Dieser nimmt Daten entgegen, egal ob diese vom Datentyp String, Integer oder Float sind und verschickt diese über eine vorher definierte IP-Adresse und Port. Wichtig für eine erfolgreiche Übertragung per OSC ist der Address Pattern.

Digifenster osc.png

Der Address Pattern sichert die Erkennung der Nachricht für andere Teilnehmer. Dieser kann frei gewählt werden, jedoch muss vor dem gewählten Namen ein „/“ stehen. Empfängt nun ein anderer OSC Teilnehmer Nachrichten, schaut dieser auf das Address Pattern. Stimmt dies mit dem eigenen überein, nimmt dieser die Daten entgegen. In diesem Projekt hieß das OSC-Address Pattern „/toblender“.

Um nun die von EyesWeb versendeten Daten via OSC innerhalb von Blender empfangen zu können, war eine Erweiterung für Blender notwendig. Diese heißt „AddOSC“ und kann unter http://www.jpfep.net/pages/addosc/ heruntergeladen werden. Nach der Installation von AddOSC müssen die gleichen Parameter eingestellt werden wie im EyesWeb-OSC-Client:


HOST/IP: 127.0.0.1
Port: 9001
Adress Pattern: /toblender

Die Daten werden nun in Echtzeit von EyesWeb nach Blender übertragen. Um diese nun zu nutzen, sprich in Echtzeit die Kamera steuern zu können, wurde sich dem Keying Set bedient. Keying Sets in Blender erlauben es per Mouse-Over bestimmte Parameter zu verknüpfen. In unserem Fall die eingehenden Koordinaten - X:Y - auf die Kamera zu übertragen. Dafür wurde die Maus über die Kamera Koordinaten gelegt und dann STRG-K gedrückt. Auf diese Art wurden die Kamera X und die Kamera Y Koordinate an die OSC-Nachrichten gebunden. Die X und Y Koordinaten wurden innerhalb eines Arrays mit der Größe 2 übertragen. Im Index 0 liegt die X-Achse und im Index 1 die Y-Achse. Wurde nun per Keying Set die Kamera Position an die OSC-Nachrichten gebunden, bewegt diese sich nun in Echtzeit mit den Koordinaten, welche aus EyesWeb stammen.

Download