Zum Inhalt springen →

USB2.0-PC-Camera für Raspberry PI im Test

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.

USB2.0 PC CAMERA

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.

1465833391_webcam

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.

1465978460_webcam

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.
1465979830_webcam

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.

Veröffentlicht in IoT PHP Programmierung Raspberry