Von einer 6€ Kamera aus dem China Versand kann man nicht viel verlangen. Das war mir schon klar. Trotzdem habe ich für eine Projekt (über das ich hier später noch berichten werde) mal eine solche USB 2.0 Camera für den Raspberry PI bestellt und mir mal angesehen, was damit möglich ist.
Die Kamera kann ganz einfach über den USB Anschluss an den Raspberry PI angeschlossen werden. Die Kamera benötigt keine besonderen Treiber und kann direkt mit fswebcam verwendet werden. Die Installation von fswebcam ist denkbar einfach mit
sudo apt-get install fswebcam
möglich. Mein erster Versuch ein Bild zu machen war nicht sehr erfolgreich.
Nach kurzer Recherche im Internet habe ich gelesen, dass dies bei der Camera schon mal passieren kann. Daher sollte man immer die ersten Frames skippen bevor man ein Bild aufnimmt. Mit der Option skip 20 werden die ersten 20 Bilder ignoriert und erst das 21ste Bild gespeichert. Das ist schon mal deutlich besser, aber ich habe bei mir in der Garage nicht die besten Lichtverhältnisse und daher lasse ich mir mit dem fswebcam -v –list-controls Aufruf die möglichen Options ausgeben.
fswebcam -v --list-controls --- Opening /dev/video0... Trying source module v4l2... /dev/video0 opened. src_v4l2_get_capability,87: /dev/video0 information: src_v4l2_get_capability,88: cap.driver: "uvcvideo" src_v4l2_get_capability,89: cap.card: "USB2.0 PC CAMERA" src_v4l2_get_capability,90: cap.bus_info: "usb-bcm2708_usb-1.4" src_v4l2_get_capability,91: cap.capabilities=0x84000001 src_v4l2_get_capability,92: - VIDEO_CAPTURE src_v4l2_get_capability,103: - STREAMING No input was specified, using the first. src_v4l2_set_input,181: /dev/video0: Input 0 information: src_v4l2_set_input,182: name = "Camera 1" src_v4l2_set_input,183: type = 00000002 src_v4l2_set_input,185: - CAMERA src_v4l2_set_input,186: audioset = 00000000 src_v4l2_set_input,187: tuner = 00000000 src_v4l2_set_input,188: status = 00000000 Available Controls Current Value Range ------------------ ------------- ----- Brightness 60 (23%) 0 - 255 Contrast 122 (47%) 0 - 255 Saturation 88 (34%) 0 - 255 Hue 0 (50%) -127 - 127 Gamma 4 1 - 8 Power Line Frequency 50 Hz Disabled | 50 Hz | 60 Hz Sharpness 3 (20%) 0 - 15 Backlight Compensation 5 1 - 5 src_v4l2_set_pix_format,541: Device offers the following V4L2 pixel formats: src_v4l2_set_pix_format,554: 0: [0x56595559] 'YUYV' (YUV 4:2:2 (YUYV)) Using palette YUYV Adjusting resolution from 384x288 to 352x288. src_v4l2_set_mmap,693: mmap information: src_v4l2_set_mmap,694: frames=4 src_v4l2_set_mmap,741: 0 length=202752 src_v4l2_set_mmap,741: 1 length=202752 src_v4l2_set_mmap,741: 2 length=202752 src_v4l2_set_mmap,741: 3 length=202752 --- Capturing frame... Captured frame in 0.00 seconds. --- Processing captured image... There are unsaved changes to the image.
Nach etwa 30 Minuten habe ich die bestmöglichen Einstellungen für mich gefunden und die Werte für Brightness, Contrast, Saturation, Hue, Gamma, Sharpness und Backlight Compensation festgelegt. Allerdings gelten diese Werte nur für die momentanen Lichtverhältnisse und eine Automatik suche ich leider vergebens.
Die Einstellungen speichere ich in einer Datei /etc/webcam.cfg ab.
device /dev/video0 jpeg 95 resolution 640x480 title "Garage" set "Brightness"=60 set "Contrast"=122 set "Saturation"=88 set "Backlight Compensation"=5 save "/tmp/webcam.jpg" skip 20
Um nun ein Bild mit der USB2.0-PC-Camera und fswebcam zu machen, brauche ich nur den Befehl fswebcam -c /etc/webcam.cfg aufzurufen. Das Ergebnis ist noch immer nicht berauschend, aber für meine Zwecke braucht es das auch nicht zu sein.
Die Einstellungen werden nun aus der Konfigurationsdatei genommen. Da ich die Bilder auch direkt auf einen Server kopieren möchte, ergänze ich noch einen Upload und fertig ist mein Webcam Upload mit dem Raspberry PI und der USB2.0-PC-Camera für satte 6€.
#!/bin/sh rm -f /tmp/webcam.jpg fswebcam -c /etc/webcam.cfg curl \ -F "userid=1" \ -F "filecomment=This is an image file" \ -F "image=@/tmp/webcam.jpg" \ http://MEINSERVER/MEINVERZEICHNIS/MEINSCRIPT.php
Auf Seiten des Servers ist noch ein kleines PHP Skript nötig, dass die Daten auf dem Server speichert.
Die Ausgabe des Shell Scriptes sieht dann wie folgt aus:
--- Opening /dev/video0... Trying source module v4l2... /dev/video0 opened. No input was specified, using the first. Setting Brightness to 60 (23%). Setting Contrast to 122 (47%). Setting Saturation to 88 (34%). Setting Backlight Compensation to 5 (100%). --- Capturing frame... Skipping 20 frames... Capturing 1 frames... Captured 21 frames in 0.66 seconds. (31 fps) --- Processing captured image... Setting output format to JPEG, quality 95 Setting title "Garage". Writing JPEG image to '/tmp/webcam.jpg'. OK.
Als Ergebnis befindet sich auf dem Server dann das folgende Bild.
Wie man an dem Bild sieht, ist die 6€ Camera in der Garage installiert. Eine Garage, die seit gestern ein wenig smarter ist – aber dazu später mehr.
Alle Scripte (Shell, Config und PHP), die nötig befinden sich unter: https://github.com/msoftware/Raspberry-PI-USB2.0-PC-Camera-Upload. Die Camera kann man unter http://www.dx.com/ bestellen.