BLIT2007 - Laser Graffities
Aus BraLUG-Wiki
Fred (Diskussion | Beiträge) |
MaD (Diskussion | Beiträge) K (kategorisiert) |
||
(15 dazwischenliegende Versionen von einem Benutzer werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | [[Bild:Laser_graffities_icon_64x64.png|64px| | + | [[Kategorie:BLIT2007]] |
+ | [[Kategorie:Veranstaltungen]] | ||
+ | [[Kategorie:Hardware]] | ||
+ | |||
+ | [[Bild:Laser_graffities_icon_64x64.png|thumb|64px|Laser Graffities]] | ||
==Idee== | ==Idee== | ||
Zeile 17: | Zeile 21: | ||
** Variante b) Lichtfläche als Grafikobjekt: Die Lichtlinien werden gefiltert, die Einzelbilder überlagert, als zusammengesetztes Grafikbild dargestellt und nachbearbeitet. | ** 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. | ** 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== | ==Umsetzung== | ||
Zeile 28: | Zeile 32: | ||
===Kamera -> Videoeingang=== | ===Kamera -> Videoeingang=== | ||
+ | [[Bild:Kamera_beamer_320x280.jpg|thumb|160px|QuickCam auf Stativ über dem Beamer]] | ||
+ | [[Bild:Quickcam_mit_linse_320x320.jpg|thumb|160px|QuickCam mit Zusatzlinse]] | ||
Die optimale Kamera zur Bilderkennung hat folgende Eigenschaften: | Die optimale Kamera zur Bilderkennung hat folgende Eigenschaften: | ||
Zeile 34: | Zeile 40: | ||
* Ausrichtung möglichst nah zur optischen Achse des Beamers | * Ausrichtung möglichst nah zur optischen Achse des Beamers | ||
... in der Realität :-) direkt über dem Beamer | ... in der Realität :-) direkt über dem Beamer | ||
− | |||
* einen optischen Zoom, der das Zielbild auf volle Aufnahmegröße darstellen läßt | * 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 | ... 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) | * 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 | ... in der Realität :-( Bildbereich nur 320x240 zu 1024x768, einfacher Laserpunkt auf 4m <1 Pixel | ||
Zeile 78: | Zeile 82: | ||
==Einsatz== | ==Einsatz== | ||
===USB Logitech QuickCam Expr. (360x296)=== | ===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 :''' | '''... stdout Ausgabe :''' | ||
Zeile 99: | Zeile 130: | ||
Flags: 524288 | Flags: 524288 | ||
--------- | --------- | ||
− | Brightness: | + | Brightness: 25600 (100) |
Hue: 32768 (128) | Hue: 32768 (128) | ||
Color: 32768 (128) | Color: 32768 (128) | ||
− | Contrast: | + | Contrast: 32768 (128) |
Whiteness: 0 (0) | Whiteness: 0 (0) | ||
Depth: 24 | Depth: 24 | ||
Zeile 108: | Zeile 139: | ||
===Minolta Z2 (640x480) & Hauppauge (bt878)=== | ===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 :''' | '''... stdout Ausgabe :''' | ||
Zeile 147: | Zeile 205: | ||
... vom BLIT2007: | ... vom BLIT2007: | ||
− | + | [[Bild:Graffity1_320x240.jpg|320px|Graffity1_320x240.jpg]] [[Bild:Graffity2_320x320.jpg|320px|Graffity2_320x320.jpg]] | |
− | + | ||
... aus den Programmtests: | ... aus den Programmtests: | ||
− | + | [[Bild:Graffity3_320x240.jpg|320px|Graffity3_320x240.jpg]] [[Bild:Graffity4_320x240.jpg|320px|Graffity4_320x240.jpg]] | |
− | + | ||
+ | [[Bild:Graffity5_320x240.jpg|320px|Graffity5_320x240.jpg]] [[Bild:Graffity7_320x240.jpg|320px|Graffity7_320x240.jpg]] | ||
+ | |||
+ | [[Bild:Graffity6_320x200.jpg|320px|Graffity6_320x200.jpg]] | ||
− | + | ===Steuerung eines Tcl/Tk - Programms: "Memory"=== | |
− | + | ||
− | + | [[Bild:Memory_welt_800x545.jpg|thumb|200px|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== | ==Kontakt== |
Aktuelle Version vom 22. Mai 2008, 08:57 Uhr
Inhaltsverzeichnis |
[Bearbeiten] 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.
[Bearbeiten] 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.
[Bearbeiten] Umsetzung
[Bearbeiten] 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
[Bearbeiten] Kamera -> Videoeingang
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
[Bearbeiten] 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
[Bearbeiten] 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
[Bearbeiten] Einsatz
[Bearbeiten] 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
[Bearbeiten] 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
[Bearbeiten] Screenshots
... vom BLIT2007:
... aus den Programmtests:
[Bearbeiten] Steuerung eines Tcl/Tk - Programms: "Memory"
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.
[Bearbeiten] Kontakt
[Bearbeiten] 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.