Skip to content

Bioacoustique dans Potato : revoir les détections Raven, Audacity et BirdNET

Importez des tables de sélection Raven, des étiquettes Audacity ou la sortie de BirdNET-Analyzer dans Potato, corrigez les rectangles des cris sur un spectrogramme, et exportez en fichiers Raven ou Audacity.

Potato 2.12.0 vérifie et corrige des rectangles temps-fréquence sur des enregistrements de faune quand ces rectangles proviennent de Raven, d'Audacity ou de BirdNET-Analyzer. Vous importez les tables avec leurs enregistrements, les annotateurs corrigent les rectangles sur un spectrogramme dans un schéma spectrogram_annotation, et les rectangles corrigés s'exportent vers Raven ou Audacity.

Potato lit la sortie de BirdNET et n'exécute pas BirdNET. Les modèles BirdNET sont sous licence CC BY-NC-SA et ne sont pas distribués avec Potato. Lancez vous-même BirdNET-Analyzer et importez ce qu'il écrit.

Importer les tables

bash
# A folder of Raven selection tables with the recordings beside them
potato import -i recordings/ -o review-project/
 
# BirdNET-Analyzer output, keeping detections with confidence 0.5 or more
potato import -i birdnet-output/ -f birdnet --min-confidence 0.5 -o review-project/
 
# One Audacity label file (site3_0612.txt next to site3_0612.wav)
potato import -i site3_0612.txt -f audacity_labels -o review-project/

-i désigne une table ou un dossier de tables. Le format est détecté à partir du contenu, et -f raven, -f audacity_labels ou -f birdnet le choisit explicitement.

Chaque enregistrement devient un item, copié dans le dossier media/ du projet, et chaque ligne de sa table devient une pré-annotation de rectangle ; les annotateurs ouvrent donc le clip avec les rectangles déjà tracés. Une table est associée à son enregistrement par le nom : site3_0612.Table.1.selections.txt, site3_0612.BirdNET.selection.table.txt, site3_0612.BirdNET.results.csv et site3_0612.txt appartiennent tous à site3_0612.wav (ou .flac, .mp3, .ogg, .m4a, .aac, .opus, .webm). Une table qui couvre plusieurs enregistrements les nomme dans une colonne Begin File, Begin Path ou File, et ses lignes sont réparties selon cette colonne.

Les étiquettes du schéma généré sont celles trouvées dans les tables. Ajoutez le reste de votre liste d'espèces ou de types de cris à labels dans config.yaml, pour que les annotateurs puissent étiqueter les cris que la source a manqués.

Tables de sélection Raven

Colonne RavenPotato
Begin Time (s), End Time (s)start_s, end_s
Low Freq (Hz), High Freq (Hz)low_hz, high_hz
Selection, ViewLes lignes portant le même numéro de sélection deviennent un seul rectangle, à partir de la ligne Spectrogram
ChannelConservé sur le rectangle quand il ne vaut pas 1
Begin File ou Begin Path, File Offset (s)L'enregistrement, et l'instant de début à l'intérieur de celui-ci, dans une table multi-fichiers
ConfidenceConservé sur le rectangle, et --min-confidence filtre sur cette valeur
Une colonne d'annotationL'étiquette

L'étiquette provient de --label-column NAME quand cette option est donnée. Sinon, elle provient de la première des colonnes Annotation, Species, Label, Class, Scientific Name, Common Name, Species Code, Call Type, Type et Sound Type présente dans la table. Une ligne dont l'étiquette est vide reçoit l'étiquette call.

Pistes d'étiquettes Audacity

Chaque ligne est start<TAB>end<TAB>label. Une étiquette comportant une sélection spectrale est suivie d'une ligne qui commence par une barre oblique inverse, \<TAB>low<TAB>high. Les étiquettes sans cette ligne, y compris les étiquettes ponctuelles, deviennent des rectangles couvrant toutes les fréquences.

Sortie de BirdNET-Analyzer

Les deux formats de table de BirdNET-Analyzer sont lus. La table de sélection Raven (*.BirdNET.selection.table.txt) est étiquetée avec sa colonne Scientific Name quand elle en possède une, sinon avec Common Name. Le CSV (*.BirdNET.results.csv) est étiqueté avec le nom scientifique, et ses lignes n'ont pas de plage de fréquences ; elles s'importent donc comme des rectangles couvrant toutes les fréquences. --label-column "Common name" (CSV) ou --label-column "Common Name" (table Raven) utilise plutôt les noms communs.

Les lignes sous --min-confidence (0.1 par défaut) sont laissées de côté, et le résumé de l'import indique combien. Les rectangles BirdNET sont stockés avec "source": "ai", "ai_model": "BirdNET" et leur confiance, et la page les trace avec une bordure en tirets jusqu'à ce qu'un annotateur les modifie.

Une ligne dont le temps n'est pas un nombre, comme 3,5 écrit avec une virgule décimale, est laissée de côté avec un avertissement qui indique le fichier, la ligne et la valeur. Une ligne dont le temps de fin précède le temps de début est conservée avec les deux temps inversés, et une fréquence négative est retirée du rectangle.

Revoir les rectangles

bash
python potato/flask_server.py start review-project/config.yaml -p 8000

Les annotateurs déplacent, redimensionnent, réétiquettent et suppriment des rectangles, et tracent les cris qui ont été manqués. Annotation de spectrogrammes liste les commandes. Un rectangle importé reçoit "edited": true dès qu'il est modifié, de sorte que l'export peut distinguer les rectangles qu'un relecteur a acceptés de ceux qu'il a corrigés. Cliquer sur Next sur un clip sans rien modifier enregistre ses rectangles importés comme réponse du relecteur, acceptés sans changement.

Exporter vers Raven ou Audacity

bash
python -m potato.export -c review-project/config.yaml -f raven -o export/
python -m potato.export -c review-project/config.yaml -f audacity_labels -o export/

raven écrit une table de sélection par enregistrement, avec Selection, View, Channel, Begin Time (s), End Time (s), Low Freq (Hz), High Freq (Hz), la colonne d'étiquette (Annotation, ou --option label_column=Species) et Confidence quand au moins un rectangle en possède une. audacity_labels écrit un fichier d'étiquettes par enregistrement, avec une ligne spectrale pour chaque rectangle doté d'une plage de fréquences. Les deux nomment le fichier d'après l'enregistrement ; placés à côté de l'audio, ils s'ouvrent donc dans Raven ou Audacity et peuvent être réimportés dans Potato. Avec plusieurs annotateurs, le nom de l'annotateur est ajouté au nom du fichier, et --option annotator=anna exporte une seule personne.

Exemple

examples/audio/bioacoustics-boxes/ contient deux enregistrements synthétiques de 6 secondes comportant des tons et des balayages de fréquence à des instants et des fréquences connus, importés depuis les tables Raven de son dossier source/. Les tables comportent deux erreurs à corriger : il manque un balayage descendant dans un enregistrement, et dans l'autre un trille est étiqueté comme un sifflement.

bash
python potato/flask_server.py start examples/audio/bioacoustics-boxes/config.yaml -p 8000

Pour aller plus loin

Pour les détails d'implémentation, consultez la documentation source.