Skip to content

Commit c2c52fb

Browse files
authored
Updated result view (#830)
* Updated result view for batch analysis * remove old keys
1 parent f5c1f58 commit c2c52fb

14 files changed

Lines changed: 72 additions & 25 deletions

File tree

birdnet_analyzer/analyze/utils.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ def combine_csv_files(saved_results: list[str]):
441441
f.write(out_string)
442442

443443

444-
def combine_results(saved_results: Sequence[dict[str, str] | None]):
444+
def combine_results(saved_results: Sequence[dict[str, str] | str]):
445445
"""
446446
Combines various types of result files based on the configuration settings.
447447
This function checks the types of results specified in the configuration
@@ -456,13 +456,13 @@ def combine_results(saved_results: Sequence[dict[str, str] | None]):
456456
None
457457
"""
458458
if "table" in cfg.RESULT_TYPES:
459-
combine_raven_tables([f["table"] for f in saved_results if f])
459+
combine_raven_tables([f["table"] for f in saved_results if isinstance(f, dict)])
460460

461461
if "kaleidoscope" in cfg.RESULT_TYPES:
462-
combine_kaleidoscope_files([f["kaleidoscope"] for f in saved_results if f])
462+
combine_kaleidoscope_files([f["kaleidoscope"] for f in saved_results if isinstance(f, dict)])
463463

464464
if "csv" in cfg.RESULT_TYPES:
465-
combine_csv_files([f["csv"] for f in saved_results if f])
465+
combine_csv_files([f["csv"] for f in saved_results if isinstance(f, dict)])
466466

467467

468468
def merge_consecutive_detections(
@@ -761,8 +761,9 @@ def analyze_file(item) -> dict[str, str] | None:
761761
# Write error log
762762
print(f"Error: Cannot analyze audio file {fpath}.\n", flush=True)
763763
utils.write_error_log(ex)
764+
msg = str(ex)
764765

765-
return None
766+
return msg or repr(ex).strip("()")
766767

767768
# Save as selection table
768769
try:
@@ -773,7 +774,7 @@ def analyze_file(item) -> dict[str, str] | None:
773774
print(f"Error: Cannot save result for {fpath}.\n", flush=True)
774775
utils.write_error_log(ex)
775776

776-
return None
777+
return str(ex)
777778

778779
delta_time = (datetime.datetime.now() - start_time).total_seconds()
779780
print(f"Finished {fpath} in {delta_time:.2f} seconds", flush=True)

birdnet_analyzer/gui/analysis.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,4 +173,10 @@ def run_analysis(
173173
if save_params:
174174
save_analysis_params(os.path.join(cfg.OUTPUT_PATH, cfg.ANALYSIS_PARAMS_FILENAME))
175175

176-
return [[os.path.relpath(r[0], input_dir), bool(r[1])] for r in result_list] if input_dir else result_list[0][1]["csv"] if result_list[0][1] else None
176+
return (
177+
[[os.path.relpath(r[0], input_dir), r[1] if isinstance(r[1], str) else None] for r in result_list]
178+
if input_dir
179+
else result_list[0][1]["csv"]
180+
if isinstance(result_list[0][1], dict)
181+
else [result_list[0][1]]
182+
)

birdnet_analyzer/gui/multi_file.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,21 @@ def run_batch_analysis(
9898
progress,
9999
)
100100

101-
return [path for path, successful in results if not successful]
101+
def map_to_reason(result):
102+
match result:
103+
case "NoBackendError":
104+
return loc.localize("multi-tab-file-error-nobackend")
105+
case _:
106+
return result
107+
108+
skipped_files = [[path, map_to_reason(successful)] for path, successful in results if isinstance(successful, str)]
109+
header = (
110+
[loc.localize("multi-tab-result-dataframe-column-invalid-file-header"), loc.localize("multi-tab-result-dataframe-column-reason-header")]
111+
if skipped_files
112+
else [loc.localize("multi-tab-result-dataframe-column-success-header")]
113+
)
114+
115+
return gr.update(value=skipped_files, headers=header, col_count=2 if skipped_files else 1, elem_classes=None if skipped_files else "success")
102116

103117

104118
def build_multi_analysis_tab():
@@ -198,11 +212,7 @@ def select_directory_wrapper(): # Nishant - Function modified for For Folder se
198212

199213
start_batch_analysis_btn = gr.Button(loc.localize("analyze-start-button-label"), variant="huggingface")
200214

201-
result_grid = gr.Matrix(
202-
headers=[
203-
loc.localize("multi-tab-result-dataframe-column-file-header"),
204-
],
205-
)
215+
result_grid = gr.Matrix(headers=[""], col_count=1)
206216

207217
inputs = [
208218
output_directory_predict_state,

birdnet_analyzer/gui/single_file.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ def run_single_file_analysis(
7979
progress=None,
8080
)
8181

82-
if not result_filepath:
83-
raise gr.Error(loc.localize("single-tab-analyze-file-error"))
82+
if isinstance(result_filepath, list):
83+
raise gr.Error(loc.localize("single-tab-analyze-file-error") + f": {result_filepath[0]}")
8484

8585
# read the result file to return the data to be displayed.
8686
with open(result_filepath, encoding="utf-8") as f:

birdnet_analyzer/lang/de.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@
145145
"multi-tab-additional-columns-checkbox-label": "Zusätzliche Spalten für CSV",
146146
"multi-tab-batchsize-number-info": "Anzahl der gleichzeitig zu verarbeitenden Proben.",
147147
"multi-tab-batchsize-number-label": "Batch-Größe",
148+
"multi-tab-file-error-nobackend": "Format nicht erkannt",
148149
"multi-tab-input-selection-button-label": "Eingabeverzeichnis auswählen (rekursiv)",
149150
"multi-tab-output-accordion-label": "Ausgabeeinstellungen",
150151
"multi-tab-output-combine-tables-checkbox-info": "Aktivieren Sie diese Option, um alle Auswahltabellen in eine einzige Tabelle zusammenzuführen.",
@@ -156,7 +157,9 @@
156157
"multi-tab-output-selection-button-label": "Ausgabeverzeichnis auswählen",
157158
"multi-tab-output-textbox-label": "Ausgabeverzeichnis",
158159
"multi-tab-output-textbox-placeholder": "Wenn nicht ausgewählt, wird das Eingabeverzeichnis verwendet.",
159-
"multi-tab-result-dataframe-column-file-header": "Ungültige Audiodateien",
160+
"multi-tab-result-dataframe-column-invalid-file-header": "Ungültige Audiodateien",
161+
"multi-tab-result-dataframe-column-reason-header": "Grund",
162+
"multi-tab-result-dataframe-column-success-header": "Alle Dateien wurden analysiert!",
160163
"multi-tab-samples-dataframe-column-duration-header": "Länge",
161164
"multi-tab-samples-dataframe-column-subpath-header": "Unterpfad",
162165
"multi-tab-samples-dataframe-no-files-found": "Keine Dateien gefunden",

birdnet_analyzer/lang/en.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@
145145
"multi-tab-additional-columns-checkbox-label": "Additional columns for CSV",
146146
"multi-tab-batchsize-number-info": "Number of samples to process at the same time.",
147147
"multi-tab-batchsize-number-label": "Batch size",
148+
"multi-tab-file-error-nobackend": "Format not recognized",
148149
"multi-tab-input-selection-button-label": "Select input directory (recursive)",
149150
"multi-tab-output-accordion-label": "Output settings",
150151
"multi-tab-output-combine-tables-checkbox-info": "Check this option to merge all selection tables into a single table.",
@@ -156,7 +157,9 @@
156157
"multi-tab-output-selection-button-label": "Select output directory",
157158
"multi-tab-output-textbox-label": "Output directory",
158159
"multi-tab-output-textbox-placeholder": "If not selected, the input directory will be used.",
159-
"multi-tab-result-dataframe-column-file-header": "Invalid audio files",
160+
"multi-tab-result-dataframe-column-invalid-file-header": "Invalid audio files",
161+
"multi-tab-result-dataframe-column-reason-header": "Reason",
162+
"multi-tab-result-dataframe-column-success-header": "All files analyzed!",
160163
"multi-tab-samples-dataframe-column-duration-header": "Length",
161164
"multi-tab-samples-dataframe-column-subpath-header": "Subpath",
162165
"multi-tab-samples-dataframe-no-files-found": "No files found",

birdnet_analyzer/lang/fi.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@
145145
"multi-tab-additional-columns-checkbox-label": "Lisäsarakkeet CSV:lle",
146146
"multi-tab-batchsize-number-info": "Kerralla käsiteltävien näytteiden määrä.",
147147
"multi-tab-batchsize-number-label": "Eräkoko",
148+
"multi-tab-file-error-nobackend": "Muotoa ei tunnistettu",
148149
"multi-tab-input-selection-button-label": "Valitse syötehakemisto (rekursiivinen)",
149150
"multi-tab-output-accordion-label": "Tulosteasetukset",
150151
"multi-tab-output-combine-tables-checkbox-info": "Valitse tämä yhdistääksesi kaikki valintataulukot yhdeksi taulukoksi.",
@@ -156,7 +157,9 @@
156157
"multi-tab-output-selection-button-label": "Valitse tulostehakemisto",
157158
"multi-tab-output-textbox-label": "Tulostehakemisto",
158159
"multi-tab-output-textbox-placeholder": "Jos ei valittu, käytetään syötehakemistoa.",
159-
"multi-tab-result-dataframe-column-file-header": "Virheelliset äänitiedostot",
160+
"multi-tab-result-dataframe-column-invalid-file-header": "Virheelliset äänitiedostot",
161+
"multi-tab-result-dataframe-column-reason-header": "Syy",
162+
"multi-tab-result-dataframe-column-success-header": "Kaikki tiedostot analysoitu!",
160163
"multi-tab-samples-dataframe-column-duration-header": "Pituus",
161164
"multi-tab-samples-dataframe-column-subpath-header": "Alihakemisto",
162165
"multi-tab-samples-dataframe-no-files-found": "Tiedostoja ei löytynyt",

birdnet_analyzer/lang/fr.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@
145145
"multi-tab-additional-columns-checkbox-label": "Colonnes supplémentaires pour CSV",
146146
"multi-tab-batchsize-number-info": "Nombre d'échantillons à traiter en même temps.",
147147
"multi-tab-batchsize-number-label": "Taille du lot",
148+
"multi-tab-file-error-nobackend": "Format non reconnu",
148149
"multi-tab-input-selection-button-label": "Sélection du répertoire d'entrée (récursif)",
149150
"multi-tab-output-accordion-label": "Paramètres de sortie",
150151
"multi-tab-output-combine-tables-checkbox-info": "Cochez cette option pour fusionner tous les tableaux de sélection en un seul tableau.",
@@ -156,7 +157,9 @@
156157
"multi-tab-output-selection-button-label": "Sélectionner le répertoire de sortie",
157158
"multi-tab-output-textbox-label": "Répertoire de sortie",
158159
"multi-tab-output-textbox-placeholder": "S'il n'est pas sélectionné, le répertoire d'entrée sera utilisé.",
159-
"multi-tab-result-dataframe-column-file-header": "Fichiers audio non valides",
160+
"multi-tab-result-dataframe-column-invalid-file-header": "Fichiers audio non valides",
161+
"multi-tab-result-dataframe-column-reason-header": "Raison",
162+
"multi-tab-result-dataframe-column-success-header": "Tous les fichiers ont été analysés !",
160163
"multi-tab-samples-dataframe-column-duration-header": "Longueur",
161164
"multi-tab-samples-dataframe-column-subpath-header": "Sous-chemin",
162165
"multi-tab-samples-dataframe-no-files-found": "Aucun fichiers trouvés",

birdnet_analyzer/lang/id.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@
145145
"multi-tab-additional-columns-checkbox-label": "Kolom tambahan untuk CSV",
146146
"multi-tab-batchsize-number-info": "Jumlah sampel yang diproses sekaligus.",
147147
"multi-tab-batchsize-number-label": "Ukuran batch",
148+
"multi-tab-file-error-nobackend": "Format tidak dikenali",
148149
"multi-tab-input-selection-button-label": "Pilih direktori input (rekursif)",
149150
"multi-tab-output-accordion-label": "Pengaturan output",
150151
"multi-tab-output-combine-tables-checkbox-info": "Centang opsi ini untuk menggabungkan semua tabel seleksi menjadi satu tabel.",
@@ -156,7 +157,9 @@
156157
"multi-tab-output-selection-button-label": "Pilih direktori output",
157158
"multi-tab-output-textbox-label": "Direktori output",
158159
"multi-tab-output-textbox-placeholder": "Jika tidak dipilih, direktori input akan digunakan.",
159-
"multi-tab-result-dataframe-column-file-header": "Berkas audio yang tidak valid",
160+
"multi-tab-result-dataframe-column-invalid-file-header": "File audio tidak valid",
161+
"multi-tab-result-dataframe-column-reason-header": "Alasan",
162+
"multi-tab-result-dataframe-column-success-header": "Semua file telah dianalisis!",
160163
"multi-tab-samples-dataframe-column-duration-header": "Panjang",
161164
"multi-tab-samples-dataframe-column-subpath-header": "Subpath",
162165
"multi-tab-samples-dataframe-no-files-found": "Tidak ada file yang ditemukan",

birdnet_analyzer/lang/pt-br.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@
145145
"multi-tab-additional-columns-checkbox-label": "Colunas adicionais para CSV",
146146
"multi-tab-batchsize-number-info": "Número de amostras a serem processadas ao mesmo tempo.",
147147
"multi-tab-batchsize-number-label": "Tamanho do lote (Batch size)",
148+
"multi-tab-file-error-nobackend": "Formato não reconhecido",
148149
"multi-tab-input-selection-button-label": "Selecione o diretório de entrada (recursivo)",
149150
"multi-tab-output-accordion-label": "Configurações de saída",
150151
"multi-tab-output-combine-tables-checkbox-info": "Marque esta opção para unir todas as tabelas de seleção em uma única tabela.",
@@ -156,7 +157,9 @@
156157
"multi-tab-output-selection-button-label": "Selecione o diretório de saída",
157158
"multi-tab-output-textbox-label": "Diretório de saída",
158159
"multi-tab-output-textbox-placeholder": "Se não for selecionado, o diretório de entrada será usado.",
159-
"multi-tab-result-dataframe-column-file-header": "Arquivos de áudio inválidos",
160+
"multi-tab-result-dataframe-column-invalid-file-header": "Arquivos de áudio inválidos",
161+
"multi-tab-result-dataframe-column-reason-header": "Motivo",
162+
"multi-tab-result-dataframe-column-success-header": "Todos os arquivos foram analisados!",
160163
"multi-tab-samples-dataframe-column-duration-header": "Duração",
161164
"multi-tab-samples-dataframe-column-subpath-header": "Subcaminho",
162165
"multi-tab-samples-dataframe-no-files-found": "Nenhum arquivo encontrado",

0 commit comments

Comments
 (0)