GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden mehrerer USB-Webcams unter Linux

Ding ding! Mit etwas Hilfe der netten Leute in #v4l auf Freenode ist es mir gelungen, das herauszufinden.

Lange Rede kurzer Sinn:v4l2-ctl ist das beste Tool zum Debuggen von USB-Kameraproblemen. Lesen Sie alle verfügbaren Befehle und die Manpage, es wird Spaß machen, versprochen. Mit v4l2-ctl Ich habe festgestellt, dass eine meiner Kameras keine komprimierten Videomodi unterstützt. Sie können überprüfen, welche Modi Ihre Kameras unterstützen, indem Sie den folgenden Befehl ausführen:

v4l2-ctl -d /dev/video0 --list-formats

Was so etwas ausgeben sollte.

 ioctl: VIDIOC_ENUM_FMT
 Index       : 0
 Type        : Video Capture
 Pixel Format: 'MJPG' (compressed)
 Name        : MJPEG

 Index       : 1
 Type        : Video Capture
 Pixel Format: 'YUYV'
 Name        : YUV 4:2:2 (YUYV)

Wenn das einzige zurückgegebene Pixelformat „YUYV“, „IUYV“, „I420“ oder „GBRG“ ist, können Sie nur eine Kamera pro USB-Controller* betreiben, da diese Formate unkomprimiert sind. Die Verwendung mehrerer Webcams, die MJPEG oder eine andere Form der Komprimierung unterstützen, funktioniert problemlos.

Wenn Sie OpenCV wie ich verwenden, machen Sie sich keine Sorgen, wenn das Standard-Pixelformat nicht komprimiert ist, da OpenCV anscheinend sowieso standardmäßig die Komprimierung verwendet.

**Es sei denn, Sie sind mit einer Auflösung von 320 x 240 oder niedriger zufrieden.*


Die Antwort ist, die von SwDevRefugee geschriebenen und oben beschriebenen uvcvideo-Modifikationen zu verwenden. Er und ich haben erfolgreich zusammengearbeitet, um den modifizierten Code für OpenWrt zu kompilieren. Die Version, auf der ich es ausführe, ist OpenWRT DESIGNATED DRIVER (Bleeding Edge, r48130) auf einem tplink wdr3600-Router:

ERGEBNIS:Ich kann 3*c270 (Logitech) gleichzeitig mit 1280 x 960 und 15 fps im MJPG-Format über einen USB 2.0-Hub ausführen. Ich habe kein viertes c270 zum Anschließen, tut mir leid.

Ich kann auch 2*c270 und 1*GEMBIRD 640*480*15fps mit YUV-Format haben, aber das Hinzufügen eines 2 gut kennen:)). Beachten Sie, dass GEMBIRD (1908:2311) ==http://www.penguin.cz/~utx/hardware/USB_Camera_AX2311/ .

Die CPU-Auslastung mit 3*c270 ist auf einem wdr3600 ziemlich vernünftig:

Mem: 50600K used, 75444K free, 320K shrd, 3436K buff, 8800K cached

CPU:  16% usr  27% sys   0% nic  45% idle   0% io   0% irq  10% sirq

Load average: 1.20 0.85 0.44 4/60 2546

  PID  PPID USER     STAT   VSZ %VSZ %CPU COMMAND

 2240  1679 root     S    15348  12%  17% mjpg_streamer --input input_uvc.so --

 2505  1679 root     S    15368  12%  11% mjpg_streamer --input input_uvc.so --

 2239  1679 root     S    15532  12%  11% mjpg_streamer --input input_uvc.so --

Wenn die Community etwas Ansehen und Unterstützung gibt, denke ich, dass SwDevRefugee bereit ist, den Code in uvc-linux zu integrieren.


Ich habe mir den uvcvideo-Treiber angesehen und der Modulparameter quirks=128 wird ignoriert, wenn der Stream mjpeg-komprimiert ist.

Meine bevorzugten Webcams waren die Logitech C500 und die Logitech C270, und ich fand heraus, dass das von der C500 bei 1280 x 1024 erzeugte Bild 100 KB und das von der C270 bei 1280 x 960 erzeugte Bild 200 KB groß ist.

Wenn ich den C270 mit 10 fps betreibe, beträgt die erforderliche Bitrate 10 x 200000 x 8 =16 Mbit / s. In Ubuntu 14.04 weist das uvcdriver-Modul unabhängig von der Bildrate immer 196 Mbit/s zu. Für den C500 ist es etwas besser erzogen, aber immer noch ein Bandbreitenfresser.

Ich habe den uvcvideo-Treiber so modifiziert, dass ich dem Treiber über die V4L2-Schnittstelle einen "Kompressions"-Faktor zur Verfügung stellen kann. Es ist insofern ein "kleines Hacky", als ich das priv-Attribut in der Struktur v4l2_pix_format verwendet habe, um den Wert anzugeben. Im Treiber wird die Größe des unkomprimierten Bildes berechnet und dann durch den Komprimierungsfaktor dividiert, um die zu verwendende USB-Bandbreite zu ermitteln.

Standardmäßig verwende ich einen Komprimierungsfaktor von 10, der einen großen Spielraum lässt, wenn die Kamera auf ein besonders schwer zu komprimierendes Bild stößt. Der C270 mit 1280 x 960 und 10 fps verwendet jetzt 41 Mbit/s und ich kann problemlos 4 Kameras an einem Bus betreiben.

Wenn jemand an dieser Funktion interessiert ist, werde ich versuchen, die Betreuer von uvcvideo dazu zu bringen, das Konzept des "Komprimierungsfaktors" zu berücksichtigen.


Linux
  1. Debuggen Sie Linux mit ProcDump

  2. Entwickeln Sie Netzwerkanwendungen für ESP8266 mit Mongoose unter Linux

  3. So brennen Sie eine ISO-Datei unter Linux mit Etcher auf ein USB-Laufwerk

  4. So benennen Sie mehrere Dateien zusammen in Linux mit 3 Methoden um

  5. So fügen Sie mehrere Routen in Linux mithilfe von ip-Befehlsbeispielen hinzu

Zeigen Sie Informationen zu Mediendateien unter Linux mit MediaInfo an

Erstellen Sie einen persistenten bootfähigen USB-Stick mit Ventoy in Linux

Zeigen Sie den Ereignisverlauf von USB-Geräten mit Usbrip in Linux an

So formatieren Sie Shell-Programme mit Shfmt unter Linux

So konvertieren Sie PDF-Dateien mit Calibre in Linux in das EPUB-Format

Verwenden des Watch-Befehls unter Linux