birdnet-analyzer 2.0.1__py3-none-any.whl → 2.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- birdnet_analyzer/__init__.py +9 -9
- birdnet_analyzer/analyze/__init__.py +19 -5
- birdnet_analyzer/analyze/__main__.py +3 -3
- birdnet_analyzer/analyze/cli.py +30 -25
- birdnet_analyzer/analyze/core.py +268 -241
- birdnet_analyzer/analyze/utils.py +700 -692
- birdnet_analyzer/audio.py +368 -368
- birdnet_analyzer/cli.py +732 -709
- birdnet_analyzer/config.py +243 -242
- birdnet_analyzer/eBird_taxonomy_codes_2024E.json +13046 -0
- birdnet_analyzer/embeddings/__init__.py +3 -3
- birdnet_analyzer/embeddings/__main__.py +3 -3
- birdnet_analyzer/embeddings/cli.py +12 -12
- birdnet_analyzer/embeddings/core.py +70 -69
- birdnet_analyzer/embeddings/utils.py +173 -179
- birdnet_analyzer/evaluation/__init__.py +189 -196
- birdnet_analyzer/evaluation/__main__.py +3 -3
- birdnet_analyzer/evaluation/assessment/metrics.py +388 -388
- birdnet_analyzer/evaluation/assessment/performance_assessor.py +364 -409
- birdnet_analyzer/evaluation/assessment/plotting.py +378 -379
- birdnet_analyzer/evaluation/preprocessing/data_processor.py +631 -631
- birdnet_analyzer/evaluation/preprocessing/utils.py +98 -98
- birdnet_analyzer/gui/__init__.py +19 -19
- birdnet_analyzer/gui/__main__.py +3 -3
- birdnet_analyzer/gui/analysis.py +179 -175
- birdnet_analyzer/gui/assets/arrow_down.svg +4 -4
- birdnet_analyzer/gui/assets/arrow_left.svg +4 -4
- birdnet_analyzer/gui/assets/arrow_right.svg +4 -4
- birdnet_analyzer/gui/assets/arrow_up.svg +4 -4
- birdnet_analyzer/gui/assets/gui.css +36 -28
- birdnet_analyzer/gui/assets/gui.js +89 -93
- birdnet_analyzer/gui/embeddings.py +638 -619
- birdnet_analyzer/gui/evaluation.py +801 -795
- birdnet_analyzer/gui/localization.py +75 -75
- birdnet_analyzer/gui/multi_file.py +265 -245
- birdnet_analyzer/gui/review.py +472 -519
- birdnet_analyzer/gui/segments.py +191 -191
- birdnet_analyzer/gui/settings.py +149 -128
- birdnet_analyzer/gui/single_file.py +264 -267
- birdnet_analyzer/gui/species.py +95 -95
- birdnet_analyzer/gui/train.py +687 -696
- birdnet_analyzer/gui/utils.py +803 -810
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_af.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_ar.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_bg.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_ca.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_cs.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_da.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_de.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_el.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_en_uk.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_es.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_fi.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_fr.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_he.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_hr.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_hu.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_in.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_is.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_it.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_ja.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_ko.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_lt.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_ml.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_nl.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_no.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_pl.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_pt_BR.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_pt_PT.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_ro.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_ru.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_sk.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_sl.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_sr.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_sv.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_th.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_tr.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_uk.txt +6522 -6522
- birdnet_analyzer/labels/V2.4/BirdNET_GLOBAL_6K_V2.4_Labels_zh.txt +6522 -6522
- birdnet_analyzer/lang/de.json +342 -334
- birdnet_analyzer/lang/en.json +342 -334
- birdnet_analyzer/lang/fi.json +342 -334
- birdnet_analyzer/lang/fr.json +342 -334
- birdnet_analyzer/lang/id.json +342 -334
- birdnet_analyzer/lang/pt-br.json +342 -334
- birdnet_analyzer/lang/ru.json +342 -334
- birdnet_analyzer/lang/se.json +342 -334
- birdnet_analyzer/lang/tlh.json +342 -334
- birdnet_analyzer/lang/zh_TW.json +342 -334
- birdnet_analyzer/model.py +1213 -1212
- birdnet_analyzer/search/__init__.py +3 -3
- birdnet_analyzer/search/__main__.py +3 -3
- birdnet_analyzer/search/cli.py +11 -11
- birdnet_analyzer/search/core.py +78 -78
- birdnet_analyzer/search/utils.py +104 -107
- birdnet_analyzer/segments/__init__.py +3 -3
- birdnet_analyzer/segments/__main__.py +3 -3
- birdnet_analyzer/segments/cli.py +13 -13
- birdnet_analyzer/segments/core.py +81 -81
- birdnet_analyzer/segments/utils.py +383 -383
- birdnet_analyzer/species/__init__.py +3 -3
- birdnet_analyzer/species/__main__.py +3 -3
- birdnet_analyzer/species/cli.py +13 -13
- birdnet_analyzer/species/core.py +35 -35
- birdnet_analyzer/species/utils.py +73 -74
- birdnet_analyzer/train/__init__.py +3 -3
- birdnet_analyzer/train/__main__.py +3 -3
- birdnet_analyzer/train/cli.py +13 -13
- birdnet_analyzer/train/core.py +113 -113
- birdnet_analyzer/train/utils.py +878 -877
- birdnet_analyzer/translate.py +132 -133
- birdnet_analyzer/utils.py +425 -426
- {birdnet_analyzer-2.0.1.dist-info → birdnet_analyzer-2.1.1.dist-info}/METADATA +147 -137
- birdnet_analyzer-2.1.1.dist-info/RECORD +124 -0
- {birdnet_analyzer-2.0.1.dist-info → birdnet_analyzer-2.1.1.dist-info}/WHEEL +1 -1
- {birdnet_analyzer-2.0.1.dist-info → birdnet_analyzer-2.1.1.dist-info}/licenses/LICENSE +18 -18
- birdnet_analyzer/eBird_taxonomy_codes_2021E.json +0 -25280
- birdnet_analyzer/playground.py +0 -5
- birdnet_analyzer-2.0.1.dist-info/RECORD +0 -125
- {birdnet_analyzer-2.0.1.dist-info → birdnet_analyzer-2.1.1.dist-info}/entry_points.txt +0 -0
- {birdnet_analyzer-2.0.1.dist-info → birdnet_analyzer-2.1.1.dist-info}/top_level.txt +0 -0
@@ -1,29 +1,37 @@
|
|
1
|
-
footer {
|
2
|
-
display: none !important;
|
3
|
-
}
|
4
|
-
|
5
|
-
#single_file_audio,
|
6
|
-
#single_file_audio * {
|
7
|
-
max-height: 81.6px;
|
8
|
-
min-height: 0;
|
9
|
-
}
|
10
|
-
|
11
|
-
#update-available a {
|
12
|
-
text-decoration: none;
|
13
|
-
}
|
14
|
-
|
15
|
-
:root {
|
16
|
-
--block-title-text-color: var(--neutral-800);
|
17
|
-
--block-info-text-color: var(--neutral-500);
|
18
|
-
}
|
19
|
-
|
20
|
-
#single-file-output td:first-of-type span {
|
21
|
-
text-align: center;
|
22
|
-
}
|
23
|
-
|
24
|
-
#embeddings-search-results {
|
25
|
-
max-height: 1107px;
|
26
|
-
overflow: auto;
|
27
|
-
flex-wrap: nowrap;
|
28
|
-
padding-right: 5px;
|
1
|
+
footer {
|
2
|
+
display: none !important;
|
3
|
+
}
|
4
|
+
|
5
|
+
#single_file_audio,
|
6
|
+
#single_file_audio * {
|
7
|
+
max-height: 81.6px;
|
8
|
+
min-height: 0;
|
9
|
+
}
|
10
|
+
|
11
|
+
#update-available a {
|
12
|
+
text-decoration: none;
|
13
|
+
}
|
14
|
+
|
15
|
+
:root {
|
16
|
+
--block-title-text-color: var(--neutral-800);
|
17
|
+
--block-info-text-color: var(--neutral-500);
|
18
|
+
}
|
19
|
+
|
20
|
+
#single-file-output td:first-of-type span {
|
21
|
+
text-align: center;
|
22
|
+
}
|
23
|
+
|
24
|
+
#embeddings-search-results {
|
25
|
+
max-height: 1107px;
|
26
|
+
overflow: auto;
|
27
|
+
flex-wrap: nowrap;
|
28
|
+
padding-right: 5px;
|
29
|
+
}
|
30
|
+
|
31
|
+
#heart {
|
32
|
+
display: inline;
|
33
|
+
background-color: white;
|
34
|
+
border-radius: 3px;
|
35
|
+
margin-right: 3px;
|
36
|
+
padding: 1px;
|
29
37
|
}
|
@@ -1,94 +1,90 @@
|
|
1
|
-
function init() {
|
2
|
-
function checkForNewerVersion() {
|
3
|
-
let gui_version_element = document.getElementById("current-version")
|
4
|
-
|
5
|
-
if (gui_version_element && gui_version_element.textContent != "main") {
|
6
|
-
console.log("Checking for newer version...");
|
7
|
-
|
8
|
-
function sendGetRequest(url) {
|
9
|
-
return new Promise((resolve, reject) => {
|
10
|
-
const xhr = new XMLHttpRequest();
|
11
|
-
xhr.open("GET", url);
|
12
|
-
xhr.onload = () => {
|
13
|
-
if (xhr.status === 200) {
|
14
|
-
resolve(xhr.responseText);
|
15
|
-
} else {
|
16
|
-
reject(new Error(`Request failed with status ${xhr.status}`));
|
17
|
-
}
|
18
|
-
};
|
19
|
-
xhr.onerror = () => {
|
20
|
-
reject(new Error("Request failed"));
|
21
|
-
};
|
22
|
-
xhr.send();
|
23
|
-
});
|
24
|
-
}
|
25
|
-
|
26
|
-
const apiUrl = "https://api.github.com/repos/birdnet-team/BirdNET-Analyzer/releases/latest";
|
27
|
-
|
28
|
-
sendGetRequest(apiUrl)
|
29
|
-
.then(response => {
|
30
|
-
const current_version = document.getElementById("current-version").textContent;
|
31
|
-
const response_object = JSON.parse(response);
|
32
|
-
const latest_version = response_object.tag_name;
|
33
|
-
|
34
|
-
if (latest_version
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
document.
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
checkForNewerVersion();
|
92
|
-
overwriteStyles();
|
93
|
-
bindReviewKeyShortcuts();
|
1
|
+
function init() {
|
2
|
+
function checkForNewerVersion() {
|
3
|
+
let gui_version_element = document.getElementById("current-version")
|
4
|
+
|
5
|
+
if (gui_version_element && gui_version_element.textContent != "main") {
|
6
|
+
console.log("Checking for newer version...");
|
7
|
+
|
8
|
+
function sendGetRequest(url) {
|
9
|
+
return new Promise((resolve, reject) => {
|
10
|
+
const xhr = new XMLHttpRequest();
|
11
|
+
xhr.open("GET", url);
|
12
|
+
xhr.onload = () => {
|
13
|
+
if (xhr.status === 200) {
|
14
|
+
resolve(xhr.responseText);
|
15
|
+
} else {
|
16
|
+
reject(new Error(`Request failed with status ${xhr.status}`));
|
17
|
+
}
|
18
|
+
};
|
19
|
+
xhr.onerror = () => {
|
20
|
+
reject(new Error("Request failed"));
|
21
|
+
};
|
22
|
+
xhr.send();
|
23
|
+
});
|
24
|
+
}
|
25
|
+
|
26
|
+
const apiUrl = "https://api.github.com/repos/birdnet-team/BirdNET-Analyzer/releases/latest";
|
27
|
+
|
28
|
+
sendGetRequest(apiUrl)
|
29
|
+
.then(response => {
|
30
|
+
const current_version = document.getElementById("current-version").textContent;
|
31
|
+
const response_object = JSON.parse(response);
|
32
|
+
const latest_version = response_object.tag_name.replace(/^v/, '');
|
33
|
+
|
34
|
+
if (current_version !== latest_version) {
|
35
|
+
const updateNotification = document.getElementById("update-available");
|
36
|
+
|
37
|
+
updateNotification.style.display = "block";
|
38
|
+
const linkElement = updateNotification.getElementsByTagName("a")[0]
|
39
|
+
linkElement.href = response_object.html_url;
|
40
|
+
linkElement.target = "_blank";
|
41
|
+
}
|
42
|
+
})
|
43
|
+
.catch(error => {
|
44
|
+
console.error(error);
|
45
|
+
});
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
function overwriteStyles() {
|
50
|
+
console.log("Overwriting styles...");
|
51
|
+
const styles = document.createElement("style");
|
52
|
+
styles.innerHTML = "@media (width <= 1024px) { .app {max-width: initial !important;}}";
|
53
|
+
document.head.appendChild(styles);
|
54
|
+
}
|
55
|
+
|
56
|
+
function bindReviewKeyShortcuts() {
|
57
|
+
const posBtn = document.getElementById("positive-button");
|
58
|
+
const negBtn = document.getElementById("negative-button");
|
59
|
+
const skipBtn = document.getElementById("skip-button");
|
60
|
+
const undoBtn = document.getElementById("undo-button");
|
61
|
+
|
62
|
+
if (!posBtn || !negBtn) return;
|
63
|
+
|
64
|
+
console.log("Binding review key shortcuts...");
|
65
|
+
|
66
|
+
document.addEventListener("keydown", function (event) {
|
67
|
+
const reviewTabBtn = document.getElementById("review-tab-button");
|
68
|
+
|
69
|
+
if (reviewTabBtn.ariaSelected === "false") return;
|
70
|
+
|
71
|
+
if (event.key === "ArrowUp") {
|
72
|
+
event.preventDefault();
|
73
|
+
posBtn.click();
|
74
|
+
} else if (event.key === "ArrowDown") {
|
75
|
+
event.preventDefault();
|
76
|
+
negBtn.click();
|
77
|
+
} else if (event.key === "ArrowLeft") {
|
78
|
+
event.preventDefault();
|
79
|
+
undoBtn.click();
|
80
|
+
} else if (event.key === "ArrowRight") {
|
81
|
+
event.preventDefault();
|
82
|
+
skipBtn.click();
|
83
|
+
}
|
84
|
+
});
|
85
|
+
}
|
86
|
+
|
87
|
+
checkForNewerVersion();
|
88
|
+
overwriteStyles();
|
89
|
+
bindReviewKeyShortcuts();
|
94
90
|
}
|