Ja jetzt ist der letzte Blogeintrag schon fast 3 Wochen her. Grund dafür war ne tolle Erkältungs-Grippe und ein bissl Magenkram. Das hat mich ganz schön umgehauen, aber jetzt bin ich wieder fit und hab die letzten 2 Wochen dafür genutzt um derhess.de bissl mehr dem Web 2.0 Flavour anzupassen. Vielleicht hats der ein oder andere schon bemerkt. Die Blog und Newseinträge gibt es nun auch als RSS FEED.
Weiter hinzukommen ist die eigentlich obligatorische Kommentarfunktion für meinem Blog. Ich freu mich über jedes Feedback!
Desweitern habe ich auf meine Videos positives Feedback bekommen (Yeahh!), nur wurde die fehlende Steuerung der Videos bemängelt. Und ich muss zugeben zurecht! Deswegen gibt es jetzt eine Steuerung der Videos. Diese erscheint wenn ihr mit der Maus über das Videobild fahrt oder ihr benutzt einfach mit Rechtsklick der Maus das Kontextmenü.
Der Demobereich ist in den Sparten Programmierung und Flashprogrammierung um jeweils einem Item reicher geworden. Einmal ein Java 3D Spiel, welches im Rahmen meines Studiums entstanden ist und eine Anlehnung an Whack the Worm sein soll. Ganz so zufrieden bin ich mit dem Ergebnis nicht wirklich, aber was solls, hauptsache es macht Spass. Im Flashbereich habe ich meinen Flash Video XML Player hochgeladen. Die FLV-File Verwaltung erfolgt wie der Player es schon sagt über das XML-Format. Wenn ihr Lust habt schauts euch mal an, vielleicht taugst euch ja was.
In den nächsten Tagen werde ich dann auch mal wieder einen brauchbaren Blogeintrag schreiben, bis denne!
Bei meinem Lightwriter Experiment kann man mit Hilfe einer Taschenlampe in Echtzeit im Webcambild malen. Inspiration fand ich in der Lightgraffiti Szene, besonders der Clip The past of pikapika und der TV-Beitrag zum Thema Lichtgraffiti von Tracks haben mir es sehr angetan. Während der Entwicklung meines Lightwriters schockte mich die neue Apple I-Pod NanoWerbung sehr, denn sie deckt sich fast komplett mit meiner Grundidee. SHIT! Aber ich hab trotzdem weiter gemacht und erzähl euch jetzt was zur Umsetzung in Flash.
Als erstes versuchte ich die hellen Pixel (es gibt einen frei wählbaren Helligkeits Grenzwert) im Videobild herauszufiltern und diese dann in einer übergelagerten Bitmap Instanz genau an der gleichen Stelle zu kopieren. Für das Herausrechnen der Farbinformationen (splitten in den RGB Kanal) aus den jeweiligen Pixel half mir das Tutorial Bitweise Operatoren von Grant Skinner sehr, jedoch waren die 76800 Helligkeitsberechnungen pro Frame (Auflösung von 320x240 px) für jeden Pixel zu viel für Flash. Ich versuchte nun die Helligkeitsfläche der Taschenlampe zu tracken. Um das zu erreichen, versuchte ich das Bild mit Hilfe von Transformation Matrizen so zu verändern, dass es nur noch die hellen Bereiche anzeigt. Ich erreichte nach längeren Probieren ein ausreichendes Ergebnis, jedoch funktionierte dies nur bei mir zuhause, denn bei anderen Webcams mit anderen Lichtverhältnissen und Hintergründen muss der Filter wieder neu justiert werden. Eine dynamische Justierung wäre aber viel zu aufwendig gewesen. Gefrustet von den bisherigen Ergebnissen durchstöberte ich nochmal die ActionScript Doku und stiess auf die Hilfreiche Funktion Bitmap.getColorBoundsRect(). Diese Funktion sucht im Bild nach einem von mir angegebenen Farbwert und liefert mir ein Rechteck mit Positionsangabe zurück. Diese Funktion liess ich nach weissen Pixeln im Bild suchen. Und siehe da, das zurückgelieferte Ergebnis stimmte mit der Position der Taschenlampe im Webcambild überein. Mit diesen Ergebnis konnte ich sehr gut leben. Nun musste ich nur noch dem Rechteck einen Offset zugeben um die runden Ecken der Taschenlampe zu erhalten. Da sich das Licht am Rand der Taschenlampe abschwächt und einen anderen Farbwert bekommt, überprüfte ich wieder die Pixel nach ihrer Helligkeit. Denn der Farbwert am Rand der Taschenlampe macht die Lichtspielerei erst wirklich interessant. Dieses Verfahren funktioniert einwandfrei, wenn man nicht direkt in die Webcam rein leuchtet. Falls das doch passiert, fängt der Flash Player an tierisch zu rechnen, weil das TrackingRechteck massiv grösser wird und dadurch die Anzahl der Pixel im Offsetbereich massiv zunehmen. Da die Helligkeitsberechnungen im Offset Bereich auch noch sehr rechenintensiv sind, habe ich eine weitere Funktion eingebaut. Ich berechne die Mitte des erhaltenen Rechteck und fange an Linien mit der Funktionlineto() zu malen. Die daraus entstandene Ergebnisse brachten mich wieder auf weitere Ideen, wie z.B. das man bestimmte Symbole malt und diese vom Flash Player erkannt werden und dieser führt dann bestimmte Aktionen durch (zum Beispiel Video starten, nächsten Clip laden usw.). Ich finde die Idee sehr praktisch in Hinsicht auf einfache Interaktionen im Wohnzimmer mit dem Fernseher. Beim dynamischen Malen könnte man ein 2 Player PingPong Webcamspiel (spielbar über Internet) entwickeln...
Aber leider muss ich noch gestehen, dass mein Lightwriter bei mehr als zwei Lichtquellen nicht mehr unbedingt stablil läuft. Denn durch die zwei hellen Bereiche im Bild wird das Trackingergebnis stark verfälscht. Bei manchen Webcams findet die Funktion Bitmap.getColorBoundsRect() sogar keine wirklich weissen Bereiche der Taschenlampe und liefert somit kein Trackingergebnis. Um diese Schwächen zu beseitigen, muss ich mir wohl doch noch ein eigenes Trackingverfahren in Flash schreiben. Einen ersten Ansatz hab ich auch schon, aber ich muss ihn erstmal auf seine Tauglichkeit überprüfen.
Aber jetzt genug und testet selbst meine erste Version des Lightwriters
-- UPDATE 11.03.2007 --
Eine ähnliche Anwendung, wie mein Lightwriter entwickelten die Jungs vom Graffiti Research Lab. Bei ihrem sogenannten L.A.S.E.R. Tag kann man mit Hilfe eines Laserpointers und einem mega starken Beamer ein Haus mit Licht betaggen. Geile Umsetzung, einfach eine geile Sache! Es lebe der Digital Media Punk!
Jetzt ist es mal wieder soweit für einen Blogeintrag, mein Studium beansprucht mich mal wieder sehr, so dass ich mich im Moment nicht so sehr um neue Blogeinträge kümmern kann.
Nichtsdestotrotz habe ich meine noch verbleibende Zeit für die Contentpflege meiner Site genutzt. Herausgekommen sind einige neue Fotos im Bereich Natur,Mensch und Urban. Sowie einige neue Videos aus älteren Skatezeiten gibt es im Fun und ernsten Videobereich zusehen.
Im Rahmen der Studium Veranstaltung Ambient Intelligence habe ich mich mit dem Thema Interaction Techniques for Instrumented Environments beschäftigt. Das daraus entstandene Paper liefert einen Überblick über die Thematik und wie es in Zukunft evtl. in diesem Bereich weiter gehen kann. Kleine Anmerkung von mir: das Thema ist auch besonders interessant für den Bereich interaktive Medieninstallationen.
Preise für Informationsgüter können nicht mit herkömmlichen Grenzkostenmethoden bestimmt werden, da diese gegen Null tendieren. In dieser Arbeit soll über eine Umfrage bestimmt werden, nach welchen Methoden KMUs und Grossunternehmen die Preise ihrer Online-basierten Produkte bestimmen. Aus den Ergebnissen sollen Handlungsempfehlungen abgeleitet werden. Diese Arbeit ist für Studenten geeignet, die sehr gute analytische Fähigkeiten besitzen, in der Lage sind konzeptionell zu arbeiten, um ein Analysemodell zu entwickeln und selbständig Information zu suchen.
Zu guter Letzt habe ich schonmal mein neues Webcam Experiment hochgeladen, den Lightwriter. Bei diesem Experiment kann mit Hilfe einer Taschenlampe oder ähnliches auf dem vom Flashplayer erzeugten Webcambild malen. In den nächsten Tagen werde ich noch ein Beispielvideo uploaden und noch bissl später werde ich dazu einen ausführlichen Blogeintrag verfassen, damit man sich besser vorstellen kann wofür das Ding überhaupt gut ist.
Jetzt muss ich mal wieder an einem Java3D spiel fürs Studium weiterprogrammieren...
Nach einer Woche rumtüffteln mit meiner Webcam, habe ich es endlich geschafft, dass man mittels Webcam durch ein Menü navigieren kann. Die Grundlage der Personenextrahierung aus dem Webcambild stammt von dem Webcam Motion Detection Tutorial von Guy Watson, welches ich auf meine Bedürfnisse umgeschrieben habe. Das heisst der User erstellt ein Webcam Snapshot (er darf sich dabei nicht im Webcam-Bildbereich befinden) von seiner Umgebung. Somit erhalte ich alle Bildinformationen von seinem Hintergrund, die ich dann von dem jeweiligen aktuellen Bild (Frame) subtrahiere. Dieser Vorgang bewirkt, dass alle Pixel, die sich nicht verändern haben ein Ergebnis von Null zurückliefern (einen schwarzen Pixel). Alles was schwarz ist ist somit unaktiv, jedoch wenn ein Bereich zu z.B. 80% aus nicht schwarzen Pixel besteht, kann man davon ausgehen, dass dieser Bereich aktiv ist und eine Aktion kann ausgeführt werden.
Dieses Verfahren mittels Referenzbilderzeugung und Subtraktion funktioniert bisher ganz gut, jedoch stösst es bei Beleuchtungsänderung und bei Bildänderung durch die Automatik der Webcam an seine Grenzen. Bei solch einer Situation hilft nur noch die Erstellung eines neues Referenzbildes (Bei meinem Experiment durch den restart-Button möglich).
-- UPDATE 17.06.2007 --
Die CamButton Klasse wurde in Sachen Anwenderfreundlichkeit und erweiterte Funktionalität überarbeitet, so dass ihr diese Klasse sehr einfach für eure eigenen Experimente einsetzen könnt. Den Download gibt es unter Interactive Webcam Package mit ausführlicher Doku und Beispielcode zum leichteren Einstieg.