BLIT2007 - Laser Graffities

Aus BraLUG-Wiki

Wechseln zu: Navigation, Suche
Laser Graffities

Inhaltsverzeichnis

Idee

Vor einigen Jahren gab es bei Arte.tv einen Bericht über Laser-Graffities in den Niederlanden. Es gab auch eine kurze Diskussion in der BraLUG-Liste.

Irgendwann 2007 begann die Planung zum 4. Brandenburg Linux-Infotag. Die Laser-Graffities passten nun zum Inselmodell ... "Multimediastrand" und zum Konzept, mehr praktische Anwendungen vorzuführen und die Besucher aktiv einzubeziehen.

Das Programm lasertraq wurde getestet. Das Programm arbeitet auf Grundlage von gstreamer ... und war bei den Tests "zu langsam". Zur Optimierung und aus Interesse an der Video4Linux - Programmierung wurde dann ein eigenes Programm begonnen. Schneller ist es wahrscheinlich auch nicht geworden.

Konzept

In kurzen Stichpunkten:

  • Licht-Figuren werden mit einem Laser-Pointer oder einer sehr starken Taschenlampe an eine Wand gemalt.
  • Eine Videokamera nimmt diese Lichtbewegung in Einzelbildern auf.
  • Durch ein Videofilter werden die Lichtpositionen in den Einzelbildern berechnet:
    • Variante a) Lichtpunkt als Pointer: Die Positionen werden als "Mausclick mit Bewegung" umgerechnet und an die aktiven X-Programme gesendet.
    • Variante b) Lichtfläche als Grafikobjekt: Die Lichtlinien werden gefiltert, die Einzelbilder überlagert, als zusammengesetztes Grafikbild dargestellt und nachbearbeitet.
    • Variante c) Berechnung des Lichtpunktes / der Lichtfläche aus einem Soll-Ist-Vergleich zwischen dem Bildschirm- und Kamerabild.
  • Der X-Bildschirm wird mit einem Beamer wieder an die o.g. Wand ausgestrahlt, so dass ein "Malen auf diese Wand" simuliert wird.

Umsetzung

Lichtquelle -> Kamera

  • Der Lichtpunkt von Taschenlampen ist in dunkler Umgebung im Vergleich zum Umgebungslicht klar zu unterscheiden.

... in der Realität :-) nur zum Programmier-Test ohne Beamer für Entfernungen unter 3m geeignet

  • Die Leuchtstärke von handelsüblichen Laserpointern genügt für den Betrieb im Zimmer, auch bei mittlerem Tageslicht in Räumen. (zum Betrieb bei hellem Tageslicht und bei weiten Entfernungen sind stärkere Laser mit auch größerem Leuchtpunkt einzusetzen)

... in der Realität :-) Bei Dunkelheit war der Beamer nur ungenügend herunterzuregeln, so dass das Bild an der Wand bereits zu hell für die Kamera schien

Kamera -> Videoeingang

QuickCam auf Stativ über dem Beamer
QuickCam mit Zusatzlinse

Die optimale Kamera zur Bilderkennung hat folgende Eigenschaften:

  • ein fester Standpunkt

... in der Realität :-) Befestigung auf einem Stativ

  • Ausrichtung möglichst nah zur optischen Achse des Beamers

... in der Realität :-) direkt über dem Beamer

  • einen optischen Zoom, der das Zielbild auf volle Aufnahmegröße darstellen läßt

... in der Realität :-( Zusatzlinse für WebCam für 2/3 - Bildbereich

  • eine möglichst hohe Auflösung (möglichst nah an der des Beamers, der Lichtpunkt muss mehrere Pixel groß sein)

... in der Realität :-( Bildbereich nur 320x240 zu 1024x768, einfacher Laserpunkt auf 4m <1 Pixel

  • kurze Reaktionszeit und hohe Kontrastschärfe des Sensors

... in der Realität :-( langsamer und kontrastarmer CMOS-Sensor und alte USB1.1-Schnittstelle

Grafikprogramm: "graffities"

Grundlage für dieses Programm ist "fireDemo" von lasertraq.

Folgende Änderungen wurden vorgenommen:

  • Das Bild bleibt bestehen.
  • Das Programm verfügt über ein kleines Zeichenmenü mit den Funktionen:
    • Bild löschen
    • Pinselform wählen
    • Pinselgröße wählen
    • Pinselfunktion Malen / Wischen
    • Farbpalette wählen
    • Bildfarben verblassen

Arbeitshilfe: graffities.pdf

Quelltexte: graffities.tar.gz

Videoprogramm - Pointersteuerung: "laser_mouse"

Grundidee für die X-Pointer - Steuerung ist ebenfalls das Programm lasertraqd aus lasertraq.

Folgende Änderungen wurden vorgenommen:

  • Die Video4Linux - Schnittstelle wird direkt gelesen.
  • Während der Laufzeit können Video-Einstellungen angepasst werden.
  • XML-Verarbeitung wurde entfernt.
  • Der Event ButtonPress wurde berichtigt, um weitere X-Programme zu bedienen.
  • Der Mausclick wird nach einer einstellbaren Positionierzeit ausgelöst.

Arbeitshilfe: laser_mouse.pdf

Quelltexte: laser_mouse.tar.gz

Einsatz

USB Logitech QuickCam Expr. (360x296)

laser_mouse_video1.rc :

video_device /dev/video1
video_channel 0
video_brightness 100
video_color 128
video_contrast 128
video_hue 128
video_whiteness 0
filter_autobright 0
filter_polarize 0
filter_swaprgb 0
savetype 0
savetype_jpg_optimize 0
savetype_jpg_quality 75
savetype_jpg_smoothness 0
savetype_png_compression 6
savetype_png_interlace 0
savetype_ppm_format 0
vid_winxy0 0,0
vid_winxy1 360,296
capturexy0 75,15
capturexy1 325,195
mousexy0 4,30
mousexy1 1020,728


... stdout Ausgabe :

Name: Logitech QuickCam USB
Type: 513
        Can capture
        Can capture subareas of the image
Channels: 1
Audios: 0
Maxwidth: 360
Maxheight: 296
Minwidth: 32
Minheight: 32
---------
X: 0
Y: 0
Width: 360
Height: 296
Chromakey: 0
Flags: 524288
---------
Brightness:     25600 (100)
Hue:            32768 (128)
Color:          32768 (128)
Contrast:       32768 (128)
Whiteness:      0 (0)
Depth:          24
Palette:        4

Minolta Z2 (640x480) & Hauppauge (bt878)

laser_mouse_video0.rc :

video_device /dev/video0
video_channel 1
video_brightness 100
video_color 128
video_contrast 128
video_hue 128
video_whiteness 128
filter_autobright 0
filter_polarize 0
filter_swaprgb 0
savetype 0
savetype_jpg_optimize 0
savetype_jpg_quality 75
savetype_jpg_smoothness 0
savetype_png_compression 6
savetype_png_interlace 0
savetype_ppm_format 0
vid_winxy0 40,40
vid_winxy1 680,520
capturexy0 15,15
capturexy1 300,220
mousexy0 0,0
mousexy1 1024,768


... stdout Ausgabe :

Name: BT878 video (Hauppauge (bt878))
Type: 171
        Can capture
        Can tune
        Overlay onto frame buffer
        Can clip
        Scalable
Channels: 4
Audios: 1
Maxwidth: 924
Maxheight: 576
Minwidth: 48
Minheight: 32
---------
Channel: 1
Name: Composite1
---------
X: 40
Y: 40
Width: 640
Height: 480
Chromakey: 0
Flags: 0
---------
Brightness:     25600 (100)
Hue:            32768 (128)
Color:          32768 (128)
Contrast:       32768 (128)
Whiteness:      0 (0)
Depth:          16
Palette:        9

Screenshots

... vom BLIT2007:

Graffity1_320x240.jpg Graffity2_320x320.jpg

... aus den Programmtests:

Graffity3_320x240.jpg Graffity4_320x240.jpg

Graffity5_320x240.jpg Graffity7_320x240.jpg

Graffity6_320x200.jpg

Steuerung eines Tcl/Tk - Programms: "Memory"

Memory_welt_800x545.jpg

Als Alternative zu den Laser-Graffities wurde die Pointersteuerung auch zur Bedienung eines Tcl/Tk - Programms "Memory" genutzt. Gegenüber der eher kreativ fordernden Grafik benötigt man hier weniger Genauigkeit der Pointerbewegung und ein gutes Gedächtnis.

Kontakt

Fred Koegler

Weitere Informationen zum Thema

Alle meine Quellen waren unter GPL "wild zusammengesucht" - somit sind auch diese Programme "Freie Software unter GPL".

Das Programm ist "schnell" entstanden ... nicht genau auf den Code sehen. Ich habe noch einige Ideen, wie man die Funktionen & die Bildverarbeitung anders angehen kann. Ich möchte das Maus-Ziehen irgendwann so programmieren, dass auch GIMP zu bedienen ist. Weiß noch nicht, wann ich das versuche. Das Grundproblem bleibt: zueinander passende Ausrüstung und Lichverhältnisse.

Die Quellen sind hoffentlich mit "make all" einfach und ohne Änderungen zu übersetzen.


Die Quellen zur Programmierung waren ....

  • lasertraq ... Idee für Maussteuerung und "fireDemo" als Vorlage zum Malprogramm
  • gqcam Quellen liegen nicht mehr unter http://bigred.unl.edu/ ... QuickCam, Videobild speichern
  • sdlcam ... QuickCam, SDL, Videobild speichern
  • Farbraumkodierung ... Video - Farbraumkodierung UYVY -> RGB
  • tvtime ... ein kleines TV-Programm ... Video-Schnittstellen Video4Linux und Video4Linux2 "sicher" setzen / programmieren
  • GIMP ... Standardfarbverläufe als "POV color_map" gespeichert und mit eigenem Tcl-Script "pov2cpp.sh" in C-Header-Dateien umformatiert.
'Persönliche Werkzeuge