Homepage Wiki Forum Buy

Webcam

Aus GNUBLIN

Schwierigkeitsgrad Voraussetzung Gnublin Familie
Gnublin logo easy.png Kommandozeile, Zugriff Bild per .jpg oder Live-Stream Alle

Inhaltsverzeichnis


Möchte man mit dem Gnublin Bilder aufnehmen oder einen Live-Stream erstellen kommt man um eine Webcam nicht herum. Wir verwendeten eine Logitech Webcam Pro 9000 oder eine Logitech c170 Webcam.

Logitech.jpg

Nachfolgend wird erklärt wie man zu den ersten Schnappschüssen oder einem Live-Stream gelangt.


Quickstart mit Gnublin Distribution

Bei Verwendung der Gnublin Distribution und der Logitech C170 Webcam (z.B aus unserem Shop) kann sofort losgelegt werden. Es ist alles so vorbereitet, dass diese Webcam auf Anhieb funktioniert.

Zuerst stecken wir die Webcam an das Gnublin: (USB Jumper1 auf Host und USB Jumper2 auf H)

Anschließend kann der Treiber mit folgendem Befehl geladen werden:

modprobe uvcvideo

Foto aufnehmen oder Stream starten mit gnublin-cam

In der aktuellen Version der Gnublin Distribution ist das Programm gnublin-cam enthalten, welches eine komfortable Ansteuerung der Webcam ermöglicht.

Wichtig ist, dass das Modul uvcvideo wie oben beschrieben vor Start des Programmes geladen wird, sonst erscheint eine Fehlermeldung.

modprobe uvcvideo

Anschließend kann man schon loslegen


Foto aufnehmen

Möchte man ein Foto aufnehmen, so kann man dies mit folgendem Befehl machen:

gnublin-cam -i beispiel.jpg

Falls man mit der Auflösung des Fotos nicht zufrieden ist, so kann man die Auflösung mit folgendem Befehl einstellen und einen Schnappschuss mit der eingestellten Auflösung machen:

gnublin-cam -i beispiel.jpg -r 800x600


Webstream starten

Möchte man stattdessen einen Webstream starten, so kann man dies mit folgendem Befehl machen:

gnublin-cam -s

Hierbei ist erstens zu beachten, dass eine aktive WLAN/LAN/USB-Gadget Verbindung existiert und zweitens, dass der Webstream die Eingabe von weiteren Befehlen blockiert. Die Blockade kann man umgehen, indem man den Webstream mit folgendem Befehl im Hintergrund startet.

gnublin-cam -b

Weitere Konfigurationsmöglichkeiten sind zum Beispiel die Auflösung des Streams mit "-r" und der Port auf welchem der Stream läuft mit "-p".

Hier ein Beispielaufruf mit Auflösung=640x480, Port=5555 und Stream im Hintergrund:

gnublin-cam -b -r 640x480 -p 5555


Foto aufnehmen

Nun kann man mit folgendem Befehl den ersten Schnappschuss erstellen:

fswebcam -v -S 1 -r 640x480 -d /dev/video0 -i 0 out.jpeg

Die Optionen des Befehls sind relativ einfach zu erklären.

-v  	bedeutet verbose mode und bietet eine detailiertere Ausgabe
-S 1	bedeutet er soll ein Bild überspringen und erst das zweite Bild speichern
        (das erste Bild ist meist von schlechter Qualität)  
-r  	legt die Auflösung des Bildes fest, in unserem Fall 640x480
-d  	gibt an welches Device verwendet werden soll, in unserem Fall /dev/video0
-i  	gibt an welches interface verwendet werden soll, in unserem Fall interface 0
  	zum Schluss wird noch angegeben wie das aufgenommene Bild heißen soll

Hinweis: Wenn die Auflösung nicht mithilfe des Befehls -r manuell eingestellt wird, wird die Standardauflösung verwendet (meistens nicht die optimale Auflösung) In unserem Fall war die Standardauflösung 352 × 288 Pixel. Man erhält aber viel bessere Bilder wenn man als Auflösung z.B 800 x 600 Pixel angibt.

Videostream erstellen

Möchte man hingegen einen Livestream mit dem Gnublin erstellen so geht man wie folgt vor:

Was wird benötigt?

  1. Die oben beschriebene Webcam Logitech c170 oder eine vergleichbare Webcam
  2. Man muss eine funktionierende Netzwerk/Internetverbindung besitzen, um den Stream an einem Laptop anzusehen.
  3. Einen USB-Hub mit externer Stromversorgung, da die Versorgung sonst zu gering für den LAN-Adapter und die Webcam ist, und es zu komischen Fehlern kommen kann. (USB-Device meldet sich ständig an und ab etc.)


Wenn alle Vorbedingungen erfüllt sind kann der Stream mit folgendem Befehl gestartet werden:

mjpg-streamer -i "/lib/input_uvc.so -d /dev/video0 -r 800x600" -o "/lib/output_http.so -p 8080 -w /usr/www -n"

Anschließend kann man mit einem Browser seiner Wahl den Stream anschauen. Hierfür muss die IP-Adresse des Gnublins bekannt sein (mit dem Befehl ifconfig kann man sich die Netzwerkadapter und ihre IP-Adressen anzeigen lassen, je nach Verbindungsart (wlan oder lan) sieht man die IP-adresse bei wlan0 oder eth0)

Die folgende Adresse muss einfach in die Adresszeile des Browser getippt oder kopiert werden:

IP-ADRESSE:8080/?action=stream 

In unserem Fall (Gnublin IP-Adresse=192.168.0.182) sieht die Adresse folgendermaßen aus:

192.168.0.182:8080/?action=stream

Nun sollte der Live-Stream im Browser erscheinen.

Für Fortgeschrittene

Treiber identifizieren

Zur Identifikation der Treiber, die die Webcam verwendet schließt man die Webcam am Besten an einen PC/Laptop mit Linux an.

Anschließend liefert der Befehl lsusb folgende Ausgabe:

Bus 002 Device 009: ID 046d:0809 Logitech, Inc. Webcam Pro 9000

Mit dem Befehl dmesg kann man dann auch das verwendete Modul herausfinden:

[ 149.506737] usb 2-1.5: new high-speed USB device number 3 using ehci_hcd
[ 149.817836] uvcvideo: Found UVC 1.00 device <unnamed> (046d:0809)

In unserem Fall ist es also der treiber uvcvideo. Falls der Befehl dmesg keine derartige Meldung ausgibt kann man mit lsmod die Liste aller geladenen Module ansehen und dort den zu der Webcam passenden Treiber herausfinden. (webcam abstecken, lsmod eingeben und ausgabe anschauen, -> webcam anstecken und nochmal lsmod eingeben, das Modul das neu ist, ist der Treiber der Webcam)

Achtung: Falls man einen Laptop mit eingebauter Webcam besitzt sind eventuell zwei Module für Webcams geladen (ausser der chipsatz beider Webcams ist gleich)

Kernelmodul suchen und vorbereiten

Die Kernelmodule zu Webcams sind unter Device Drivers--> Multimedia Support --> Video for Linux --> Video capture adapters --> V4L USB devices zu finden.


Kernelmodul:

 │ │   Device Drivers   --->                                                     │ │   
 │ │       	<M> Multimedia support  --->                                     │ │   
 │ │       	   <M>   Video For Linux                                         │ │   
 │ │       		[*]   Video capture adapters (NEW)  --->                 │ │   
 │ │       		   [*]   V4L USB devices (NEW)  --->                     │ │   
 │ │       			    <M>   USB Video Class (UVC)                  │ │   


Wie man den Kernel und die Module kompiliert ist im Artikel Kernel kompilieren + Module installieren beschrieben.

Kernelmodul laden + Device Datei anlegen

Nachdem die Module und der Kernel, wie in obigem Artikel beschrieben, kompiliert und auf die SD-Karte kopiert wurden kann man mit folgendem Befehl den Treiber laden:

root@gnublin:~# modprobe uvcvideo

Der Befehl liefert folgende Ausgabe bei unserer Webcam:

Linux video capture interface: v2.00
uvcvideo: Found UVC 1.00 device <unnamed> (046d:0809)
input: UVC Camera (046d:0809) as /devices/platform/lpc-ehci.0/usb1/1-1/1-1:1.0/input/input0
usbcore: registered new interface driver uvcvideo
USB Video Class driver (v0.1.0)


Wenn man ein Gnublin mit udev oder mdev besitzt kann man den nächsten Schritt überspringen, falls man udev nicht auf dem Gnublin hat (die meisten werden udev nicht besitzen) muss man ein Device anlegen, dass die Kommunikation mit der Webcam ermöglicht.

Hierfür wird folgender Befehl eingegeben:

root@gnublin:~# mknod /dev/video0 c 81 0

Bilder aufnehmen vorbereiten

Nun müssen wir noch wichtige Pakete, um Bilder aufnehmen zu können, vorbereiten und installieren:

Gnublin mit Debian

Falls man Debian auf dem Gnublin am laufen hat, kann man mittels apt-get die benötigten Pakete und deren Abhängigkeiten automatisch herunterladen:

root@gnublin:~# apt-get install fswebcam uvccapture

Für das Herunterladen der Pakete muss man natürlich eine Internetverbindung auf dem Gnublin besitzen. Falls man keine Internetverbindung hat, muss man die .deb Pakete wie im nächsten Abschnitt beschrieben Gnublin ohne Debian herunterladen und jedes einzeln mit dem nachfolgenden Befehl installieren:

root@gnublin:~# dpkg -i Paketname

Paketname ersetzt man natürlich mit dem richtigen Paketnamen jeweils.

Gnublin ohne Debian

Falls man kein Debian auf dem Gnublin laufen hat muss man die einzelnen Pakete manuell installieren. Dies läuft folgendermaßen ab:

Download der verwendeten Pakete

Zuerst müssen wir die Pakete auf einem PC/Laptop mit Linux herunterladen:

ACHTUNG: Bei den Paketen darauf achten dass man die Pakete für ARM herunterlädt (also bei Architektur (unten) -> armel auswählen)

Umwandeln der Pakete

Wenn man die Pakete heruntergeladen hat muss ein kleines Programm Namens Alien mit dem Befehl apt-get install alien auf dem PC/Laptop installiert werden. Dieses Programm wandelt *.deb Dateien in das, für das Gnublin verwertbare, tar.gz Format um.

Die Pakete werden dann auf dem Hostrechner mit folgendem Befehl umgewandelt (Bitte beachten, dass man den Befehl für jedes Paket einzeln ausführen muss und sich mit der Shell in dem Ordner der Pakete befinden muss):

alien -t Paketname

Installation der Pakete

Nachdem man dies für alle Pakete gemacht hat, sollten 8 neue Dateien mit der Endung tar.gt entstanden sein. Diese werden anschließend auf das Gnublinboard ins Root-Verzeichnis kopiert und dort dann mit folgendem Befehl entpackt

root@gnublin:~# cd /
root@gnublin:/# tar -xzvf Paketname

Sind alle Pakete auf diesem Wege entpackt worden, kann man die weiteren Schritte einleiten um Bilder aufzunehmen.

Bilder aufnehmen

Nun da alle Pakete installiert sind, kann man einen Schnappschuss machen. Hierfür wechselt man einfach in den Ordner auf dem Gnublin in dem das Bild erstellt werden soll und führt folgenden Befehl aus :

root@gnublin:~/Photo# fswebcam -v -S 1 -r 640x480 -d /dev/video0 -i 0 out.jpeg

Die Optionen des Befehls sind relativ einfach zu erklären.

-v  	bedeutet verbose mode und bietet eine detailiertere Ausgabe
-S 1	bedeutet er soll ein Bild überspringen und erst das zweite Bild speichern (das erste Bild ist meist von schlechter Qualität)  
-r  	legt die Auflösung des Bildes fest, in unserem Fall 640x480
-d  	gibt an welches Device verwendet werden soll, in unserem Fall /dev/video0
-i  	gibt an welches interface verwendet werden soll, in unserem Fall interface 0
  	zum Schluss wird noch angegeben wie das aufgenommene Bild heißen soll

Hinweis: Wenn die Auflösung nicht mithilfe des Befehls -r manuell eingestellt wird, wird die Standardauflösung verwendet (meistens nicht die optimale Auflösung) In unserem Fall war die Standardauflösung 352 × 288 Pixel. Man erhält aber viel bessere Bilder wenn man als Auflösung z.B 800 x 600 Pixel angibt.

Hier sieht man eine beispielhafte Ausgabe des Befehls:

root@gnublin:~# fswebcam -v -S 1 -d /dev/video0 -i 0 out2.jpeg --- Opening /dev/video0... Trying source module v4l2... /dev/video0 opened. src_v4l2_get_capability,86: /dev/video0 information: src_v4l2_get_capability,87: cap.driver: "uvcvideo" src_v4l2_get_capability,88: cap.card: "UVC Camera (046d:0809)" src_v4l2_get_capability,89: cap.bus_info: "usb-lpc-ehci.0-1" src_v4l2_get_capability,90: cap.capabilities=0x04000001 src_v4l2_get_capability,91: - VIDEO_CAPTURE src_v4l2_get_capability,102: - STREAMING src_v4l2_set_input,180: /dev/video0: Input 0 information: src_v4l2_set_input,181: name = "Camera 1" src_v4l2_set_input,182: type = 00000002 src_v4l2_set_input,184: - CAMERA src_v4l2_set_input,185: audioset = 00000000 src_v4l2_set_input,186: tuner = 00000000 src_v4l2_set_input,187: status = 00000000 src_v4l2_set_pix_format,540: Device offers the following V4L2 pixel formats: src_v4l2_set_pix_format,553: 0: [0x56595559] 'YUYV' (YUV 4:2:2 (YUYV)) src_v4l2_set_pix_format,553: 1: [0x47504A4D] 'MJPG' (MJPEG) Using palette MJPEG Adjusting resolution from 384x288 to 352x288. src_v4l2_set_mmap,692: mmap information: src_v4l2_set_mmap,693: frames=4 src_v4l2_set_mmap,740: 0 length=102400 src_v4l2_set_mmap,740: 1 length=102400 src_v4l2_set_mmap,740: 2 length=102400 src_v4l2_set_mmap,740: 3 length=102400 --- Capturing frame... Skipping frame... Capturing 1 frames... verify_jpeg_dht,94: Inserting DHT segment into JPEG frame. Captured 2 frames in 0.03 seconds.


Der Befehl für einen Schanppschuss mittels uvccapture sieht folgendermaßen aus:

root@gnublin:~# uvccapture -v -x 960 -y 720 -d /dev/video0

Die Optionen sind ebenfalls leicht verständlich. -v für erweiterte Ausgabe -x/-y für die Auflösung und -d für das zu verwendende Device.


Hier noch ein Bild welches mit der Webcam am Gnublin geschossen wurde:

Webcambeispiel.jpg

Fehlerbehebung fswebcam

Mit einer anderen Webcam (gspca_pac7311 Treiber) erscheint eine Fehlermeldung beim ausführen von fswebcam.

Aufgrund irgendwelcher Bugs und Schwachstellen von gspca muss man dem Programm fswebcam die Librarys "vorladen" bzw. bekannt machen. Dies geschieht mit folgendem Befehl:

root@gnublin:~# LD_PRELOAD=/usr/lib/libv4l/v4l2convert.so; export LD_PRELOAD

Es entsteht keine Ausgabe bei diesem Befehl.

Ohne das Vorladen der Bibliothek erscheint bei uns eine Fehlermeldung mit No Pallette Information available und die verschiedenen Bildmodi der Kamera werden nicht korrekt erkannt.


Bei anderen traten ähnliche Fehler auf welche man mit dem Vorladen einer anderen Bibliothek beheben kann:


root@gnublin:~# LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so PROGRAMMNAME_FÜR_WELCHES_DIE_LIB_VORGELADEN_WERDEN_SOLL

Für das Programm fswebcam sähe der Befehl dann so aus: LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so fswebcam


Live-Stream mit MJPG-Streamer

Mithilfe des Programms mjpg-streamer kann man einen Webstream einer Webcam einrichten, den man dann in einem Webbrowser ansehen kann.

Was wird benötigt?

  1. Eine Webcam die bereits, wie oben beschrieben, getestet wurde und auch mithilfe von fswebcam oder uvccapture Fotos schießen kann.
  2. Es muss das Paket 'libjpeg-dev' installiert sein! (gibt man apt-get install libjpeg-dev ein so wird einem das Paket libjpeg62-dev vorgeschlagen, das ist das richtige Paket)
  3. Man muss eine funktionierende Netzwerk/Internetverbindung besitzen, um den Stream an einem Laptop anzusehen.
  4. Einen USB-Hub mit externer Stromversorgung, da die Versorgung sonst zu gering für den LAN-Adapter und die Webcam ist, und es zu komischen Fehlern kommen kann. (USB-Device meldet sich ständig an und ab etc.)

Aufbau des Gesamtsystems:

Webstream.jpeg


Nun gibt es zwei verschiedene Wege das Programm zu installieren. Die erste Option ist das fertig kompilierte Programm zu laden und die Datei im Root Verzeichnis zu extrahieren. Bei der anderen Möglichkeit muss man das Paket selbst kompilieren.

Anmerkung Getestet wurde lediglich eine Webcam, die das Modul uvcvideo verwendete. Es sollte aber möglich sein auch Webcams zu verwenden die das Modul gspca verwenden. Hierfür muss in dem Kommando für den Start des Webstreams das Wort input_uvc.so durch input_gspcav1.so ersetzt werden.

fertig kompilierte Version

Die leichteste Möglichkeit den mjpg-streamer zum Laufen zu bekommen ist die Möglichkeit das fertig kompilierte Paket hier herunterzuladen und die nachfolgende Anleitung zu befolgen:

Das fertig kompilierte Paket herunterladen und in das Root-Verzeichnis auf der SD-Karte vom Gnublin (/) kopieren. Anschließend das Board booten und folgende Befehle ausführen:

cd /
tar -xzvf mjpg-streamer.tar.gz

Mit folgendem Befehl wird dann das Programm aufgerufen:

mjpg-streamer -i "/lib/input_uvc.so -d /dev/video0 -r 800x600" -o "/lib/output_http.so -p 8080 -w /usr/www -n"

Anschließend kann man mit einem Browser seiner Wahl den Stream anschauen. Hierfür muss die IP-Adresse des Gnublins bekannt sein (mit dem Befehl ifconfig kann man sich die Netzwerkadapter und ihre IP-Adressen anzeigen lassen, je nach Verbindungsart (wlan oder lan) sieht man die IP-adresse bei wlan0 oder eth0)

Die folgende Adresse muss einfach in die Adresszeile des Browser getippt oder kopiert werden:

IP-ADRESSE:8080/?action=stream 

In unserem Fall (Gnublin IP-Adresse=192.168.0.182) sieht die Adresse folgendermaßen aus:

192.168.0.182:8080/?action=stream

Selber kompilieren

Falls man das das Programm selber kompilieren möchte, muss man die zwei folgenden Pakete installieren. Dies kann man entweder per apt-get machen (Debian) oder nach dieser Anleitung:

apt-get install gcc
apt-get install make

Hierbei ist zu beachten, dass da Paket gcc eine ganze Menge an Abhängigkeiten mit sich bringt, deshalb ist die Lösung mit Debian um einiges einfacher.

Die neueste Version von mjpg-streamer findet man hier

Wenn man die Sources von mjpg-streamer geladen hat kopiert man das Archiv in ein beliebiges Verzeichnis auf dem Gnublin.

Anschließend wird das Board gebootet und wir wechseln in den Ordenr in dem sich das Archiv mit den Sourcec befindet (z.B. cd ~/mjpg-streamer)

Nun entpacken wir das Archiv mithilfe von tar -xzvf Archivname (in dem Befehl wurde bewusst nicht der Name der aktuellen Version genommen, da sich die Versionen unterscheiden können)

Nach dem Entpacken sollte ein neues Verzeichnis entstanden sein in das wir gleich hineinwechseln. (z.B. könnte das Verzeichnis mjpg-streamer-r63 lauten)

Wenn wir uns in dem Verzeichnis befinden müssen wir nur noch den folgenden Befehl ausführen, und das Gnbublin fängt an das Programm zu kompilieren:

make clean all

Das kann eine Weile dauern, je nachdem welche Version des Gnublins verwendet wird. (Es werden eine Menge Warnungen ausgegeben, die uns an dieser Stelle aber nicht interessieren. Hauptsache es entstehen keine errors)


Nachdem das Kompilieren fertig ist kann man mit folgendem Befehl den Stream starten:

./mjpg_streamer -i "/root/mjpg-streamer-r63/input_uvc.so -d /dev/video0 -r 800x600" -o "/root/mjpg-streamer-r63/output_http.so -p 8080 -w /usr/www -n"

ACHTUNG Dieser Befehl ist speziell angepasst. Er kann bei jedem anders aussehen, je nachdem in welchem Verzeichnis sich mjpg-streamer befindet. Bei uns wurde das Paket direkt im Homeverzeichnis (~/) entpackt und das Programm sowie die Dateien input_uvc.so und output_http.so befanden sich im Ordner /root/mjpg-streamer-r63.


Anschließend kann man mit einem Browser seiner Wahl den Stream anschauen. Hierfür muss die IP-Adresse des Gnublins bekannt sein (mit dem Befehl ifconfig kann man sich die Netzwerkadapter und ihre IP-Adressen anzeigen lassen, je nach Verbindungsart (wlan oder lan) sieht man die IP-adresse bei wlan0 oder eth0)

Die folgende Adresse muss einfach in die Adresszeile des Browser getippt oder kopiert werden:

IP-ADRESSE:8080/?action=stream 

In unserem Fall (Gnublin IP-Adresse=192.168.0.182) sieht die Adresse folgendermaßen aus:

192.168.0.182:8080/?action=stream

Mögliche Fehlermeldungen

Nachfolgend ist eine Fehlermeldung, die bei uns anfangs auftrat:

MJPG Streamer Version.: 2.0 ERROR: could not find input plugin Perhaps you want to adjust the search path with: # export LD_LIBRARY_PATH=/path/to/plugin/folder

Diese Fehlermeldung besagt, dass das Programm die Datei input_uvc.so oder output_http.so nicht finden konnte. In diesem Fall muss der Pfad zur Datei korrekt angegeben werden.


Trust Webcam VGA USb 1.1

Trust.jpeg

Um herauszufinden welchen Chipsatz diese Webcam hat empfiehlt es sich sie an einen PC oder Laptop anzuschließen.

lsusb am Laptop liefert folgendes Ergebnis:

Bus 001 Device 002: ID 093a:2600 Pixart Imaging, Inc. Typhoon Easycam USB 330K (newer)/Typhoon Easycam USB 2.0 VGA 1.3M/Sansun SN-508

lsmod am Laptop liefert folgendes Ergebnis:

gspca_pac7311 13452 0
gspca_main 27141 1 gspca_pac7311

also verwendet die Kamera den PAC7311 Treiber. Glücklicherweise ist er auch im 2.6.33er Kernel vom Gnublin verfügbar.

Den Treiber findet man unter Multimedia Support -> Video capture adapters -> V4L USB devices -> GSPCA based webcams

Die Installation der Treiber und Software erfolgt wie oben beschrieben.

ACHTUNG diese Webcam war nicht auf Anhieb kompatibel mit fswebcam, bitte hierfür das Thema [Fehlerbehebung fswebcam] beachten.

In anderen Sprachen