BUT : comment utiliser une webcam Logitech BRIO sous Linux, et où en est-on exactement ?
Avertissement : il s'agit d'un article plutôt technique, mais sans prétention qui aborde des points touchant le développement Linux (C, code, noyau Linux).
Résumé : ce n'est que le début. On commence par une description technique des conditions à remplir pour faire fonctionner le matériel, suivi d'une brève comparaison des caractéristiques (ce qu'apporte l'USB 3.0 et après). Je présente ce que j'ai fait pour que cela fonctionne. Enfin, des liens sont donnés pour ceux qui veulent tester, ou aller plus loin avec les webcams utilisant le protocole uvc 1.5, et permettre à ceux qui utilisent Linux d'avancer.
Avant toute chose, je tiens à exprimer mes remerciements à Laurent Pinchart (http://www.ideasonboard.org/uvc/ et auteur du pilote du noyau uvcvideo), pour tout le travail qu'il a réalisé sur le sujet, depuis des années.
- Prérequis : avoir du matériel adapté
L'utilisation d'une webcam est devenue quelque chose de très banal. Cependant, quand on veut l'utiliser sous Linux, on se demande quelquefois comment en tirer le meilleur parti. Je n'ai absolument rien à voir avec cette marque, et Logitech n'est pas vraiment connu pour aider le monde du libre, mais il faut reconnaître que cette marque propose des modèles remarquables, dont les références les plus connues sont les C615, C920, C922 et BRIO.
Afin d'exploiter pleinement les possibilités de la webcam Logitech BRIO sous Linux, il faut que votre matériel possède un contrôleur de types USB3, et soit fonctionnel.
Ce bus USB 3.x étant presque devenu la norme, si votre machine a moins d'un an, c'est normalement le cas (voir la notice de votre machine pour confirmer).
Les trois premiers modèles exploitent le bus USB 2.0, et cela fonctionne déjà parfaitement. La dernière a des caractéristiques plus élaborées,et demande d'avoir un périphérique USB 3.0 pour fonctionner au maximum de ses possibilités.
IMPORTANT : ce n'est pas la peine d'insister si vous n'avez pas de contrôleur compatible USB 3.0 (ou supérieur) sur votre machine, vous ne pourrez utiliser la BRIO qu'en mode compatibilité avec le bus 2.0.
- Ordres de grandeur
** La vitesse de transfert
Les valeurs ci-dessous ont été obtenues avec dmesg + le périphérique correctement pris en charge) :
- USB 1.x : Device can operate at Full Speed (12 Mbps)
- USB 2.0 : Device can operate at High Speed (480 Mbps)
- USB 3.x : Device can operate at SuperSpeed (5 Gbps)
La vitesse de transfert (donc la capacité à transporter des informations) est multipliée par 10 entre l'USB 2.0 et l'USB 3.0 ! C'est LA raison pour laquelle on peut obtenir un flux mjpeg en 4K avec l'USB 3.x. Cela n'est simplement pas possible avec de USB 2.x
Lien avec log complet : https://github.com/ebachard/my_libuv...am_edition.txt
Comparaison avec périphérique compatible USB 2.0 seulement (lien) :
C922 : https://github.com/ebachard/my_libuv...eam_Webcam.txt
C920 : https://github.com/ebachard/my_libuv...hd_pro_920.txt
Autres cas : voir dans le répertoire contenant ces fichiers. N'hésitez pas à soumettre vos données ;-)
** les résolutions possibles
En reprenant les logs mentionnés plus haut, on voit que la BRIO permet de streamer un flux mjpeg en 4k (4096 x 2180 pixels), à 30 images par seconde.
Voir cette discussion pour plus d'informations : https://github.com/ebachard/my_libuvc/issues/1
- Le noyau Linux
C'est le programme qui fait le lien entre le matériel et l'utilisateur. Pour que cela fonctionne, il faudra un noyau 4.15 (sinon le compiler, voir la documentation plus bas). Pour que la prise en charge de la BRIO soit complète, il faut que le protocole 1.5 de la norme UVC soit pris en charge. Or, jusqu'à très récemment, la plus récente norme prise en charge sous Linux est la norme UVC 1.1. Ceci pour rappeler au passage que si on ne fait rien, et qu'on attend, il ne se passera rien. Merci encore une fois à ceux qui font les choses.
De plus, et parce que les correctifs sont très récents, vous devrez utiliser un noyau Linux qui prend en compte le protocole UVC 1.5. Vous devrez aussi installer une bibliothèque et des outils vidéo4linux2 (v4l2). Cet article donne quelques repères et propose quelques liens utiles pour celles et ceux qui voudraient expérimenter.
Perspectives : une amélioration importante vient d'être intégrée à un noyau récent (4.17), et le grand public devra patienter un peu pour que tout devienne automatique.
Le noyau maintenant : le correctif le plus important a été intégré dans le noyau 4.17 (il a été ajouté au noyau 3.16 depuis)
Liens complémentaires :
https://cdn.kernel.org/pub/linux/ker...angeLog-4.17.4
https://bugzilla.redhat.com/show_bug...cgi?id=1592454
https://cdn.kernel.org/pub/linux/ker...ngeLog-3.16.61
- L'histoire
N'arrivant pas à faire fonctionner ma BRIO, et après avoir cherché un peu, je suis tombé sur le site dédié au pilote uvcvideo (http://www.ideasonboard.org/uvc/).
Et par rebonds, j'ai finalement trouvé le diff qui expliquait tout (attention, c'est du code, timides s'abstenir ;-) ) :
https://git.kernel.org/pub/scm/linux...752840c91f67e7
Après avoir compris ce qu'il fallait modifier (et surtout où exactement !), j'ai tenté l'expérience, et j'ai tout noté dans un document (en anglais), que vous trouverez ici : https://github.com/ebachard/my_libuv...ntation/uvc1.5
Je n'ai pas mis l'archive du noyau 4.15 en ligne, mais si vous ne savez pas comment compiler un noyau, ce sera plus simple d'installer un .deb (me demander en privé)
N.B. : j'ai aussi mis les sources de ce document, écrit avec OOoLight, au format .odt. Ainsi, si vous avez des suggestions d'amélioration, vous pourrez facilement les soumetre (via github + un PR).
- Video4linux2
Maintenant que cela fonctionne, comment utiliser votre webcam sous Linux ?
Parmi les meilleurs logiciels, je vous conseille d'installer (vous avez le choix) : guvcview, qv4l2 ou et v4l2ucp. Vous pouvez aussi tester avec cheese, mais je l'utilise peu.
Enfin, et là, c'est très sérieux : OBS (Open Broadcast Streamer) prend parfaitement en charge la BRIO. C'est votre bande passante (montante) qui devrait limiter vos ambitions, toutefois (il est préférable d'oublier de streamer du 4k pour l'instant).
- Pan Tilt Zoom (PTZ)
La fonction PTZ réelle désigne une caméra avec des moteurs permettant des rotations dans deux directions : horizontale (pan = panoramique) et verticale (tilt). Cette fonction n'existe pas avec une webcam de type BRIO, mais en agrandissant la scène (zoom hardware), on peut cerner une zone, et faire un suivi identique à ce qu'on pourrait faire avec le PTZ "réel".
Pour revenir à ce qu'on peut faire avec une webcam, la BRIO possède un zoom (hardware) pouvant aller jusqu'à x5.0 (contre x2.0 pour les C920 et C922). Dans la pratique, on peut suivre un objet, ou une personne qui se déplace sur une scène (à condition de zoomer).
La bibliothèque qui permet de faire cela s'appelle OpenCV (j'utilise la version 3.4.0). Cela fonctionne sous Windows (7 et +), mais évidemment, cela ne fonctionnait pas sous Linux et il a fallu mettre les mains dans le cambouis... Après quelques temps passés à tester, j'ai trouvé ce qui n'allait pas, et j'ai proposé un patch (incomplet, je l'ai amélioré depuis) à OpenCV. Cependant, je ne suis pas certain qu'il sera pertinent dans l'avenir. En effet, une réécriture de cette partie du code est en cours (mais ce sera dans la 4.x). C'est vous qui voyez.
Lien : https://github.com/opencv/opencv/issues/12498
En attendant que je puisse fournir une version Linux, et pour ceux qui veulent tester sous Windows, normalement, ça doit fonctionner avec miniDart (https://framagit.org/ericb/miniDart)
Sous Linux, guvcview fonctionne super bien avec cette webcam (pourvu que le noyau la reconnaisse)
- Liens pour aller plus loin
** Le protocole UVC 1.5
** Microsoft extensions to USB video : https://docs.microsoft.com/en-us/win...extensions-1-5
Liens direct pour télécharger la norme : http://www.usb.org/developers/docs/d..._Class_1_5.zip
** Webcam améliorée :
L'incontournable kurokesu.com ! Si vous souhaitez une version "customisée" d'une C920, C922 ou même d'une BRIO, il est indispensable d'aller sur ce site remarquable : https://www.kurokesu.com/main/blog/
En particulier, pour les caméras USB : https://www.kurokesu.com/main/2016/0...ings-in-linux/
- Logiciels
** Télécharger miniDart (version Windows seulement)
Il s'agit d'une version de développement, mais on peut faire des agrandissements du zoom, ce qui fait penser à une utilisation en microscope (peu puissant, mais le principe y est) :
https://framagit.org/ericb/miniDart/...0.9.0_test.exe (cliquer sur Download, sinon il ne se passera rien ;-) )
** OBS
Le logiciel de braoadcast, qui fonctionne très bien sous Linux aussi : https://obsproject.com/
** V4L2
Point d'entrée sur wikipedia https://fr.wikipedia.org/wiki/Video4Linux