Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 59 additions & 47 deletions birdnet_analyzer/analyze/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,13 +160,10 @@ def analyze(
output = audio_input

if split_tables:
output: Path = (
audio_input_path.parent if audio_input_path.is_file() else audio_input_path
)
_split_tables(
df,
audio_input_path,
output,
Path(output),
fmin,
fmax,
predictions,
Expand All @@ -181,53 +178,53 @@ def analyze(
sensitivity,
species_list_file,
)
else:
if "table" in rtypes:
save_as_rtable(
df,
fmin,
fmax,
predictions.model_fmin,
predictions.model_fmax,
audio_speed,
Path(output) / cfg.OUTPUT_RAVEN_FILENAME,
)

if "table" in rtypes:
save_as_rtable(
df,
fmin,
fmax,
predictions.model_fmin,
predictions.model_fmax,
audio_speed,
Path(output) / cfg.OUTPUT_RAVEN_FILENAME,
)

if "csv" in rtypes:
save_as_csv(
df,
Path(output) / cfg.OUTPUT_CSV_FILENAME,
additional_columns,
lat=lat,
lon=lon,
week=week,
overlap=overlap,
min_conf=min_conf,
sensitivity=sensitivity,
species_list_file=species_list_file,
model_path=predictions.model_path,
)
if "csv" in rtypes:
save_as_csv(
df,
Path(output) / cfg.OUTPUT_CSV_FILENAME,
additional_columns,
lat=lat,
lon=lon,
week=week,
overlap=overlap,
min_conf=min_conf,
sensitivity=sensitivity,
species_list_file=species_list_file,
model_path=predictions.model_path,
)

if "kaleidoscope" in rtypes:
save_as_kaleidoscope(df, Path(output) / cfg.OUTPUT_KALEIDOSCOPE_FILENAME)
if "kaleidoscope" in rtypes:
save_as_kaleidoscope(df, Path(output) / cfg.OUTPUT_KALEIDOSCOPE_FILENAME)

if "audacity" in rtypes:
save_as_audacity(df, Path(output) / cfg.OUTPUT_AUDACITY_FILENAME)
if "audacity" in rtypes:
save_as_audacity(df, Path(output) / cfg.OUTPUT_AUDACITY_FILENAME)

if "parquet" in rtypes:
save_as_parquet(
df,
Path(output) / cfg.OUTPUT_PARQUET_FILENAME,
additional_columns,
lat=lat,
lon=lon,
week=week,
overlap=overlap,
min_conf=min_conf,
sensitivity=sensitivity,
species_list_file=species_list_file,
model_path=predictions.model_path,
)
if "parquet" in rtypes:
save_as_parquet(
df,
Path(output) / cfg.OUTPUT_PARQUET_FILENAME,
additional_columns,
lat=lat,
lon=lon,
week=week,
overlap=overlap,
min_conf=min_conf,
sensitivity=sensitivity,
species_list_file=species_list_file,
model_path=predictions.model_path,
)

if save_params:
save_params_to_file(
Expand Down Expand Up @@ -355,6 +352,21 @@ def _split_tables(
df_file, output / (file_shorthand + ".BirdNET.results.txt")
)

if "parquet" in rtypes:
save_as_parquet(
df_file,
output / (file_shorthand + ".BirdNET.results.parquet"),
additional_columns,
lat=lat,
lon=lon,
week=week,
overlap=overlap,
min_conf=min_conf,
sensitivity=sensitivity,
species_list_file=species_list_file,
model_path=predictions.model_path,
)


def _merge_consecutive_segments(
df: pd.DataFrame, merge_consecutive: int, hop_size: float = 3.0
Expand Down
3 changes: 3 additions & 0 deletions birdnet_analyzer/gui/analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ def run_analysis(
n_producers,
n_workers,
progress: gr.Progress | None,
split_tables: bool = False,
):
"""Starts the analysis.

Expand Down Expand Up @@ -94,6 +95,7 @@ def run_analysis(
n_workers: The number of worker threads to be used.
input_dir: The input directory.
progress: The gradio progress bar.
split_tables: Whether to split the output into separate tables per input file.
"""
import birdnet_analyzer.gui.localization as loc
from birdnet_analyzer.analyze import analyze
Expand Down Expand Up @@ -154,5 +156,6 @@ def run_analysis(
save_params=save_params,
n_producers=n_producers,
n_workers=n_workers,
split_tables=split_tables,
_return_only=bool(input_path), # only for single file tab
)
8 changes: 8 additions & 0 deletions birdnet_analyzer/gui/multi_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ def run_batch_analysis(
custom_classifier_file,
output_type,
additional_columns,
split_tables_checkbox,
locale,
batch_size,
producers_number,
Expand Down Expand Up @@ -91,6 +92,7 @@ def run_batch_analysis(
progress=progress,
n_producers=producers_number,
n_workers=workers_number,
split_tables=split_tables_checkbox,
)
skipped_files = [results.inputs[ui] for ui in results.unprocessable_inputs]
header = (
Expand Down Expand Up @@ -219,6 +221,11 @@ def select_directory_wrapper():
label=loc.localize("multi-tab-additional-columns-checkbox-label"),
info=loc.localize("multi-tab-additional-columns-checkbox-info"),
)
split_tables_checkbox = gr.Checkbox(
False,
label=loc.localize("multi-tab-split-table-checkbox-label"),
info=loc.localize("multi-tab-split-table-checkbox-info"),
)

bs_number, producers_number, workers_number = gu.computing_settings()
start_batch_analysis_btn = gr.Button(
Expand Down Expand Up @@ -247,6 +254,7 @@ def select_directory_wrapper():
model_settings["selected_classifier_state"],
output_type_radio,
additional_columns_,
split_tables_checkbox,
model_settings["locale_dropdown"],
bs_number,
producers_number,
Expand Down
6 changes: 4 additions & 2 deletions birdnet_analyzer/lang/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,8 @@
"multi-tab-samples-dataframe-column-duration-header": "Länge",
"multi-tab-samples-dataframe-column-subpath-header": "Unterpfad",
"multi-tab-samples-dataframe-no-files-found": "Keine Dateien gefunden",
"multi-tab-split-table-checkbox-info": "Wenn aktiviert, wird für jede Eingabedatei eine separate Ergebnistabelle erstellt. Andernfalls werden alle Ergebnisse in einer einzigen Tabelle zusammengefasst.",
"multi-tab-split-table-checkbox-label": "Tabellen pro Eingabedatei aufteilen",
"multi-tab-title": "Batch-Analyse",
"progress-analyzing": "Analysiere",
"progress-autotune": "Autotune läuft",
Expand Down Expand Up @@ -369,13 +371,13 @@
"training-tab-upsampling-radio-option-smote": "SMOTE",
"training-tab-upsampling-ratio-slider-info": "Das Mindestverhältnis für eine Minderheitenklasse im Vergleich zur Mehrheitsklasse nach dem Upsampling.",
"training-tab-upsampling-ratio-slider-label": "Upsampling-Verhältnis",
"training-tab-warning-detached-classifier-append": "Der \"Anhängen\"-Modus wird für den abgekoppelten Klassifikator nicht angewendet.",
"training-tab-use-focal-loss-checkbox-info": "Verwendet Focal Loss während des Trainings. Dies gibt schwierigen Beispielen mehr Gewicht und hilft, Klassenungleichgewichte zu bewältigen.",
"training-tab-use-focal-loss-checkbox-label": "Focal Loss verwenden",
"training-tab-use-labelsmoothing-checkbox-info": "Wendet Label Smoothing während des Trainings an. Dies kann die Generalisierung des Modells verbessern, indem es verhindert, dass das Modell zu selbstsicher wird.",
"training-tab-use-labelsmoothing-checkbox-label": "Label Smoothing verwenden",
"training-tab-use-mixup-checkbox-info": "Mixup ist eine Technik zur Datenvermehrung, die neue Daten durch Mischen zweier Beispiele und ihrer Label erzeugt.",
"training-tab-use-mixup-checkbox-label": "Mixup verwenden",
"training-tab-warning-detached-classifier-append": "Der \"Anhängen\"-Modus wird für den abgekoppelten Klassifikator nicht angewendet.",
"validation-max-confidence-lower-than-min-confidence": "Maximaler Konfidenz-Schwellwert muss größer sein als der minimale Schwellwert.",
"validation-no-audio-directory-selected": "Kein Audioverzeichnis ausgewählt",
"validation-no-cache-file-selected": "Bitte wählen Sie eine Cache-Datei aus.",
Expand All @@ -390,4 +392,4 @@
"validation-no-valid-epoch-number": "Bitte geben Sie eine gültige Anzahl von Epochen an.",
"validation-no-valid-frequency": "Bitte geben Sie eine gültige Frequenz an",
"validation-no-valid-learning-rate": "Bitte geben Sie eine gültige Lernrate an."
}
}
4 changes: 3 additions & 1 deletion birdnet_analyzer/lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,8 @@
"multi-tab-samples-dataframe-column-duration-header": "Length",
"multi-tab-samples-dataframe-column-subpath-header": "Subpath",
"multi-tab-samples-dataframe-no-files-found": "No files found",
"multi-tab-split-table-checkbox-info": "When enabled, a separate result table is created for each input file. Otherwise, all results are combined into a single table.",
"multi-tab-split-table-checkbox-label": "Split tables by input file",
"multi-tab-title": "Batch analysis",
"progress-analyzing": "Analyzing",
"progress-autotune": "Autotune in progress",
Expand Down Expand Up @@ -369,13 +371,13 @@
"training-tab-upsampling-radio-option-smote": "SMOTE",
"training-tab-upsampling-ratio-slider-info": "The minimum ratio for a minority class compared to the majority class after upsampling.",
"training-tab-upsampling-ratio-slider-label": "Upsampling ratio",
"training-tab-warning-detached-classifier-append": "Append mode will not apply to the detached classifier.",
"training-tab-use-focal-loss-checkbox-info": "Uses focal loss during training. This gives more weight to hard examples and helps handle class imbalance.",
"training-tab-use-focal-loss-checkbox-label": "Use focal loss",
"training-tab-use-labelsmoothing-checkbox-info": "Applies label smoothing during training. This can help improve model generalization by preventing the model from becoming too confident.",
"training-tab-use-labelsmoothing-checkbox-label": "Use label smoothing",
"training-tab-use-mixup-checkbox-info": "Applies mixup augmentation during training. This can help improve model generalization by creating new training samples through linear interpolation.",
"training-tab-use-mixup-checkbox-label": "Use mixup",
"training-tab-warning-detached-classifier-append": "Append mode will not apply to the detached classifier.",
"validation-max-confidence-lower-than-min-confidence": "Maximum confidence must be greater than minimum confidence",
"validation-no-audio-directory-selected": "No audio directory selected",
"validation-no-cache-file-selected": "Please select a cache file.",
Expand Down
6 changes: 4 additions & 2 deletions birdnet_analyzer/lang/fi.json
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,8 @@
"multi-tab-samples-dataframe-column-duration-header": "Pituus",
"multi-tab-samples-dataframe-column-subpath-header": "Alihakemisto",
"multi-tab-samples-dataframe-no-files-found": "Tiedostoja ei löytynyt",
"multi-tab-split-table-checkbox-info": "Kun tämä asetus on käytössä, jokaiselle syötetiedostolle luodaan oma tulostaulukko. Muussa tapauksessa kaikki tulokset yhdistetään yhteen taulukkoon.",
"multi-tab-split-table-checkbox-label": "Jaa taulukot syötetiedoston mukaan",
"multi-tab-title": "Eräanalyysi",
"progress-analyzing": "Analysoidaan",
"progress-autotune": "Autoviritys käynnissä",
Expand Down Expand Up @@ -369,13 +371,13 @@
"training-tab-upsampling-radio-option-smote": "SMOTE",
"training-tab-upsampling-ratio-slider-info": "Vähemmistöluokan vähimmäissuhde enemmistöluokkaan verrattuna ylösnäytteistyksen jälkeen.",
"training-tab-upsampling-ratio-slider-label": "Ylösnäytteistyssuhde",
"training-tab-warning-detached-classifier-append": "Liitä-tila ei koske irrotettua luokitinta.",
"training-tab-use-focal-loss-checkbox-info": "Käyttää focal lossia koulutuksen aikana. Tämä antaa enemmän painoarvoa vaikeille esimerkeille ja auttaa käsittelemään luokkien epätasapainoa.",
"training-tab-use-focal-loss-checkbox-label": "Käytä focal lossia",
"training-tab-use-labelsmoothing-checkbox-info": "Soveltaa label smoothingia koulutuksen aikana. Tämä voi parantaa mallin yleistämistä estämällä mallia tulemasta liian itsevarmaksi.",
"training-tab-use-labelsmoothing-checkbox-label": "Käytä label smoothingia",
"training-tab-use-mixup-checkbox-info": "Sekoitus on datarikastusmenetelmä, joka luo uusia näytteitä yhdistämällä kaksi näytettä ja niiden leimaukset.",
"training-tab-use-mixup-checkbox-label": "Käytä sekoitusta",
"training-tab-warning-detached-classifier-append": "Liitä-tila ei koske irrotettua luokitinta.",
"validation-max-confidence-lower-than-min-confidence": "Enimmäisluotettavuuden on oltava suurempi kuin vähimmäisluotettavuus",
"validation-no-audio-directory-selected": "Äänihakemistoa ei ole valittu",
"validation-no-cache-file-selected": "Valitse välimuistitiedosto.",
Expand All @@ -390,4 +392,4 @@
"validation-no-valid-epoch-number": "Anna kelvollinen aikakausien määrä.",
"validation-no-valid-frequency": "Anna kelvollinen taajuus",
"validation-no-valid-learning-rate": "Anna kelvollinen oppimistahti."
}
}
6 changes: 4 additions & 2 deletions birdnet_analyzer/lang/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,8 @@
"multi-tab-samples-dataframe-column-duration-header": "Longueur",
"multi-tab-samples-dataframe-column-subpath-header": "Sous-chemin",
"multi-tab-samples-dataframe-no-files-found": "Aucun fichiers trouvés",
"multi-tab-split-table-checkbox-info": "Lorsqu'elle est activée, une table de résultats distincte est créée pour chaque fichier d'entrée. Sinon, tous les résultats sont regroupés dans une seule table.",
"multi-tab-split-table-checkbox-label": "Séparer les tables par fichier d'entrée",
"multi-tab-title": "Analyse par lots",
"progress-analyzing": "Analyse en cours",
"progress-autotune": "Autotune en progression",
Expand Down Expand Up @@ -369,13 +371,13 @@
"training-tab-upsampling-radio-option-smote": "SMOTE",
"training-tab-upsampling-ratio-slider-info": "Le ratio minimum pour une classe minoritaire par rapport à la classe majoritaire après le rééchantillonnage.",
"training-tab-upsampling-ratio-slider-label": "Rapport de suréchantillonnage",
"training-tab-warning-detached-classifier-append": "Le mode d'ajout ne s'appliquera pas au classificateur détaché.",
"training-tab-use-focal-loss-checkbox-info": "Utilise la perte focale pendant l'entraînement. Cela donne plus de poids aux exemples difficiles et aide à gérer le déséquilibre des classes.",
"training-tab-use-focal-loss-checkbox-label": "Utiliser la perte focale",
"training-tab-use-labelsmoothing-checkbox-info": "Applique le lissage des étiquettes pendant l'entraînement. Cela peut améliorer la généralisation du modèle en empêchant le modèle de devenir trop confiant.",
"training-tab-use-labelsmoothing-checkbox-label": "Utiliser le lissage des étiquettes",
"training-tab-use-mixup-checkbox-info": "Le mixage est une technique d'augmentation des données qui génère de nouveaux échantillons en mélangeant deux échantillons et leurs étiquettes.",
"training-tab-use-mixup-checkbox-label": "Utiliser le mixage",
"training-tab-warning-detached-classifier-append": "Le mode d'ajout ne s'appliquera pas au classificateur détaché.",
"validation-max-confidence-lower-than-min-confidence": "La confiance maximale doit être supérieure à la confiance minimale",
"validation-no-audio-directory-selected": "Aucun dossiers audio sélectionnés",
"validation-no-cache-file-selected": "Veuillez sélectionner un fichier cache.",
Expand All @@ -390,4 +392,4 @@
"validation-no-valid-epoch-number": "Veuillez saisir un nombre valide d'époques.",
"validation-no-valid-frequency": "Veuillez saisir une fréquence valide dans",
"validation-no-valid-learning-rate": "Veuillez saisir un taux d'apprentissage valide."
}
}
6 changes: 4 additions & 2 deletions birdnet_analyzer/lang/id.json
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,8 @@
"multi-tab-samples-dataframe-column-duration-header": "Panjang",
"multi-tab-samples-dataframe-column-subpath-header": "Subjalur",
"multi-tab-samples-dataframe-no-files-found": "Tidak ada file yang ditemukan",
"multi-tab-split-table-checkbox-info": "Kun tämä asetus on käytössä, jokaiselle syötetiedostolle luodaan oma tulostaulukko. Muussa tapauksessa kaikki tulokset yhdistetään yhteen taulukkoon.",
"multi-tab-split-table-checkbox-label": "Jaa taulukot syötetiedoston mukaan",
Comment on lines +183 to +184
"multi-tab-title": "Analisis batch",
"progress-analyzing": "Menganalisis",
"progress-autotune": "Autotune dalam progres",
Expand Down Expand Up @@ -369,13 +371,13 @@
"training-tab-upsampling-radio-option-smote": "SMOTE",
"training-tab-upsampling-ratio-slider-info": "Rasio minimum untuk kelas minoritas dibandingkan dengan kelas mayoritas setelah peningkatan sampel.",
"training-tab-upsampling-ratio-slider-label": "Rasio peningkatan sampel",
"training-tab-warning-detached-classifier-append": "Mode tambah tidak akan berlaku untuk pengklasifikasi terlepas.",
"training-tab-use-focal-loss-checkbox-info": "Menggunakan focal loss selama pelatihan. Ini memberikan bobot lebih pada contoh yang sulit dan membantu menangani ketidakseimbangan kelas.",
"training-tab-use-focal-loss-checkbox-label": "Gunakan focal loss",
"training-tab-use-labelsmoothing-checkbox-info": "Menerapkan label smoothing selama pelatihan. Ini dapat membantu meningkatkan generalisasi model dengan mencegah model menjadi terlalu percaya diri.",
"training-tab-use-labelsmoothing-checkbox-label": "Gunakan label smoothing",
"training-tab-use-mixup-checkbox-info": "Mixup adalah teknik augmentasi data yang menghasilkan sampel baru dengan mencampurkan dua sampel dan labelnya.",
"training-tab-use-mixup-checkbox-label": "Gunakan mixup",
"training-tab-warning-detached-classifier-append": "Mode tambah tidak akan berlaku untuk pengklasifikasi terlepas.",
"validation-max-confidence-lower-than-min-confidence": "Kepercayaan maksimum harus lebih besar dari kepercayaan minimum",
"validation-no-audio-directory-selected": "Tidak ada audio direktori yang dipilih",
"validation-no-cache-file-selected": "Silakan pilih berkas cache.",
Expand All @@ -390,4 +392,4 @@
"validation-no-valid-epoch-number": "Silakan masukkan jumlah epochs yang valid.",
"validation-no-valid-frequency": "Silakan masukkan frekuensi yang valid dalam",
"validation-no-valid-learning-rate": "Silakan masukkan laju pembelajaran yang valid."
}
}
Loading
Loading