Skip to content

Commit

Permalink
Optional spectrogram (#519)
Browse files Browse the repository at this point in the history
* use gr.Group more

* make spectrogram optional
  • Loading branch information
Josef-Haupt authored Dec 2, 2024
1 parent cdb4d39 commit 0e5aca0
Show file tree
Hide file tree
Showing 11 changed files with 126 additions and 99 deletions.
37 changes: 19 additions & 18 deletions birdnet_analyzer/gui/multi_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,28 +140,29 @@ def select_directory_wrapper(): # Nishant - Function modified for For Folder se
) = gu.species_lists()

with gr.Accordion(loc.localize("multi-tab-output-accordion-label"), open=True):
output_type_radio = gr.CheckboxGroup(
list(OUTPUT_TYPE_MAP.items()),
value="table",
label=loc.localize("multi-tab-output-radio-label"),
info=loc.localize("multi-tab-output-radio-info"),
)
with gr.Group():
output_type_radio = gr.CheckboxGroup(
list(OUTPUT_TYPE_MAP.items()),
value="table",
label=loc.localize("multi-tab-output-radio-label"),
info=loc.localize("multi-tab-output-radio-info"),
)

with gr.Row():
with gr.Column():
combine_tables_checkbox = gr.Checkbox(
False,
label=loc.localize("multi-tab-output-combine-tables-checkbox-label"),
info=loc.localize("multi-tab-output-combine-tables-checkbox-info"),
)

with gr.Row():
with gr.Column():
combine_tables_checkbox = gr.Checkbox(
with gr.Row():
skip_existing_checkbox = gr.Checkbox(
False,
label=loc.localize("multi-tab-output-combine-tables-checkbox-label"),
info=loc.localize("multi-tab-output-combine-tables-checkbox-info"),
label=loc.localize("multi-tab-skip-existing-checkbox-label"),
info=loc.localize("multi-tab-skip-existing-checkbox-info"),
)

with gr.Row():
skip_existing_checkbox = gr.Checkbox(
False,
label=loc.localize("multi-tab-skip-existing-checkbox-label"),
info=loc.localize("multi-tab-skip-existing-checkbox-info"),
)

with gr.Row():
batch_size_number = gr.Number(
precision=1,
Expand Down
5 changes: 3 additions & 2 deletions birdnet_analyzer/gui/review.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,9 @@ def create_log_plot(positives, negatives, fig_num=None):
undo_btn = gr.Button(loc.localize("review-tab-undo-button-label"))
positive_btn = gr.Button(loc.localize("review-tab-pos-button-label"))
negative_btn = gr.Button(loc.localize("review-tab-neg-button-label"))
review_audio = gr.Audio(type="filepath", sources=[], show_download_button=False, autoplay=True)
autoplay_checkbox = gr.Checkbox(True, label=loc.localize("review-tab-autoplay-checkbox-label"))
with gr.Group():
review_audio = gr.Audio(type="filepath", sources=[], show_download_button=False, autoplay=True)
autoplay_checkbox = gr.Checkbox(True, label=loc.localize("review-tab-autoplay-checkbox-label"))

no_samles_label = gr.Label(loc.localize("review-tab-no-files-label"), visible=False)
species_regression_plot = gr.Plot(label=loc.localize("review-tab-regression-plot-label"))
Expand Down
23 changes: 19 additions & 4 deletions birdnet_analyzer/gui/single_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,9 @@ def runSingleFileAnalysis(
def build_single_analysis_tab():
with gr.Tab(loc.localize("single-tab-title")):
audio_input = gr.Audio(type="filepath", label=loc.localize("single-audio-label"), sources=["upload"])
spectogram_output = gr.Plot(label=loc.localize("review-tab-spectrogram-plot-label"), visible=False)
with gr.Group():
spectogram_output = gr.Plot(label=loc.localize("review-tab-spectrogram-plot-label"), visible=False)
generate_spectrogram_cb = gr.Checkbox(value=True, label=loc.localize("single-tab-spectrogram-checkbox-label"), info="Potentially slow for long audio files.")
audio_path_state = gr.State()

confidence_slider, sensitivity_slider, overlap_slider, fmin_number, fmax_number = gu.sample_sliders(False)
Expand All @@ -100,19 +102,32 @@ def build_single_analysis_tab():
) = gu.species_lists(False)
locale_radio = gu.locale()

def get_audio_path(i):
def get_audio_path(i, generate_spectrogram):
if i:
return (
i["path"],
gr.Audio(label=os.path.basename(i["path"])),
gr.Plot(visible=True, value=utils.spectrogram_from_file(i["path"], fig_size="auto")),
gr.Plot(visible=True, value=utils.spectrogram_from_file(i["path"], fig_size="auto")) if generate_spectrogram else gr.Plot(visible=False),
)
else:
return None, None, gr.Plot(visible=False)

def try_generate_spectrogram(audio_path, generate_spectrogram):
if audio_path and generate_spectrogram:
return gr.Plot(visible=True, value=utils.spectrogram_from_file(audio_path["path"], fig_size="auto"))
else:
return gr.Plot()

generate_spectrogram_cb.change(
try_generate_spectrogram,
inputs=[audio_input, generate_spectrogram_cb],
outputs=spectogram_output,
preprocess=False,
)

audio_input.change(
get_audio_path,
inputs=audio_input,
inputs=[audio_input, generate_spectrogram_cb],
outputs=[audio_path_state, audio_input, spectogram_output],
preprocess=False,
)
Expand Down
153 changes: 78 additions & 75 deletions birdnet_analyzer/gui/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,46 +234,47 @@ def sample_sliders(opened=True):
(Slider (min confidence), Slider (sensitivity), Slider (overlap))
"""
with gr.Accordion(loc.localize("inference-settings-accordion-label"), open=opened):
with gr.Row():
confidence_slider = gr.Slider(
minimum=0,
maximum=1,
value=0.5,
step=0.01,
label=loc.localize("inference-settings-confidence-slider-label"),
info=loc.localize("inference-settings-confidence-slider-info"),
)
sensitivity_slider = gr.Slider(
minimum=0.5,
maximum=1.5,
value=1,
step=0.01,
label=loc.localize("inference-settings-sensitivity-slider-label"),
info=loc.localize("inference-settings-sensitivity-slider-info"),
)
overlap_slider = gr.Slider(
minimum=0,
maximum=2.99,
value=0,
step=0.01,
label=loc.localize("inference-settings-overlap-slider-label"),
info=loc.localize("inference-settings-overlap-slider-info"),
)
with gr.Group():
with gr.Row():
confidence_slider = gr.Slider(
minimum=0,
maximum=1,
value=0.5,
step=0.01,
label=loc.localize("inference-settings-confidence-slider-label"),
info=loc.localize("inference-settings-confidence-slider-info"),
)
sensitivity_slider = gr.Slider(
minimum=0.5,
maximum=1.5,
value=1,
step=0.01,
label=loc.localize("inference-settings-sensitivity-slider-label"),
info=loc.localize("inference-settings-sensitivity-slider-info"),
)
overlap_slider = gr.Slider(
minimum=0,
maximum=2.99,
value=0,
step=0.01,
label=loc.localize("inference-settings-overlap-slider-label"),
info=loc.localize("inference-settings-overlap-slider-info"),
)

with gr.Row():
fmin_number = gr.Number(
cfg.SIG_FMIN,
minimum=0,
label=loc.localize("inference-settings-fmin-number-label"),
info=loc.localize("inference-settings-fmin-number-info"),
)
with gr.Row():
fmin_number = gr.Number(
cfg.SIG_FMIN,
minimum=0,
label=loc.localize("inference-settings-fmin-number-label"),
info=loc.localize("inference-settings-fmin-number-info"),
)

fmax_number = gr.Number(
cfg.SIG_FMAX,
minimum=0,
label=loc.localize("inference-settings-fmax-number-label"),
info=loc.localize("inference-settings-fmax-number-info"),
)
fmax_number = gr.Number(
cfg.SIG_FMAX,
minimum=0,
label=loc.localize("inference-settings-fmax-number-label"),
info=loc.localize("inference-settings-fmax-number-info"),
)

return confidence_slider, sensitivity_slider, overlap_slider, fmin_number, fmax_number

Expand All @@ -298,46 +299,48 @@ def locale():


def species_list_coordinates():
lat_number = gr.Slider(
minimum=-90,
maximum=90,
value=0,
step=1,
label=loc.localize("species-list-coordinates-lat-number-label"),
info=loc.localize("species-list-coordinates-lat-number-info"),
)
lon_number = gr.Slider(
minimum=-180,
maximum=180,
value=0,
step=1,
label=loc.localize("species-list-coordinates-lon-number-label"),
info=loc.localize("species-list-coordinates-lon-number-info"),
)
with gr.Row():
yearlong_checkbox = gr.Checkbox(True, label=loc.localize("species-list-coordinates-yearlong-checkbox-label"))
week_number = gr.Slider(
minimum=1,
maximum=48,
value=1,
with gr.Group():
lat_number = gr.Slider(
minimum=-90,
maximum=90,
value=0,
step=1,
interactive=False,
label=loc.localize("species-list-coordinates-week-slider-label"),
info=loc.localize("species-list-coordinates-week-slider-info"),
label=loc.localize("species-list-coordinates-lat-number-label"),
info=loc.localize("species-list-coordinates-lat-number-info"),
)
lon_number = gr.Slider(
minimum=-180,
maximum=180,
value=0,
step=1,
label=loc.localize("species-list-coordinates-lon-number-label"),
info=loc.localize("species-list-coordinates-lon-number-info"),
)
with gr.Row():
yearlong_checkbox = gr.Checkbox(True, label=loc.localize("species-list-coordinates-yearlong-checkbox-label"))
week_number = gr.Slider(
minimum=1,
maximum=48,
value=1,
step=1,
interactive=False,
label=loc.localize("species-list-coordinates-week-slider-label"),
info=loc.localize("species-list-coordinates-week-slider-info"),
)

def onChange(use_yearlong):
return gr.Slider(interactive=(not use_yearlong))

yearlong_checkbox.change(onChange, inputs=yearlong_checkbox, outputs=week_number, show_progress=False)
sf_thresh_number = gr.Slider(
minimum=0.01,
maximum=0.99,
value=0.03,
step=0.01,
label=loc.localize("species-list-coordinates-threshold-slider-label"),
info=loc.localize("species-list-coordinates-threshold-slider-info"),
)
sf_thresh_number = gr.Slider(
minimum=0.01,
maximum=0.99,
value=0.03,
step=0.01,
label=loc.localize("species-list-coordinates-threshold-slider-label"),
info=loc.localize("species-list-coordinates-threshold-slider-info"),
)
def onChange(use_yearlong):
return gr.Slider(interactive=(not use_yearlong))

yearlong_checkbox.change(onChange, inputs=yearlong_checkbox, outputs=week_number, show_progress=False)


return lat_number, lon_number, week_number, sf_thresh_number, yearlong_checkbox

Expand Down
1 change: 1 addition & 0 deletions birdnet_analyzer/lang/de.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"single-tab-title": "Einzelanalyse",
"single-audio-label": "Datei",
"single-tab-spectrogram-checkbox-label": "Spektrogramm generieren",
"single-tab-output-header-start": "Start",
"single-tab-output-header-end": "Ende",
"single-tab-output-header-sci-name": "Wissenschaftlicher Name",
Expand Down
1 change: 1 addition & 0 deletions birdnet_analyzer/lang/en.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"single-tab-title": "Single analysis",
"single-audio-label": "file",
"single-tab-spectrogram-checkbox-label": "Generate spectrogram",
"single-tab-output-header-start": "Start",
"single-tab-output-header-end": "End",
"single-tab-output-header-sci-name": "Scientific name",
Expand Down
1 change: 1 addition & 0 deletions birdnet_analyzer/lang/fr.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"single-tab-title": "Analyse rapide",
"single-audio-label": "fichier",
"single-tab-spectrogram-checkbox-label": "Générer le spectrogramme",
"single-tab-output-header-start": "Commencer",
"single-tab-output-header-end": "Arrêter",
"single-tab-output-header-sci-name": "Nom scientifique",
Expand Down
1 change: 1 addition & 0 deletions birdnet_analyzer/lang/pt-br.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"single-tab-title": "Análise Individual",
"single-audio-label": "arquivo",
"single-tab-spectrogram-checkbox-label": "Gerar espectrograma",
"single-tab-output-header-start": "Início",
"single-tab-output-header-end": "Fim",
"single-tab-output-header-sci-name": "Nome científico",
Expand Down
1 change: 1 addition & 0 deletions birdnet_analyzer/lang/ru.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"single-tab-title": "Одиночный анализ",
"single-audio-label": "файл",
"single-tab-spectrogram-checkbox-label": "Генерирование спектрограммы",
"single-tab-output-header-start": "Старт (сек)",
"single-tab-output-header-end": "Конец (сек)",
"single-tab-output-header-sci-name": "Научное название",
Expand Down
1 change: 1 addition & 0 deletions birdnet_analyzer/lang/tlh.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"single-tab-title": "wa' poj",
"single-audio-label": "De' wav",
"single-tab-spectrogram-checkbox-label": "nuvmey vItlhutlh",
"single-tab-output-header-start": "Tagh (s)",
"single-tab-output-header-end": "Dor (s)",
"single-tab-output-header-sci-name": "Hol qonwI' pong",
Expand Down
1 change: 1 addition & 0 deletions birdnet_analyzer/lang/zh_TW.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"single-tab-title": "單筆音檔",
"single-audio-label": "檔案",
"single-tab-spectrogram-checkbox-label": "產生頻譜圖",
"single-tab-output-header-start": "開始",
"single-tab-output-header-end": "結束",
"single-tab-output-header-sci-name": "學名",
Expand Down

0 comments on commit 0e5aca0

Please sign in to comment.