170 lines
10 KiB
Markdown
170 lines
10 KiB
Markdown
---
|
|
title: "Mon RaspberryPi 4 est enfin utile"
|
|
date: "2023-01-24"
|
|
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://www.birdweather.com/birdnetpi), 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/dp/B087T5H3MQ).
|
|
|
|
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/dp/B07175JZ27).
|
|
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).
|
|
|
|
<x-snd src="sounds/Corneille_noire-71-2023-01-24-birdnet-12-55-57.mp3" caption="Corneille noire, à une vingtaine de mètres" />
|
|
|
|
<x-snd src="sounds/Moineau_domestique-50-2023-01-24-birdnet-13-34-01.mp3" caption="Moineau, deux mètres au-dessus du micro" />
|
|
|
|
<x-snd src="sounds/Pie_bavarde-89-2023-01-24-birdnet-14-28-31.mp3" caption="Pie, dans le champ voisin" />
|
|
|
|
<x-snd src="sounds/Pic_vert-72-2023-01-24-birdnet-12-47-13.mp3" 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.
|
|
|