Skip to content

musafin/birdPi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Détection d'oiseau par écoute sonore

Introduction

Ce repo contient la totalité des codes nécessaire au projet birdPi. birdPi permet grâce à plusieurs raspberry et un serveur, de détécter des oiseaux, les enregistrer et envoyer les informations au serveurs. Le serveur permet ensuite d'accèder à une carte par une interface web. La carte montre les espèce ayant été détectée dans un intervalle de temps choisi par l'utilisateur, en cliquant, une pop-up apparaît : on peut alors voir les dates précises d'enregistrement, ainsi qu'écouter/télécharger l'audio.

Architecture du projet

Voici un recapitulatif des codes importants :

└── 📁birdPi
    └── 📁pi                        # Dossier à mettre sur les Rasp
        ├── run_all.py              # Fichier Python qui se charge de l'écoute, de l'analyse et de l'envoi des messages au serveur
        ├── cleaning_output.py      # Script Python permettant de nettoyer la sortie .txt de BirdNET
        ├── launch.sh               # Script Bash permettant de lancer le programme principal Python
        ├── setup.sh                # Initialise le Pi pour l'écoute
        ├── default_conf.txt        # Contient les paramètres de lancement du programme principal
        ├── birdpi.service          # Service systemd
        └── 📁outputs               # Contient les fichiers produits localement
            └── output.csv          # Output nettoyée de BirdNET, un fichier .csv lisible
    └── 📁server                    # Dossier à mettre dans les serveurs
        ├── listen.py               # Script d'écoute sur LoRa, tourne en continu et met à jour birds.sqlite3
        ├── 📁.venv                 # Environnement virtuel Python
        ├── 📁api                   # Backend du serveur web
        │   ├── db.py               # Fonctions d'accès à la base de données
        │   └── main.py             # Endpoints FastAPI
        ├── 📁database              # Contient la base de données SQLite
        │   └── birds.sqlite3       # DB SQL stockant les oiseaux détectés, leur temps, et l’instant d’enregistrement
        └── 📁frontend              # Application web
            ├── app.js              # Script principal de l’appli web
            ├── details.js          # Gère l’ouverture des pop-ups
            ├── player.js           # Gère la lecture audio
            ├── index.html          # Front HTML principal
            ├── style.css           # Feuille de style
            └── rasp.json           # DB des Raspberry installés et leur position géographique
    ├── .gitignore                  # Fichiers à ignorer par Git
    └── README.md                   # Le fichier que vous lisez actuellement :)

Commment tout ca interragi ?

Un serveur web uvicorn tourne sur une machine. En parallèle, un parc de Raspberry enregistre à une fréquence choisie. Lorsque le modèle BirdNET détecter un oiseau et son espèce, l'information est envoyé au serveur, il est donc ajouter à la DB pour être affiché sur la carte.

Sur le serveur

Installation

Déplacez le contenu du dossier server sur le serveur (en clonant dessus ou bien en utilisant un client SFTP, si vous n'en avez pas, FileZilla est excellent et gratuit :). Vous pouvez ensuite executer le script d'installation :

chmod +x setup.sh
./setup.sh

Il se chargera (normalement) d'installer les dépendances nécessaire.

Lancement du serveur

Vérifiez en premier lieu que l'IP en en-tête des ficher app.js et details.js correspondent bien à l'IP du serveur. En suite, vous pouvez démarerrer le serveur en tapant la commande (depuis le dossier api) :

sudo uvicorn main:app --host 0.0.0.0 --port 80 &

Vous pouvez maintenant accèder à l'interface web en tapant l'ip du serveur sur un navigateur !

Ajout d'un Raspberry Pi

Lors de la configuration des raspbeery (qui viendra après), vous allez être appelé à choisir un mot de passe. Il ne s'agit pas d'un mot de passe de session, mais du hash. Dans rasp.json, si votre raspberry est nommé pi5, ajouté :

"pi5" : {
"lat": "latitude du rasp",
"lon": "longitude du rasp",
"mac": "addresse",
"secret_hash" : "hash"
}

Vous pourrez trouver le hash dans /home/pi/birdPi/config/secret.hash.

Sur les Raspberry

Installation

Dans les deux cas, branchez votre rapsberry par ethernet, c'est beaucoup plus simple, il n'y a normalement pas besoin d'écran.

Option 1 - Presque manuelle

Déplacer tout le contenu du dossier pi dans le /home/pi/birdPi/. Vous pouvez ensuite executer le script d'installation :

chmod +x setup.sh
./setup.sh

Vous serez invité à choisir un nom pour le pi (sous la forme pi5, pi312478178961, ..., tant que c'est strictement supérieur à 0), et un mot de passe. IL NE S'AGIT PAS DU MOT DE PASSE DU PI, IL S'AGIT DU MOT DE PASSE DU HASH.

Option 2 - Elle marche pas encore

Mettez l'image sur une carte SD, soit avec RPI-imager (pas testé) soit avec la commande suivante :

sudo dd if=/chemin/vers/birdbian.img of=/dev/sdX bs=4m status=progress conv=fsync

ATTENTION : la commande dd porte bien son surnom de disk destroyer, faite ATTENTION. Remplacer sdX par le nom de la partition de la carte SD. Elle peut être obtenue en faisant lsblk sous linux, ou bien diskutil list sous mac.

Si votre machine est encore vivante, il suffit de mettre la carte SD dans le raspberry, et l'allumer. Il faudra surement le reconfigurer, donc faite :

systemctl --user stop birdpi.service
cd /home/pi/birdPi
./setup.sh

Configurez le rasp et redémarrez.

Les paramètres par défaut sont les suivant :

  • User par défaut : pi
  • Nom de machine par défaut : pi1
  • Mot de passe par défaut : leszozyofondubrui

Lancement

Le script se lance automatiquement au démarrage de la session grâce à un service systemd. Vous pouvez le stoppez quand vous voulez avec :

systemctl --user stop birdpi.service

Utilisation

Le script run_all.py dipose de 3 paramètres :

  • RECORD_SECONDS : Correspond à la durée des enregistrements
  • INTERVAL_SECONDS : Correspond au temps de pause entre les enregistrements
  • SERVER_IP : Correspond à l'ip du serveur Vous pouvez modifier ces paramètres dans default_conf.txt. Normalement, un service systemd lance le script au démarrage. Son fonctionnement est pour l'instant incertain, si le pi n'envoie rien, connecter vous en ssh et lancez launch.sh.

TODO

Ajout

  • Image custom Raspberry (maybe downloadable depuis le serveur ?)
  • Ajout d'un raspberry depuis la plateform web

About

My first internship project ! Implemented by myself tools to detect birds using microphones, and then sending the information to a server in order to show a map !

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors