diff --git a/content/blog/2023/01/24/mon-raspberry-pi4-est-enfin-utile/index.md b/content/blog/2023/01/24/mon-raspberry-pi4-est-enfin-utile/index.md new file mode 100644 index 0000000..6c8b9be --- /dev/null +++ b/content/blog/2023/01/24/mon-raspberry-pi4-est-enfin-utile/index.md @@ -0,0 +1,170 @@ +--- +title: "Mon RaspberryPi 4 est enfin utile" +date: 2023-01-23 +toc: true +tags: [ + "Station météo", + "Raspberry Pi", + "BirdNET", + "Acoustique", + "Environnement", + "Sciences", + "Ornithologie" +] +--- + +J'aime bien [râler](/tags/rant/). +Et j'ai râlé sur le [Rapsberry Pi 4](/blog/2021/02/28/rant-raspberry-pi-4/). +J'ai aussi râlé sur [Hugo](/blog/2022/02/12/rant-hugo-et-tailwind/), et c'est ce qui m'a valu la visite d'[@Arnob](https://matrix.to/#/@arnob79:matrix.org) sur [mon salon Matrix](/contact/). + +En fouillant un peu [son blog](https://arnauld.org/blog/), je suis tombé sur [BirdNET-Pi](https://arnauld.org/blog/posts/birdnetpi/). +Un Raspberry Pi 4B, un micro, un peu d'IA, et on peut déterminer quels oiseaux chantent dans son jardin ! + +Pour la petite histoire, j'envisageais de mettre un micro sur [ma station météo](/blog/2022/02/14/la-station-meteo-parfaite/) histoire de jouer un peu avec l'analyse spectrale et, pourquoi pas, de l'IA pour de la reconnaissance de sons. +L'idée initiale était d'équiper le futur micro-contrôleur d'un simple micro electret, et d'envoyer le flux audio à mon serveur principal pour le "traiter". + +Là, avec [BirdNET-Pi](https://birdnetpi.com), le "traitement" se fait directement sur le Pi4. +En arrière boutique, c'est [TensorFlow](https://www.tensorflow.org/) qui est utilisé pour reconnaître le chant des oiseaux et déterminer leur espèce. +Bon, apparemment, la version de BirdNET utilisée par BirdNET-Pi [est obsolète](https://github.com/mcguirepr89/BirdNET-Pi#introduction), mais ça constitue un bon point d'entrée. + +Mais commençons par le début. + +## Configuration + +J'utilise un Raspberry Pi 4B avec 2G de mémoire, et une carte micro-SD Sandisk de 128G. +Comme suggéré par BirdNET-Pi, je l'ai doté d'une [carte son USB UGREEN](https://www.amazon.fr/gp/product/B087T5H3MQ/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1). + +Pour le micro, c'était un peu plus compliqué de choisir. +Pour le coup, ma principale contrainte était le budget. +Je suis donc parti sur un [Boya BY-MM1](https://www.amazon.fr/gp/product/B07175JZ27/ref=ppx_yo_dt_b_asin_title_o00_s01?ie=UTF8&psc=1). +En vrai, je l'ai pris parce que la moumoutte me plaît bien... + +Bon je sais, c'est pas très pro comme processus de sélection, mais je peux toujours passer à quelque chose de mieux quand j'aurai de nouveau un peu de budget, si jamais celui-ci ne me donne pas satisfaction. +Il fallait surtout qu'il dispose d'un connecteur jack TRRS, afin d'être supporté par la carte son USB. + +Pour la partie technique, ça peut rapidement devenir compliqué à mesure qu'on veut monter en gamme. +Pour l'heure, je ne cherche pas à en faire une activité professionnelle. +Comme tout ce que je fais, c'est du hobby. +Mais des éléments comme la longeur des câbles, l'impédance, le gain, la technologie du micro, la bonette, etc., entrent en jeu quand on cherche à en avoir un véritable usage scientifique. +Et évidemment, on n'a rien sans rien : plus on paye cher, meilleur sera le matériel. + +En outre, avoir un microphone pro sur une carte son à 15€ n'a pas vraiment de sens. +Mais un vrai DAC avec tout ce que ça implique d'électronique de traitement du signal n'est pas donné non plus. + +Enfin, je fais aussi avec mes contraintes environnementales : pas question, pour le moment, de me lancer dans une installation waterproof sur batterie et panneau solaire. +Le micro sera installé sous le toit de la véranda, ce qui présente l'intérêt de le protéger de la pluie et du vent, mais l'inconvénient d'être couvert. + +Donc je fais des compromis. +On verra après pour monter en gamme si vraiment j'en ressens l'envie. + +## Raspberry Pi OS + +Ça faisait des années que je n'avais pas mis les mains sur cet OS, donc j'ai fait ce que je fais d'habitude : + +```shell {class=not-prose,linenos=false} +touch ssh +nano wpa_supplicant.conf +``` + +Pour rajouter ma config wifi, je mets le Pi en place, je le boot, je le vois, j'essaye de me connecter : + +```shell {class=not-prose,linenos=false} +ssh pi@10.10.255.50 +``` + +Merde, marche pas... + +J'aurai dû [lire la doc](https://www.raspberrypi.com/documentation/computers/configuration.html#configuring-a-user)... +Bien pour la sécurité : l'utilisateur `pi` n'est plus créé par défaut : il faut ajouter un fichier `userconf.txt` pour une installation *headless*. +Je me fais pas chier : j'éteins le Pi, sors la carte SD, refait ma manip, ajoute le fichier, démarre et teste ssh : tout roule. +On passe à BirdNET-Pi. + +## BirdNET-Pi + +Du côté des bonnes choses : on lance le script, tout s'installe tout seul, ça redémarre, ça marche. +C'est fluide, pas d'erreur, pas de bidouille. +Tout s'installe sans intervention, et l'appli est directement accessible depuis le navigateur. +Pour un truc aussi "lourd", je suis agréablement surpris. + +Du côté des choses moins bonnes, je suis un peu embêté par 2-3 trucs relativement anodins, comme le renommage de la machine, la modification du prompt, ce genre de choses. +J'aurais apprécié que le script d'installation ne touche pas à ces détails parce qu'en dehors de rajouter des éléments au `PATH`, il n'y a pas de raison de faire ces changements. +C'est d'autant plus embêtant que le script d'install est relativement complexe et éclaté en plusieurs fichiers. +Du point de vue du développeur, c'est très bien (c'est propre et tout), mais je ne peux pas le lire en diagonale pour voir ce qu'il fait (et pourquoi). + +Mais c'est vraiment une remarque mineure : tout fonctionne après une ligne de commande et sans bidouillage. +Que demander de plus ? + +Surtout que la configuration de l'application semble assez exhaustive, et les possibilités nombreuses. +Ça semble très bien foutu, et il me tarde d'avoir mes premiers résultats ! + +## Son + +Le premier test consiste évidemment à s'assurer de la qualité de la captation. +Je n'ai pas vraiment de point de comparaison, mais je suis assez satisfait. +J'ignore vraiment ce que donnerait le son capté par un matériel moins abordable, mais je suis satisfait. + +Et d'ailleurs, BirdNET-Pi m'a déjà détecté quelques espèces (dont j'ai pu confirmer visuellement la présence). + +{{< soundproc src="sounds/Corneille_noire-71-2023-01-24-birdnet-12-55-57.mp3" caption="Corneille noire, à une vingtaine de mètres" >}} + +{{< soundproc src="sounds/Moineau_domestique-50-2023-01-24-birdnet-13-34-01.mp3" caption="Moineau, deux mètres au-dessus du micro" >}} + +{{< soundproc src="sounds/Pie_bavarde-89-2023-01-24-birdnet-14-28-31.mp3" caption="Pie, dans le champ voisin" >}} + +{{< soundproc src="sounds/Pic_vert-72-2023-01-24-birdnet-12-47-13" caption="Pic vert, à une trentaine de mètres" >}} + +## Qualité de détection + +J'ai quelques reproches à faire. + +Le plus embêtant : mes poules sont détectées comme des petits-ducs ou comme des hulottes. +Même le chant du coq voisin n'est pas correctement détecté, même quand on n'entend que lui. + +Ensuite, comme précisé en intro (et sur la page github du projet), les modèles utilisés pour la détection sont obsolètes. +Je dois donc faire une croix (pour le moment) sur la détection du chien, des chats, des chèvres et d'autres bruits environnementaux. + +J'aurais apprécié pouvoir indiquer à l'application qu'une détection particulière correspond à une autre espèce que celle sélectionnée par l'application. + +Enfin, je ne sais pas si ça serait faisable, mais il aurait été utile de pouvoir d'étendre les modèles fournis par défaut. +Je n'y connais rien en IA : je ne sais pas si l'application dépend de modèles particuliers créés pour elle, ou si les modèles sont agnostiques. + +## Ergonomie + +Bon, comme souvent dans les applis un peu scientifiques, le HTML/CSS/Javascript sont mal branlés (des iframes 😱) et le résultat est assez moche. + +Mais au moins, ça existe. +Au moins, j'ai une interface web qui m'évite de trimbaler un écran et un clavier à l'extérieur. + +Il y a quelques outils externes intégrés, comme [phpSysInfo](https://phpsysinfo.github.io/phpsysinfo/) pour garder un oeil sur l'état du Raspberry Pi, un émulateur de terminal, [adminer](https://www.adminer.org/) pour inspecter la base SQLite, un explorateur de fichiers, etc. + +Tous ces outils sont dispensables pour quelqu'un qui maîtrise GNU-Linux, mais je respecte leur présence qui sera utile aux autres, ou simplement pour faciliter un peu le quotidien. + +## Conclusion + +Bon, déjà merci à @Arnob pour m'avoir fait découvrir BirdNET-Pi. +Ça me permet d'utiliser un Pi4 qui prenait la poussière, et de m'initier à l'analyse audio environnementale. +C'est ce que je voulais faire avec ma station météo (ou conjointement), et je cherchais un side-project pas trop chiant ni coûteux. +Donc c'est un carton plein. + +Maintenant que j'ai une idée de ce qui peut être fait, je veux aller plus loin. +J'ai quelques idées pour la suite : + +- remplacer le Pi4 par un Pi 0W moins énergivore (oui, du coup le Pi4 retrouvera son placard...) +- streamer l'audio vers mon serveur principal +- faire l'analyse sur mon serveur principal +- rajouter une caméra (qui ne filmera pas forcément les oiseaux détectés - ça serait intéressant mais beaucoup trop compliqué et inabordable, mais j'imagine qu'il y aurait un système PTZ avec triangulation en fonction de micros stéréoscopiques ou quelque chose du genre) + +De cette façon, j'arriverai peut-être à faire des analyses plus détaillées et plus efficaces qu'avec les modèles obsolètes de BirdNET-Pi. + +Comprenez-moi bien : je critique certains aspects de BirdNET-Pi mais ces critiques ne sont pas négatives. +Le projet est utile, intéressant, abouti, et avec du meilleur matériel audio, j'obtiendrai logiquement de meilleurs résultats. +Son existence est importante, et permet de découvrir son environnement du point de vue de l'ornithologie. +L'obsolescence dont je parle concerne simplement le fait que les derniers modèles d'entrainement incluent des espèces non-aviaires, mais si on reste focalisé sur les oiseaux, BirdNET-Pi fait du très bon travail. + +Mais en ce qui me concerne, je veux toujours aller plus loin. +Je veux qu'un tel système soit capable de détecter davantage que des oiseaux dans le spectre sonore. +À vrai dire, si j'en ai la possibilité un jour, j'aimerais pouvoir analyser les infrasons et les ultrasons en plus de la plage couverte par un micro "classique". + +Du coup, BirdNET-Pi est, pour moi, une - excellente - introduction. +Une étape vers quelque chose de plus vaste. + diff --git a/content/blog/2023/01/24/mon-raspberry-pi4-est-enfin-utile/sounds/Corneille_noire-71-2023-01-24-birdnet-12-55-57.mp3 b/content/blog/2023/01/24/mon-raspberry-pi4-est-enfin-utile/sounds/Corneille_noire-71-2023-01-24-birdnet-12-55-57.mp3 new file mode 100644 index 0000000..04de204 Binary files /dev/null and b/content/blog/2023/01/24/mon-raspberry-pi4-est-enfin-utile/sounds/Corneille_noire-71-2023-01-24-birdnet-12-55-57.mp3 differ diff --git a/content/blog/2023/01/24/mon-raspberry-pi4-est-enfin-utile/sounds/Moineau_domestique-50-2023-01-24-birdnet-13-34-01.mp3 b/content/blog/2023/01/24/mon-raspberry-pi4-est-enfin-utile/sounds/Moineau_domestique-50-2023-01-24-birdnet-13-34-01.mp3 new file mode 100644 index 0000000..a2ff745 Binary files /dev/null and b/content/blog/2023/01/24/mon-raspberry-pi4-est-enfin-utile/sounds/Moineau_domestique-50-2023-01-24-birdnet-13-34-01.mp3 differ diff --git a/content/blog/2023/01/24/mon-raspberry-pi4-est-enfin-utile/sounds/Pic_vert-72-2023-01-24-birdnet-12-47-13.mp3 b/content/blog/2023/01/24/mon-raspberry-pi4-est-enfin-utile/sounds/Pic_vert-72-2023-01-24-birdnet-12-47-13.mp3 new file mode 100644 index 0000000..4fe3523 Binary files /dev/null and b/content/blog/2023/01/24/mon-raspberry-pi4-est-enfin-utile/sounds/Pic_vert-72-2023-01-24-birdnet-12-47-13.mp3 differ diff --git a/content/blog/2023/01/24/mon-raspberry-pi4-est-enfin-utile/sounds/Pie_bavarde-89-2023-01-24-birdnet-14-28-31.mp3 b/content/blog/2023/01/24/mon-raspberry-pi4-est-enfin-utile/sounds/Pie_bavarde-89-2023-01-24-birdnet-14-28-31.mp3 new file mode 100644 index 0000000..639f58c Binary files /dev/null and b/content/blog/2023/01/24/mon-raspberry-pi4-est-enfin-utile/sounds/Pie_bavarde-89-2023-01-24-birdnet-14-28-31.mp3 differ