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
# 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 Raven | Potato |
|---|---|
Begin Time (s), End Time (s) | start_s, end_s |
Low Freq (Hz), High Freq (Hz) | low_hz, high_hz |
Selection, View | Les lignes portant le même numéro de sélection deviennent un seul rectangle, à partir de la ligne Spectrogram |
Channel | Conservé 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 |
Confidence | Conservé sur le rectangle, et --min-confidence filtre sur cette valeur |
| Une colonne d'annotation | L'é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
python potato/flask_server.py start review-project/config.yaml -p 8000Les 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
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.
python potato/flask_server.py start examples/audio/bioacoustics-boxes/config.yaml -p 8000Pour aller plus loin
- Annotation de spectrogrammes - Options du schéma, commandes et réponse stockée
- Pièges photographiques - Revoir la sortie de MegaDetector
- Comparatif des outils d'annotation audio - Les outils audio côte à côte
- Importer des projets - Tous les formats que lit
potato import
Pour les détails d'implémentation, consultez la documentation source.