Une webcam à base de Raspberry Pi

Après maintenant plus d’un an en télétravail, et pouvant compter mes jours de présences en agence sur les doigts de mes deux mains (sans avoir à recourir à un changement de base de numération), et à l’heure de l’explosion des communications en visioconférence, ou au minimum en audioconférence, se pose la question de la webcam. Si mon ordinateur professionnel en possède une intégrée, ce n’est en revanche pas le cas de mon ordinateur fixe. Au détour dans mon agrégateur de flux RSS, j’ai vu passer un article évoquant Raspberry Pi et webcam. Trouvant l’idée intrigante: contourner l’utilisation première d’un Pi pour en faire une webcam, je me suis donc lancé dans la réalisation de ce petit projet.

Composants

Côté composants, rien de bien compliqué:

  • Un Raspberry Pi zéro W.
  • Un module image HQ.
  • Un objectif.
  • Une carte microSD.
  • Un câble USB.

Installation

Pour l’installation, que du classique dans le monde du Raspberry Pi. Il suffit de récupérer l’image système dans la partie release du projet showmewebcam sur GitHub, puis de l’écrire sur une carte micro SD avec son logiciel habituel, pour ma part, dd. Il ne reste plus qu’à connecter le module au Pi, insérer la carte et connecter le câble USB en utilisant le port USB de données du Pi (et pas celui d’alimentation, celui situé au milieu du Pi donc), puis à connecter le tout à un ordinateur.

Boîtier

Du côté du boîtier, j’ai trouvé ce modèle 3D plutôt esthétique, que j’ai imprimé en PETG noir. Après impression, petite déception, car l’assemblage nécessite des vis format M2 et/ou M2.5. Mon stock de M3 n’étant d’aucune utilité, j’étais bon pour quelques semaines supplémentaires d’attente pour recevoir quelques modèles de vis compatibles de longueurs variées. Ce qui nous donne au final le panachage suivant :

  • Pi: 3x M2x5.
  • Camera/Pi: 2x M2x8 and 1x M2x6.
  • Case: 4x M2.5×14.

Mise en place

Pour installer la caméra, j’ai modélisé un modèle 3D relativement simple permettant de connecter d’autres pièces provenant d’un modèle de bras articulé. Cela fait l’affaire, même si à l’usage, j’aurais dû mettre plus d’espace au niveau du connecteur. Ce sera pour la version 2.

Les modèles qui composent mon ensemble sont donc les suivants :

Autre mésaventure, après avoir assemblé le boîtier et visser la camera sur le support, j’ai constaté qu’à quelques millimètres près, je ne pouvais plus connecter la caméra, même en utilisant un câble coudé. J’ai donc fait l’acquisition d’un adaptateur 1/4 femelle vers 1/4 mâle pour rehausser la caméra de quelques centimètres.

Résultat

Le résultat est plutôt satisfaisant. La qualité d’image plutôt bonne, même si celle-ci est limitée à du 720p, la limite se situant à priori du côté du traitement des codecs sur le Pi pour espérer voir arriver du 1080p. Évoquons maintenant le sujet qui fâche (un peu) : la latence. La caméra est réactive, mais je crois détecter un léger décalage entre l’image et le son. Il faudrait effectuer le même test avec un Pi 4 à la place du Pi zéro, pour vérifier si la limite provient de la puissance de la plateforme, ou est propre au code utilisé. Raison pour laquelle il ne serait pas inutile de toujours avoir un Pi inutilisé en plus en réserve.

Bref, un projet intéressant à base de Raspberry Pi et qui permet de se familiariser avec les modules caméra du Raspberry Pi.

Sources

[Pi] Désactiver le HDMI

Je fais fonctionner, depuis presque un mois maintenant, un raspberry pi zero w sur mon balcon, à l’aide d’un panneau solaire et d’une batterie. Au moment de la mise en place, j’ai donc cherché à réduire au maximum l’énergie consommée par le pi.

Après quelques recherches, j’ai trouvé qu’il était possible de désactiver le HDMI, pour une économie estimée à 25 mA. Pour réaliser cette opération de désactivation, on exécute la commande suivante (la ré-activation s’effectue avec l’option -p) :

/usr/bin/tvservice -o

Afin de s’assurer de la persistance de cette configuration en cas de redémarrage, on s’assure également d’ajouter la ligne dans le fichier /etc/rc.local .

Il est également possible de désactiver les leds pour économiser 5 mA par led. Je n’ai en revanche pas testé cette configuration, car je souhaitais pouvoir contrôler visuellement l’état du pi.

Source : Raspberry Pi Zero – Conserve power and reduce draw to 80mA

Installer scdaemon sur un Pi déconnecté du réseau

Dans un article précédent décrivant la partie génération de clefs PGP et transfert sur YubiKey, j’avais évoqué qu’il était envisageable de réaliser le processus complet sur un ordinateur exclusivement réservé pour cet usage. Je me suis donc procuré un Raspberry Pi Zéro, afin de vérifier la validité de cette hypothèse.

Mes premiers tests ont néanmoins été quelque peu retardés, car il est nécessaire d’adjoindre au Pi un hub USB disposant d’une alimentation dédiée, afin de pouvoir connecter, et surtout utiliser les différents périphériques : clavier, YubiKey et support de sauvegarde.

Le principal point bloquant par rapport à la génération des clefs PGP testée la première fois, se situe du côté de l’absence dans le système du composant scdaemon. Sans lui, impossible de dialoguer avec la YubiKey et d’exporter les clefs. Passons donc aux étapes permettant son installation.

Dans un premier temps, et après avoir récupéré la dernière version de Raspbian, en étant particulièrement attentif à la vérification de l’image récupérée par comparaison des sommes de hachage, il faut également récupérer le paquet scdaemon. Une page du wiki debian nous indique par ailleurs, que la bonne architecture à choisir pour le Raspberry Pi Zéro est armel ou armhf, à priori.

Sur le site web du projet raspbian, je parviens par ailleurs à trouver la liste des paquets de la distribution disponible. Dans ce fichier, une recherche de la chaîne « Package: scdaemon », nous permet de déterminer le chemin (propriété filename) où trouver le paquet recherché dans l’arborescence du même site, à savoir ici :

pool/main/g/gnupg2/scdaemon_2.1.18-8~deb9u2_armhf.deb

Nous pouvons alors nous rendre sur la page suivante afin d’explorer les différents versions du paquet à notre disposition: https://archive.raspbian.org/raspbian/pool/main/g/gnupg2/. Une fois le paquet récupéré et le système installé sur la carte SD, on pourra alors monter le système de fichier présent sur la carte et déposer le .deb quelque part dans l’arborescence (par exemple, dans /home). On en profite également pour comparer la somme de hachage du paquet avec celle présente dans le fichier « Packages ». Il ne nous reste plus qu’à démarrer le système depuis le Pi et à exécuter la commande dpkg -i <paquet>.deb pour installer scdaemon.

À ce stade, nous disposons désormais d’un ordinateur ayant tous les pré-requis nécessaires à la génération et à l’exportation des clefs PGP sur la YubiKey. J’ai rencontré quelques difficultés lors des premières tentatives d’export vers la YubiKey, car cette dernière, bien que détectée, ne semblait pas disponible. Il semble que deux processus scdaemon étaient démarrés et j’ai donc pu résoudre mon problème avec un simple « killall scdaemon ». Autre point l’export devait être réalisé en mode root, l’option -E de sudo devient alors incontournable pour transmettre la variable d’environnement « GNUPGHOME ». Pas grand-chose à ajouter de plus, si ce n’est qu’il faut faire preuve de patience pour les opérations de génération des clefs, qui mettent plusieurs minutes à s’exécuter sur un Pi zéro.