Logitech Quickcam Messenger unter Linux
Eine Kurzanleitung um den Logitech Quickcam Messenger USB unter Linux zu betreiben.
Einen modifizierten Treiber für die Quickcam Messenger Modelle gibts hier: http://home.mag.cx/messenger/
Installation des Treibers:
tar xvfz qc-usb-messenger-<version>.tar.gz cd qc-usb-messenger-<version> make install modprobe quickcam
im dmesg sollte jetzt etwa folgendes auftauchen:
Linux video capture interface: v1.00 quickcam [16.302906]: ----------LOADING QUICKCAM MODULE------------ quickcam [16.302919]: struct quickcam size: 4196 quickcam: QuickCam USB camera found (driver version QuickCam Messenger/Communicate USB 1.3 $Date: 2006/06/06 10:00:00 $) quickcam: Kernel:2.6.16-1.2133_FC5smp bus:1 class:FF subclass:FF vendor:046D product:08F0 quickcam [16.304103]: poisoning qc in qc_usb_init quickcam [16.307867]: E00A contains 08F0 quickcam: Sensor VV6450 detected input: Quickcam snapshot button as /class/input/input3 quickcam [16.310227]: Quickcam snapshot button registered on usb-0000:00:1f.2-1/input0 quickcam: Registered device: /dev/video0 usbcore: registered new driver quickcam
nun können wir die Kamera verwenden, im Beispiel auf /dev/video0
für meine Homepage verwende ich das Programm camE:
Installation:
yum -y install camE
Konfigurationsübersicht:
ich verwende kein FTP (camE kann FTP und scp)
Bilder werden nur lokal verarbeitet)
jede Sekunde wird ein Bild aufgenommen
Bilder werden nicht archiviert
folgende Pfade müssen in der config angepasst werden: infofile, archive, archive_thumbnails_dir, temp_file
temp_file = <httpdocroot>/webcam/webcam.jpg – dies ist das eigentliche Bild, das übertragen wird
~/.camErc
[ftp] host = cam.super.tasty.men.com user = giblet pass = NO_WAY_BUDDY dir = public_html/images # where should the file end up? Also, this extension determines the file # type the image is saved as. Try image.png for a png. file = webcam.jpg # camE uploads to a temp file, and moves it across when done # this way people don't view half-uploaded images tmp = uploading.jpg # keep the connection open (1) or reopen it for each shot (0) keepalive = 1 # do passive ftp? passive = 1 #an interface to use for non-passive ftp. use "-" to let libcurl choose, or #use a real interface name. (libcurl often chooses incorrectly) interface = - # ftp debugging? (noisy) debug = 0 # Actually do the upload? If do = 0, just take and archive pics. do = 0 # Some servers require us to explicitly delete the previous image # In that case, enable this option delete_first = 0 # Determines how many shots are taken before an image is uploaded. # (1 == every picture is uploaded, 10 would be every 10th image) # (Defaults to 1 if not present) upload_every = 1 # you can set ftp->do to 0 above and use scp instead - you still need # the dir, file and tmp settings in the ftp section for this to work. # scp also honors the upload_every setting from the ftp section, and # will also default to a value of 1 if not present. [scp] # target = user@host [grab] device = /dev/video0 # store temp image on local machine temp_file = <httpdocroot>/webcam/webcam.jpg # lag reduction, takes 5 shots, discards the first 4, thus clearing mmap # buffers lag_reduce = 5 # This goes at the bottom left, with the message from "infofile" appended. # It is run through strftime, so date vars are expanded. text = %d/%m/%Y %T %Z - #width = 352 #height = 288 # delay between uploading one shot and starting the next delay = 1 # do we want to correct the delay for a slow connect? # (keeps the perpetually updating clients in sync) correct = 1 # scale image resolution dynamically based on bandwidth? # percentage of the delay to spend uploading the image, # 100 disables, useful values are < 40 percent = 100 ######################################################## # PWC specific features (only for philps cams right now) # framerate of cam capture, lower fps -> less grainy image, more chance or # blurred motion framerate = 20 # image settings (0-100) colour = 50 brightness = 50 contrast = 50 hue = 50 whiteness = 50 # White balance mode # can be "auto", "indoor", "outdoor", "fluorescent" or "manual" pwc_wb_mode = auto # if _mode is set to manual, these two controls affect the balance # (0-100) pwc_wb_red = 50 pwc_wb_blue = 50 ######################################################## # where to log activity. comment out this line to disable logging logfile = /dev/null # gets the message text from here. one line allowed only. means you can do # stuff like echo "sleeping and stuff" > ~/.caminfo infofile = <homedir>/.caminfo # directory to archive pics in. They are datestamped and saved in here. archive = <httpdocroot>/webcam # archive pics in datestamped subdirs # (1 == with subdirs, 0 == without subdirs) archive_subdirs = 0 # extension (determines type) of archived images. archive_ext = jpg # determines how many shots are taken before a pic is archived # (1 == every pic, 0 == don't archive) archive_shot_every = 0 # create archive thumbnails enable/disable flag and give width/height archive_thumbnails_dir = <httpdocroot>/webcam/thumbnails archive_thumbnails_create = 0 archive_thumbnails_width = 120 archive_thumbnails_height = 90 # jpeg quality (you can save as png etc too, but then quality does squat) quality = 80 input = 0 # 0 for PAL, 1 for NTSC norm = 0 # Goes in the top right. strftime() is run on this too, so put date stuff in # if you like title_text = WebCAM # color/transparency of title text title_r = 255 title_g = 255 title_b = 0 title_a = 255 # font for title text. fontname/size title_font = luxisb/8 # fancy font styles # title_style = /path/to/title.style # color/transparency of message text text_r = 255 text_g = 255 text_b = 0 text_a = 255 # font for message text. fontname/size text_font = luxisb/8 # fancy font styles # text_style = /path/to/text.style # color/transparency of rectangle behind text # make it 0,0,0,0 to disable. bg_a = 0 bg_b = 0 bg_g = 0 bg_a = 100 # directory to look for ttf fonts in ttf_dir = /usr/share/X11/fonts/TTF/
~/.caminfo (Text der im Bild eingebettet wird)
www.magenbrot.net
das Programm kann dann mit „camE“ gestartet werden. Nun legt es jede Sekunde das aktuelle Bilder unter <httpdocroot>/webcam/webcam.jpg ab. Jetzt fehlt noch die Anwendung, die die aktuellen Bilder an den Client „pusht“.
Erstmal eine schöne Verpackung für das Webcam-Bild: <httpdocroot>/webcam/index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="expires" content="0"> <title>magenbrot.net -- webcam</title> <link href="../styles.css" rel="stylesheet" type="text/css"> </head> <body> <br><br> <center> my Webcam...<br><br> <IMG SRC="/cgi-bin/nph-webgrab.cgi/0.jpg" ALT="WebCam Picture-"><br> <br> Standort: Betriebsbüro OnlineDienst Nordbayern<br> </center> </body> </html>
und hier die CGI-Push Anwendung: <httpdocroot>/cgi-bin/nph-webgrab.cgi
#!/usr/bin/perl
print "HTTP/1.0 200 Document follows\n";
print "Content-type: multipart/x-mixed-replace;boundary=goober\n\n";
while(true){
print "\n--goober\n";
print "Content-type: image/jpeg\n\n";
open(IN, "../webcam/webcam.jpg");
while (read(IN, $buffer, 4096)) {
print $buffer;
}
close("../webcam/webcam.jpg");
sleep(1);
}
print "\n--goober--\n";
exit 0;
fertig.