Seit einiger Zeit spiele ich schon mit bildbasierter Interaktion rum (wie man es im meinen Experimenten Bereich gut sehen kann:-). Leider liesen sich die bisherigen Klassen nicht so einfach ohne Änderung für andere Experimente verwenden. Aus diesem Grund habe ich mich jetzt nochmal hingesetzt und die Klassen richtig aufgeräumt bzw. auch zum Teil verbessert.
Das Lichter Tracking arbeitet endlich auflösungsunabhängig (funzt somit auch in 640x480px) und wirft schön Events, die ihr mit einem einfachen Listener Objekt abrufen könnt.
Die CamButton Klasse wurde komplett überarbeitet. Es gibt jetzt eine CamButtonManager Klasse mit der man dann die Cam Buttons erzeugt, ganz nach dem Prinzip des Factory Pattern. Die CamButtonManager Klasse überprüft desweiteren ob der Button aktiv ist oder nicht und führt dementsprechend das Ereignis aus. Was mir aber am besten gefällt ist, dass jetzt in zwei verschiedenen Modi gearbeitet werden kann. Einmal der bisher bekannte Modus mit dem Differenzkey (wo man vorher ein Snapshotbild ohne User erstellen musste) und jetzt gibt es neuerdings noch dazu den Modus Motion Detection, der ganz nach dem Prinzip von Guy Watson arbeitet. Nur dass man bei meiner Version die Menge der Frameüberlagerungen zur Laufzeit einstellen kann. ;-p
Das wars auch schon im Groben an Neuerungen. Ich hoffe mit den Klassen kann jetzt jeder ein bissl schneller mit bildbasierter Interaktion herumspielen. Die Klassen könnt ihr euch mit Codebeispielen und einer ausführlichen Dokumentation hier runterladen:
Nachdem mein Webcam Lightwriter Version 1.0 leider nicht bei allen Webcams so gut funktioniert hat (wegen Helligkeitsproblem), habe ich ein komplettes neue Trackingverfahren geschrieben. Ich arbeite jetzt nicht mehr mit der Funktion Bitmap.getColorBoundsRect(), sondern analysiere fast jedes Pixel des Webcambildes. Bei der ersten Version hatte ich massive Perfomance-Probleme bei der Helligkeitsüberprüfung. Die konnte ich dank eines Tipps meines WG-Kollegen Matze ziemlich einfach lösen. Ich sollte einfach das Webcam Bild in ein Schwarz/Weiss Bild umwandeln. Mit Hilfe des colorMatrixFilter von Matthias Kannengiesser wandelte ich das Webcambild um und hatte somit eine Art Graustufenbild (Helligkeitsbild). Dieses Graustufenbild wandelte ich wiederum mit Hilfe der Bitmap.threshold() Methode und einen variablen Schwellenwert in ein Binärbild um. So waren die hellen Punkte (Lichter) weiss und der Rest schwarz. Damit die Perfomance noch im Rahmen bleibt, skalierte ich das Bitmap auf 80x60 Pixel herunter. Diese Auflösung reichte in meinen Tests für ein erfolgreiches Tracking aus.
Nachdem ich das Bild jetzt endlich fertig bearbeitet hatte, ging es an das eigentlich Tracking. Ich suchte im Bild nach einem weissen Pixel, der noch zusätzliche weisse Pixel als Nachbarn hat (mind. 3 bis 4). Ist diese Bedingung erfüllt, ging ich davon aus, dass es sich an dieser Stelle um ein Licht handeln müsse. Um die Grösse des Lichtes zu ermitteln, überprüfte ich die immer aufeinander folgenden horizontalen Nachbarn nach der obigen (weissen Nachbar) Bedingung. Wenn diese Bedingung nicht mehr erfüllt ist, ging ich davon aus, dass ich die Breite des Lichtes grob ermittelt hatte. Nun musste ich die Höhe des Lichtes ermitteln. Die Höhe ermittelte ich genauso wie die Breite des Lichtes nur das ich die vertikal aufeinander folgenden Pixel überprüfte. Dieses gesamte Verfahren lieferte mir schon eine zufriedenstellende Information über die Position des Lichtes, aber nicht über die ungefähre Grösse. Denn bei der Breite war dieses Verfahren noch nicht stabil genug. Dieses Problem konnte ich aber mit einem einfachen Trick lösen. Ich halbierte die ermittelte Höhe des Lichtes und überprüfte dort (y= yWertLinksOben + lichtHöhe/2) nochmals alle horizontalen aufeinander folgenden Pixel nach weissen Nachbarn. Wenn diese ermittelte Breite grösser war (das ist sie in der Regel auch), übernahm ich diese als aktuelle Breite für das Licht. Am Ende dieses Verfahren gebe ich ein Rechteck-Objekt zurück, das genug Informationen zu der EINEN getrackten Lichtquelle beinhaltet.
Froh darüber, das ich das Tracking erfolgreich geschafft hatte (in Furtwangen), wollte ich es zu Hause bei meinen Eltern (in Ober-Mörlen) weiter verbessern. Und siehe da es funktioniert nicht mehr. Und warum?! Weil eine zweite Lichtquelle im Webcam Bild war. Mein Algortihmus wusste nie welches Licht jetzt getrackt werden sollte. Ein Differenzverfahren wollte ich nicht benutzen, da dadurch die Bildinformation meines Lichtes erheblich verändert werden kann und wegstellen konnte ich das Licht auch nicht, Grr. Da meiner Meinung nach, so etwas aber ein absoluter Standardfall sein könnte, kam mir die Idee mehrere Lichter zu tracken. Also hab ich mich wieder dran gesetzt um das Verfahren auch noch für mehrere Lichter fit zu machen. Lichter zu finden war ja zu diesem Zeitpunkt kein Problem mehr, nur mehrere Lichter zu finden ohne das dabei die Perfomance in die Knie geht, war da schon schwerer umzusetzen. Ich durfte einfach die schon überprüften Pixel nicht nochmals überprüfen - Wer sich den Algortihmus genau anschaut, wie ich die Grösse des Lichtes ermittle wird verstehen was ich meine - Als erstes wollte ich dann die überprüften Pixel mit einer anderen Farbe kennzeichnen, was mir aber das Webcambild im nach hinein verfälscht hätte. Und das fand ich gar nicht gut. Nächster Gedanke war es ein extra 2dim. Array (80x60) anzulegen und dies mit den Stadien 0=noch nicht überprüft und 1=schon überprüft zu belegen. Aber das war mir viel zu umständlich, bis auch hier mir wieder jemand den ultimativen Tipp gab, den nicht genutzten Alpha Kanal für dieses Problem zu nutzen (Dank hier an Helge - Stefan Eckert). Denn wenn der Alpha Kanal den Wert 255 hat, muss ich die Pixel überprüfen, wenn er den Wert 0 hat ist eine Überprüfung nicht mehr nötig. Mit Hilfe dieses Verfahren bekam ich alle Lichtquellen heraus gefiltert. Jetzt musste ich sie nur noch passend sotieren, so dass z.B. Lichtquelle 1 auch immer als Lichtquelle 1 erkannt wird. Das machte ich mit einem Distanzvergleich alter Trackingergbnisse mit den neuen Trackingergebnissen. Dort wo die Distanz zwischen den alten und neuen TrackingRechtecken am Geringsten ist, ist ein Paar gefunden und es musste sich um die gleiche Lichtquelle handeln. Ja und in meinen Tests mit 2-3 Lichtquellen funktioniert das auch ganz gut. Schaut mal rein.
-- UPDATE 17.06.2007 --
Die LightTracking Klasse wurde in Sachen Anwenderfreundlichkeit überarbeitet, so dass ihr diese Klasse super einfach für eure eigenen Experimente benutzen könnt. Den Download gibt es unter Interactive Webcam Package mit ausführlicher Doku und Beispielcode zum leichteren Einstieg.
Sowie in der objektorientierten Programmierung gibt es auch im Interaktionsdesign für immer wieder auftretende Prozesse sogenannte Design Patterns. Diese Patterns beschreiben für bestimmte Prozesse eine oder mehrere passende Musterlösungen. Diese Musterlösungen können bei komplexeren Interaktionsprozessen miteinander kombiniert werden. Auf welie.com gibt es eine sehr gute Übersicht der Usability Design Patterns für den Bereich Web, Desktop-Anwendungen usw. Schaut mal rein, wenn ihr die Usability eurer Seite verbessern oder ein Usability Problem lösen wollt. Bei Problemen mit Fachbegriffen im Interaktionsdesign hilft euch die Interaktiondesign Enzyklopädie von Interaction-Design.org weiter. Damit aber nicht genug mit der Informationsflut, denn weitere Infos zum Thema Mensch-Maschinen Kommunikation gibt es noch in einem speziellen HCI-Mag der ACM-Crew 😉
Eine Art von Usabililty ist auch im non-interactiven Grafikbereich vorhanden. Kennt ihr es, wenn ihr ein Buch lest und auf eine Skizze verwiesen wird, die zwei Seiten vorher war. Oder wenn man auf seinen Bildschirm sehr viele aneinander gereihte Wörter lesen muss. Was ich aber viel schlimmer finde, sind schlecht aufbereitete Grafiken, die einem einen komplexen Sachverhalt erklären sollen. In unserer heutigen Fülle an Daten reichen einfach die bewährten Graphenmodelle zur Repräsentierung nicht mehr aus. Genau um diese Problematik kümmert sich der immer mehr aufblühende Informationsdesign Bereich. Denn gerade die Hauptaufgabe eines Informationsdesigner ist es komplizierte Sachverhalte in einem einfachen visuellen Kontext zu repräsentieren. In dieser Sache kann ich euch die Seite infosthetics.com sehr empfehlen. Manche experimentalen Visualisierungstechniken im Informationsdesign erinnern mich doch sehr an einige Experimente aus der Processing Szene. Hm, da gibt es doch bestimmt einen Zusammenhang...
-- UPDATE 24.01.2008 --
Die Seite UI-patterns.com liefert eine nette Übersicht über User Interface Design Patterns und bietet darüber hinaus noch mehr Infos (ein Wiki usw.) zum Thema User Interface an.
-- UPDATE 12.9.2008 --
Die Uni Basel hat ein Portal mit dem Namen interaction-patterns.org veröffentlicht. Sieht auf den ersten Blick ganz nett aus. Hoffe es entwickelt sich noch weiter!
Im Rahmen meiner Fachschaftstätigkeit wurde ich beauftragt eine Liste von Zeitschriften zu erstellen, die den kompletten Anwendungsbereich eines Medieninformatiker und Online Medianer abdeckt. Da diese Auflistung für den ein oder anderen interessant sein könnte, möchte ich sie keinen vorenthalten. Für den Bereich Werbung, Design, Animation und Post Production gehen an den Start die deutschen Zeitschriften Digital Production (hauptsächlich 3D und Post Production) und die PAGE (Werbung, Design und ein bissl Medienproduktion). Aus dem englischen Raum kommen die nicht ganz so billigen Zeitschriften Computer Arts Project, Computer Arts und 3D World in Frage. Den fließenden Übergang vom designlastigen zum programmierlastigen bildet das deutsche RIA und Multimedia Entwicklungsmag Visual X, das sich stark mit der grafischen (Web)Programmierung beschäftigt. Nun wo wir jetzt beim Programmieren angelangt sind gibt es einige sehr gute technologiebasierte Mags, deren Titel so aussagekräftig sind, dass sie keine nähere Erläuterung benötigen.
Und zu guter Letzt für die Game Developer unter uns das amerikanische Game Developer Magazine, das den Wissensdurst rund um die Spiele Entwicklung ein bissl stillen sollte.
Wem das noch nicht genug ist und sich noch ein bissl Insparation holen will (oder um einfach von dem fachspezifischen Gedankengut mal wegzukommen), sollte sich hin und wieder einige Magazine, wie z.B. die Art (für Design), den Kameramann und die Schnitt für den Filmbereich oder Brand eins (fürs Management), zu Gemüte führen.
Ich denke die erwähnten Magazine decken den Digitalen Medien Markt bis auf den Mobilen Bereich ziemlich gut ab. Leider kenne ich mich im mobilen Bereich nicht sehr gut aus und habe somit leider kein brauchbares Magazine für den Mobile Developer gefunden. Falls einer von euch ein gutes Mag kennt, bitte schreibt mich an. Ich bin für jeden Tipp dankbar. Vielen Dank!
-- UPDATE 22.07.2007 --
Neulich bei meinem Streifzug bin ich über zwei neue Zeitschriften gestossen, die für den Media Producer sehr interessant sind. Die Zeitschrift Medienwirtschaft für Managementthemen in den Medien und die Zeitschrift Form f¨r den Designbereich.
-- UPDATE 2.06.2008 --
Mir sind zwei weitere Zeitschriften über den Weg gelaufen, die in Sachen Interaktion sehr interessant sein könnten: Make Magazine ACM Interaction
Lange Zeit konnte man bei Flash nur auf die Interaktionsmöglichkeiten mit der Maus und der Tastatur zugreifen. Jetzt wo Flash bzw. ActionScript immer erwachsener wird, kommen ganz neue Interaktionsmöglichkeiten dazu, die dem Flashentwickler in Hinsicht auf das Interaction Design ganz neue Möglichkeiten bieten.
So kann man z.B. über ActionScript einige Sensoren (für Bewegung, Wärme usw.) ansprechen und auf deren gelieferten Werte reagieren. Makingthings.com und arduino.cc bieten diese Sensoren Baukästen mit dazugehörigen Treibern/APIs an. Beide Anwender benutzen das gleiche Hardwareprinzip. Es gibt eine Hauptplatine - ähnlich einem Motherboard - auf der dann die diversen Sensoren drauf gesteckt werden können. Die Daten werden dann von der Hauptplatine per USB an den Rechner geliefert. Durch die mitgelieferten APIs und Treiber können die Daten relativ einfach abgefangen und verarbeitet werden. Damit der Einstieg dann weiterhin so einfach wie möglich ist, bietet makingthings.com einen sehr guten Tutorialbereich an, in dem sicher fast all eure anfänglichen Fragen beantwortet werden können.
Desweitern hat es Thibault Timbert von bytearray.org geschafft Motion Capture Daten in Flash einzulesen und diese im 3D Raum sinnvoll zu visualisieren. Von dem Ergebnis war ich super überrascht, da ich bisher dachte, das wäre nur mit teuren 3D-Animationsprogrammen (wie z.B. Maya, Softimage usw.) möglich. Ich bin mal gespannt welche neuen Anwendungsgebiete sich daraus ergeben.
Für die bisher vorgestellten Möglichkeiten muss man jedoch ein bissl tiefer in die Tasche greifen und da man das nicht von jedem verlangen kann, kommen wir jetzt zu etwas einfachern und schon bekannten Interaktionstechniken der Spielekonsolen. Flash Spiele können seit jüngster Zeit mit den bekannten Kontroller der Playstation und der Wii-Konsole gesteuert werden. Joa Ebert entwickelte erfolgreich eine Kommunikation zwischen Flash und dem Wii-Controller mit Hilfe eines Socket Servers. In seinem Blog könnt ihr mehr über sein Vorgehen lesen. Auch Thibault Timbert war in dieser Richtung aktiv und entwickelte in ActionScript 3 eine Kommunikation zwischen einem analogen Gamecontroller und der Flash Technologie. Mit welchen Mitteln er diese Kommunikation erfolgreich entwickelte, könnt ihr auch in diese Fall wieder in seinem Blog nachlesen.
Zum Ende dieses Blogeintrages möchte ich euch noch auf die bildbasierte Interaktion per Webcam aufmerksam machen. In meinem Blog habe ich über dieses Thema schon einige Einträge verfasst. Deshalb hier nur 2 Verweise auf die wichtigsten Blogeinträgen: Grundsätzliches zu Webcam Games und die kleine Linksammlung zur Webcam Interaktion.
-- UPDATE 21.03.2007 --
Die Seite wiiflash.org widmet sich ganz dem Thema des Wii Controllers in Kombination mit der Flash Technologie
-- UPDATE 16.02.2008 --
Für die Entwicklung von hardware- bzw. sensorenbasierten Interaktion hat der O Reilly Verlag ein interessantes Buch mit dem Titel Making Things Talk: Practical Methods for Connecting Physical Objects herausgebracht. Ich denke das könnte für angehende Interface und Interaction Designer ein sehr interessantes Buch sein...
-- UPDATE 31.03.2008 --
Bin letztens auf die Homepage von Phidgets gestossen. Phidgets bietet Lösungen für USB Sensing und Controlling an, die kompatibel mit ActionScript 3 sind. So kann man jetzt dank Phidget mit RFID-Sensoren arbeiten. ein Blick auf deren Homepage lohnt sich daher auf jeden Fall.
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!
Nach jetzt fast 4 Jahren Studium haben ich endlich meinen Schwerpunkt gefunden. Das Thema Interaktion bereitet mir so grosse Freuden, das ich mich weiter darin vertiefen möchte. Auf der Suche nach mehr Informationen zum Bereich Interaction Development bin ich auf 2 interessante Studiengänge gestossen. Interface Design an der FH Potsdam und den Masterstudiengang Interaktive Mediensysteme an der FH Augsburg. Den Studiengang Interface Design gibt es in einer Bachelor of Arts und in einer Master of Arts Version. In den beiden Versionen Bachelor und Master beschäftigen sich die Potsdammer mit Interaktion am Computer, mit haptischen Gegenstände und mit gestenbasierenden (Kamera)Systemen. Bei den Augsburger kann man sich in den Bereichen Animation, Mobile Experience und Game Development spezialisieren. Beide Studiengänge hören sich für meine spätere Masterstudiengangwahl sehr interessant an.
Da aber ein Studium allein nicht immer das Wahre ist, habe ich eine kleine Literaturliste zusammengestellt. Leider habe ich noch kein Buch davon gelesen, aber die Bücher machen mir einen sehr guten ersten Eindruck:
--- UPDATE --- 3.2.2007
Habe einen netten östereichischen Blog zum Thema Interaction Design gefunden.
--- UPDATE --- 12.2.2007
Durch ein Tip von meinem Studienkollegen bin ich auf den eCulture Blog der eCultureFactory (unterstützt vom Fraunhofer Institut)aufmerksam geworden. Dort gibt es einige interessante Einträge zum Thema Interface Design.
--- UPDATE --- 15.12.2007
Jens Franke hat in seinem Blogeintrag Weihnachtsbuchtipps eine noch umfangreichere Literaturliste zum Thema Interaction Design zusammengestellt. Wer will sollte dort mal vorbei schauen.
Viel Literatur zum interaktiven Video im Web gibt es nicht. Im deutschprachigen Raum ist mir nur ein nennenswertes Buch aufgefallen Interaktives Video im Internet mit Flash von Florian Plag und Roland Riempp. Durchgelesen habe ich das Buch nicht, jedoch hat die Leseprobe mir Lust auf mehr gemacht. Besonders gut finde ich die technologisch unabhängige Betrachtung von Interaktivität im Video und die Begründung warum gerade Flash Video State-of-the-art im Web ist. Desweiteren gibt es eine Website mit einem sehr gutem Blog zu diesem Buch www.video-flash.de.
Im englischsprachigen Raum kann ich das Buch Foundation Flash 8 Video vom Verlag Friends of ED empfehlen. Am Anfang gibt es eine kleine Einführung in die Videoverarbeitung und dann geht es auch schon direkt los, wie z.B. man am schnellsten sein Video in die eigene Website integriert (mit z.B. der FlvPlayback-Komponente). Im Mittelteil beschäftigt sich das Buch mit dem Interaktionsaufbau einer Videogallerie (hierzu sollte man schon ActionScript Kenntnisse besitzen). Aber auch eine kleine Einführung in die Erstellung eigener Videoeffekte fehlt bei diesem Buch nicht. Diese Buch richtet sich hauptsächlich an Anfänger und Fortgeschrittene im Bereich Flash Video, Profis in diesem Bereich werden eher enttäuscht sein.
Da interaktives Video mehr ist als nur die typische Clientanwendung zum Abspielen von Videos beim User, ist auch das Können des Flash Video Developer im Bereich Servertechnologien und Streaming gefragt. Gerade bei den Themen Videochat, Videostreaming usw. hat sich das Buch Programming Flash Communication Server vom Verlag O Reilly als Standardwerk heraus kristallisiert.
Ich denke mit dem Wissen dieser 3 Bücher ist man für fast alle zukünftigen Flash Video Anwendungen gut vorbereitet und braucht keine Angst mehr vor der Video Revolution im Web zu haben 😉
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.
mehr zu der Thematik findet man noch in 2 Threads. Thread 1 und Thread 2 aus dem Flashforum
Desweiteren versorgt Intel die OpenSource Gemeinde mit einer kostenlosen C++ Bibliothek im Bereich Bildverarbeitung mit dem Namen Open CV. Die Bibliothek soll unter anderem Gesichts- und Gestenerkennungen beherrschen und noch einiges mehr. Für die C++ Programmierer auf jeden Fall mal ein Klick wert!
Auch das MIT ist in diesem Bereich akiv. Ziel ist die Erstellung komfortabler Werkzeuge für die Entwicklung interaktive Grafikanwendungen basiert auf visuellen Kamerasignalen.
-- UPDATE 19.12.2006 --
Auch meine vorherige Hochschule (FH Wiesbaden) ist in diesem Bereich mittlerweile aktiv geworden. Einige interessante Projekte (AR-Arcanoid, AR-Soccer) unter der Leitung von Prof. Schwanecke. Auf seiner Seite gibt es unter dem Fach Computergrafik Vertiefung noch mehr Infos zum Thema VideoMotionDetection in Kombination mit 3D Umgebungen!
-- UPDATE 11.03.2007 -- BodyPong, ein nettes Webcamspiel, das man zu zweit spielen kann. Entstanden mit der Flash Technologie und dem hier bereits erwähnten EyesWeb-Framework
-- UPDATE 17.04.2007 --
Mit Flashfilterlab.com lassen sich ganz ohne Programmierkenntnisse Webcaminteraktion realisieren. Die GUI-Oberfläche von Flashfilterlab ähnelt sehr stark dem Prinzipien von MaxMSP/Jitter. Auf der Inertnetseite kann man das Ganze auch mal testen! Bin überrascht von der Perfomance im Browser.