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".
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?ie=UTF8&psc=1&linkCode=ll1&tag=richarddern-21&linkId=32457a75e621d9b9a3d802ff9e951c4a&language=fr_FR&ref_=as_li_ss_tl).
Je suis donc parti sur un [Boya BY-MM1](https://www.amazon.fr/gp/product/B07175JZ27?ie=UTF8&psc=1&linkCode=ll1&tag=richarddern-21&linkId=f0126c0b2b663d8261f73825570fbe0b&language=fr_FR&ref_=as_li_ss_tl).
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).
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.