parent
0060b77967
commit
5623ef48b0
@ -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. |
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue