Skip to content

Bioakustik in Potato: Raven-, Audacity- und BirdNET-Detektionen prüfen

Raven-Selection-Tables, Audacity-Labels oder BirdNET-Analyzer-Ausgaben in Potato importieren, Ruf-Boxen auf einem Spektrogramm korrigieren und Raven- oder Audacity-Dateien exportieren.

Potato 2.12.0 prüft und korrigiert Zeit-Frequenz-Boxen auf Aufnahmen von Wildtieren, wenn die Boxen aus Raven, Audacity oder BirdNET-Analyzer stammen. Sie importieren die Tabellen mit ihren Aufnahmen, Annotatoren korrigieren die Boxen auf einem Spektrogramm in einem Schema vom Typ spectrogram_annotation, und die korrigierten Boxen werden zurück nach Raven oder Audacity exportiert.

Potato liest die Ausgabe von BirdNET und führt BirdNET nicht aus. Die BirdNET-Modelle stehen unter CC BY-NC-SA und werden nicht mit Potato verteilt. Führen Sie BirdNET-Analyzer selbst aus und importieren Sie, was es schreibt.

Die Tabellen importieren

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 ist eine einzelne Tabelle oder ein Ordner mit Tabellen. Das Format wird am Inhalt erkannt, und -f raven, -f audacity_labels oder -f birdnet wählt es explizit.

Jede Aufnahme wird zu einem Item, das in den Ordner media/ des Projekts kopiert wird, und jede Zeile ihrer Tabelle wird zu einer Box-Vorannotation, sodass Annotatoren den Clip mit bereits gezeichneten Boxen öffnen. Eine Tabelle wird ihrer Aufnahme über den Namen zugeordnet: site3_0612.Table.1.selections.txt, site3_0612.BirdNET.selection.table.txt, site3_0612.BirdNET.results.csv und site3_0612.txt gehören alle zu site3_0612.wav (oder .flac, .mp3, .ogg, .m4a, .aac, .opus, .webm). Eine Tabelle, die mehrere Aufnahmen abdeckt, nennt sie in einer Spalte Begin File, Begin Path oder File, und ihre Zeilen werden nach dieser Spalte aufgeteilt.

Die Labels des erzeugten Schemas sind die in den Tabellen gefundenen Labels. Ergänzen Sie den Rest Ihrer Arten- oder Ruftypenliste unter labels in config.yaml, damit Annotatoren auch Rufe beschriften können, die die Quelle übersehen hat.

Raven-Selection-Tables

Raven-SpaltePotato
Begin Time (s), End Time (s)start_s, end_s
Low Freq (Hz), High Freq (Hz)low_hz, high_hz
Selection, ViewZeilen mit derselben Selection-Nummer werden zu einer Box, wobei die Zeile Spectrogram verwendet wird
ChannelWird an der Box aufbewahrt, wenn er nicht 1 ist
Begin File oder Begin Path, File Offset (s)Die Aufnahme und die Startzeit darin, in einer Tabelle über mehrere Dateien
ConfidenceWird an der Box aufbewahrt, und --min-confidence filtert danach
Eine AnnotationsspalteDas Label

Das Label kommt aus --label-column NAME, wenn angegeben. Andernfalls kommt es aus der ersten der Spalten Annotation, Species, Label, Class, Scientific Name, Common Name, Species Code, Call Type, Type und Sound Type, die die Tabelle enthält. Eine Zeile mit leerem Label erhält das Label call.

Audacity-Labelspuren

Jede Zeile ist start<TAB>end<TAB>label. Auf ein Label mit spektraler Auswahl folgt eine Zeile, die mit einem Backslash beginnt, \<TAB>low<TAB>high. Labels ohne diese Zeile, Punktlabels eingeschlossen, werden zu Boxen über alle Frequenzen.

Ausgabe von BirdNET-Analyzer

Beide Tabellenformate von BirdNET-Analyzer werden gelesen. Die Raven-Selection-Table (*.BirdNET.selection.table.txt) wird mit ihrer Spalte Scientific Name beschriftet, wenn sie eine hat, sonst mit Common Name. Die CSV (*.BirdNET.results.csv) wird mit dem wissenschaftlichen Namen beschriftet, und ihre Zeilen haben keinen Frequenzbereich, daher werden sie als Boxen über alle Frequenzen importiert. --label-column "Common name" (CSV) oder --label-column "Common Name" (Raven-Tabelle) verwendet stattdessen Trivialnamen.

Zeilen unter --min-confidence (Standard 0.1) werden ausgelassen, und die Importzusammenfassung gibt an, wie viele. BirdNET-Boxen werden mit "source": "ai", "ai_model": "BirdNET" und ihrer Konfidenz gespeichert, und die Seite zeichnet sie mit gestricheltem Rand, bis ein Annotator sie ändert.

Eine Zeile, deren Zeit keine Zahl ist, etwa 3,5 mit Dezimalkomma geschrieben, wird mit einer Warnung ausgelassen, die Datei, Zeile und Wert nennt. Eine Zeile, deren Endzeit vor ihrer Startzeit liegt, wird mit vertauschten Zeiten übernommen, und eine negative Frequenz wird aus der Box entfernt.

Die Boxen prüfen

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

Annotatoren verschieben, skalieren, beschriften und löschen Boxen und zeichnen die übersehenen Rufe ein. Spektrogrammannotation listet die Bedienelemente auf. Eine importierte Box erhält "edited": true, sobald sie geändert wird, sodass der Export Boxen, die eine prüfende Person akzeptiert hat, von korrigierten unterscheiden kann. Ein Klick auf Next bei einem Clip, ohne etwas zu ändern, speichert dessen importierte Boxen als Antwort der prüfenden Person, unverändert akzeptiert.

Zurück nach Raven oder Audacity exportieren

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 schreibt eine Selection-Table pro Aufnahme, mit Selection, View, Channel, Begin Time (s), End Time (s), Low Freq (Hz), High Freq (Hz), der Labelspalte (Annotation oder --option label_column=Species) und Confidence, wenn eine Box eine hat. audacity_labels schreibt eine Labeldatei pro Aufnahme, mit einer spektralen Zeile für jede Box, die einen Frequenzbereich hat. Beide benennen die Datei nach der Aufnahme, sodass sie sich mit dem Audio daneben in Raven oder Audacity öffnen und wieder in Potato importieren lassen. Bei mehreren Annotatoren wird der Name des Annotators an den Dateinamen angehängt, und --option annotator=anna exportiert eine einzelne Person.

Beispiel

examples/audio/bioacoustics-boxes/ enthält zwei synthetische Aufnahmen von 6 Sekunden mit Tönen und Frequenz-Sweeps zu bekannten Zeiten und Frequenzen, importiert aus den Raven-Tabellen in seinem Ordner source/. Die Tabellen enthalten zwei zu behebende Fehler: In einer Aufnahme fehlt ein abwärts gerichteter Sweep, und in der anderen ist ein Triller als Pfiff beschriftet.

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

Weiterführende Informationen

Implementierungsdetails finden Sie in der Quelldokumentation.