Home > Interaction, My Experiments, Programming > Webcam – Lightwriter Version 1.0

Webcam – Lightwriter Version 1.0

January 30th, 2007 Leave a comment Go to comments

lightgeste lightconfig lightbitmap

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

Sourcecode des Lightwriter

-- 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!

-- UPDATE 16.04.2007 --
Es gibt eine neue Version des Webcam Lightwriters