GNU/Linux >> Tutoriels Linux >  >> Linux

Utilisation de plusieurs webcams USB sous Linux

Ding Ding! J'ai réussi à comprendre celui-ci avec l'aide des gens sympas de #v4l sur freenode.

Pour faire court :v4l2-ctl est le meilleur outil pour déboguer les problèmes de caméra USB. Lisez toutes les commandes disponibles et la page de manuel, ce sera amusant, je vous le promets. Utilisation de v4l2-ctl J'ai découvert qu'une de mes caméras ne supportait aucun mode vidéo compressé. Vous pouvez vérifier les modes pris en charge par vos caméras en exécutant la commande suivante :

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

Ce qui devrait produire quelque chose comme ça.

 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)

Si le seul format de pixel renvoyé est "YUYV", "IUYV", "I420" ou "GBRG", vous ne pourrez exécuter qu'une seule caméra par contrôleur USB* puisque ces formats ne sont pas compressés. L'utilisation de plusieurs webcams prenant en charge MJPEG ou une autre forme de compression fonctionnera correctement.

Si vous utilisez OpenCV comme moi, ne vous inquiétez pas si le format de pixel par défaut n'est pas compressé car il semble qu'OpenCV utilise par défaut la compression de toute façon.

**Sauf si vous êtes satisfait d'une résolution de 320 x 240 ou moins.*


La réponse est d'utiliser les modifications uvcvideo écrites par SwDevRefugee et décrites ci-dessus. Lui et moi avons travaillé ensemble pour obtenir le code modifié compilé pour OpenWrt, avec succès. La version sur laquelle je l'exécute est OpenWRT DESIGNATED DRIVER (Bleeding Edge, r48130), sur un routeur tplink wdr3600 :

RESULTAT :Je peux avoir 3*c270 (logitech) fonctionnant simultanément à 1280x960 et 15fps au format MJPG, via un hub usb 2.0. Je n'ai pas de quatrième c270 à brancher, désolé.

Je peux également avoir 2 * c270 et 1 * GEMBIRD 640 * 480 * 15fps au format YUV, mais l'ajout d'un 2e GEMBIRD conduit au redoutable "Impossible de démarrer la capture :il ne reste plus d'espace sur l'appareil" (espace ==bande passante ici, comme vous Bien connaître:)). Notez que GEMBIRD (1908:2311) ==http://www.penguin.cz/~utx/hardware/USB_Camera_AX2311/ .

L'utilisation du CPU avec 3*c270 est assez raisonnable sur un wdr3600 :

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 --

Si la communauté offre une certaine réputation et un certain soutien, je pense que SwDevRefugee est prêt à intégrer le code dans uvc-linux.


J'ai regardé le pilote uvcvideo et le paramètre de module quirks=128 est ignoré si le flux est compressé en mjpeg.

Mes webcams de choix ont été la Logitech C500 et la Logitech C270, et j'ai trouvé que l'image produite par la C500 à 1280x1024 est de 100kbytes et l'image produite par la C270 à 1280x960 est de 200kbytes.

Si j'exécute le C270 à 10 images par seconde, le débit requis est de 10x200000x8 =16Mbit/s. Dans Ubuntu 14.04, le module uvcdriver alloue toujours 196 Mbits/s quelle que soit la fréquence d'images. Pour le C500, il se comporte un peu mieux, mais reste un gros consommateur de bande passante.

J'ai modifié le pilote uvcvideo afin de pouvoir fournir un facteur de "compression" au pilote via l'interface V4L2. C'est un "petit hacky" dans la mesure où j'ai utilisé l'attribut priv dans la structure v4l2_pix_format pour spécifier la valeur. Dans le pilote, il calcule la taille de l'image non compressée, puis la divise par le facteur de compression pour déterminer la bande passante USB à utiliser.

Par défaut, j'utilise un facteur de compression de 10 qui permet une grande marge si l'appareil photo rencontre une image particulièrement difficile à compresser. Le C270 fonctionnant à 1280x960 et 10fps utilise maintenant 41Mbit/s et je peux facilement faire fonctionner 4 caméras sur un bus.

Si quelqu'un est intéressé par cette fonctionnalité, j'essaierai d'amener les mainteneurs d'uvcvideo à considérer le concept de facteur de "compression".


Linux
  1. Déboguer Linux avec ProcDump

  2. Comment décompresser le format de fichier .xz sous Linux à l'aide des utilitaires tar et xz ?

  3. Popsicle - Flasheur de fichiers USB multiples pour Linux

  4. Comment renommer plusieurs fichiers ensemble sous Linux en utilisant 3 méthodes

  5. Comment ajouter plusieurs routes sous Linux à l'aide d'exemples de commande ip

Afficher les informations sur les fichiers multimédias sous Linux à l'aide de MediaInfo

Créer une clé USB amorçable persistante à l'aide de Ventoy sous Linux

Afficher l'historique des événements des périphériques USB à l'aide d'Usbrip sous Linux

Comment formater des programmes Shell à l'aide de Shfmt sous Linux

Comment convertir des fichiers PDF au format EPUB à l'aide de Calibre sous Linux

Utilisation de la commande Watch sous Linux