megadetector 5.0.7__py3-none-any.whl → 5.0.9__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.
Potentially problematic release.
This version of megadetector might be problematic. Click here for more details.
- api/__init__.py +0 -0
- api/batch_processing/__init__.py +0 -0
- api/batch_processing/api_core/__init__.py +0 -0
- api/batch_processing/api_core/batch_service/__init__.py +0 -0
- api/batch_processing/api_core/batch_service/score.py +0 -1
- api/batch_processing/api_core/server_job_status_table.py +0 -1
- api/batch_processing/api_core_support/__init__.py +0 -0
- api/batch_processing/api_core_support/aggregate_results_manually.py +0 -1
- api/batch_processing/api_support/__init__.py +0 -0
- api/batch_processing/api_support/summarize_daily_activity.py +0 -1
- api/batch_processing/data_preparation/__init__.py +0 -0
- api/batch_processing/data_preparation/manage_local_batch.py +93 -79
- api/batch_processing/data_preparation/manage_video_batch.py +8 -8
- api/batch_processing/integration/digiKam/xmp_integration.py +0 -1
- api/batch_processing/integration/eMammal/test_scripts/push_annotations_to_emammal.py +0 -1
- api/batch_processing/postprocessing/__init__.py +0 -0
- api/batch_processing/postprocessing/add_max_conf.py +12 -12
- api/batch_processing/postprocessing/categorize_detections_by_size.py +32 -14
- api/batch_processing/postprocessing/combine_api_outputs.py +69 -55
- api/batch_processing/postprocessing/compare_batch_results.py +114 -44
- api/batch_processing/postprocessing/convert_output_format.py +62 -19
- api/batch_processing/postprocessing/load_api_results.py +17 -20
- api/batch_processing/postprocessing/md_to_coco.py +31 -21
- api/batch_processing/postprocessing/md_to_labelme.py +165 -68
- api/batch_processing/postprocessing/merge_detections.py +40 -15
- api/batch_processing/postprocessing/postprocess_batch_results.py +270 -186
- api/batch_processing/postprocessing/remap_detection_categories.py +170 -0
- api/batch_processing/postprocessing/render_detection_confusion_matrix.py +75 -39
- api/batch_processing/postprocessing/repeat_detection_elimination/find_repeat_detections.py +53 -44
- api/batch_processing/postprocessing/repeat_detection_elimination/remove_repeat_detections.py +25 -14
- api/batch_processing/postprocessing/repeat_detection_elimination/repeat_detections_core.py +244 -160
- api/batch_processing/postprocessing/separate_detections_into_folders.py +159 -114
- api/batch_processing/postprocessing/subset_json_detector_output.py +146 -169
- api/batch_processing/postprocessing/top_folders_to_bottom.py +77 -43
- api/synchronous/__init__.py +0 -0
- api/synchronous/api_core/animal_detection_api/__init__.py +0 -0
- api/synchronous/api_core/animal_detection_api/api_backend.py +0 -2
- api/synchronous/api_core/animal_detection_api/api_frontend.py +266 -268
- api/synchronous/api_core/animal_detection_api/config.py +35 -35
- api/synchronous/api_core/tests/__init__.py +0 -0
- api/synchronous/api_core/tests/load_test.py +109 -109
- classification/__init__.py +0 -0
- classification/aggregate_classifier_probs.py +21 -24
- classification/analyze_failed_images.py +11 -13
- classification/cache_batchapi_outputs.py +51 -51
- classification/create_classification_dataset.py +69 -68
- classification/crop_detections.py +54 -53
- classification/csv_to_json.py +97 -100
- classification/detect_and_crop.py +105 -105
- classification/evaluate_model.py +43 -42
- classification/identify_mislabeled_candidates.py +47 -46
- classification/json_to_azcopy_list.py +10 -10
- classification/json_validator.py +72 -71
- classification/map_classification_categories.py +44 -43
- classification/merge_classification_detection_output.py +68 -68
- classification/prepare_classification_script.py +157 -154
- classification/prepare_classification_script_mc.py +228 -228
- classification/run_classifier.py +27 -26
- classification/save_mislabeled.py +30 -30
- classification/train_classifier.py +20 -20
- classification/train_classifier_tf.py +21 -22
- classification/train_utils.py +10 -10
- data_management/__init__.py +0 -0
- data_management/annotations/__init__.py +0 -0
- data_management/annotations/annotation_constants.py +18 -31
- data_management/camtrap_dp_to_coco.py +238 -0
- data_management/cct_json_utils.py +107 -59
- data_management/cct_to_md.py +176 -158
- data_management/cct_to_wi.py +247 -219
- data_management/coco_to_labelme.py +272 -0
- data_management/coco_to_yolo.py +86 -62
- data_management/databases/__init__.py +0 -0
- data_management/databases/add_width_and_height_to_db.py +20 -16
- data_management/databases/combine_coco_camera_traps_files.py +35 -31
- data_management/databases/integrity_check_json_db.py +130 -83
- data_management/databases/subset_json_db.py +25 -16
- data_management/generate_crops_from_cct.py +27 -45
- data_management/get_image_sizes.py +188 -144
- data_management/importers/add_nacti_sizes.py +8 -8
- data_management/importers/add_timestamps_to_icct.py +78 -78
- data_management/importers/animl_results_to_md_results.py +158 -160
- data_management/importers/auckland_doc_test_to_json.py +9 -9
- data_management/importers/auckland_doc_to_json.py +8 -8
- data_management/importers/awc_to_json.py +7 -7
- data_management/importers/bellevue_to_json.py +15 -15
- data_management/importers/cacophony-thermal-importer.py +13 -13
- data_management/importers/carrizo_shrubfree_2018.py +8 -8
- data_management/importers/carrizo_trail_cam_2017.py +8 -8
- data_management/importers/cct_field_adjustments.py +9 -9
- data_management/importers/channel_islands_to_cct.py +10 -10
- data_management/importers/eMammal/copy_and_unzip_emammal.py +1 -0
- data_management/importers/ena24_to_json.py +7 -7
- data_management/importers/filenames_to_json.py +8 -8
- data_management/importers/helena_to_cct.py +7 -7
- data_management/importers/idaho-camera-traps.py +7 -7
- data_management/importers/idfg_iwildcam_lila_prep.py +10 -10
- data_management/importers/jb_csv_to_json.py +9 -9
- data_management/importers/mcgill_to_json.py +8 -8
- data_management/importers/missouri_to_json.py +18 -18
- data_management/importers/nacti_fieldname_adjustments.py +10 -10
- data_management/importers/noaa_seals_2019.py +8 -8
- data_management/importers/pc_to_json.py +7 -7
- data_management/importers/plot_wni_giraffes.py +7 -7
- data_management/importers/prepare-noaa-fish-data-for-lila.py +359 -359
- data_management/importers/prepare_zsl_imerit.py +7 -7
- data_management/importers/rspb_to_json.py +8 -8
- data_management/importers/save_the_elephants_survey_A.py +8 -8
- data_management/importers/save_the_elephants_survey_B.py +9 -9
- data_management/importers/snapshot_safari_importer.py +26 -26
- data_management/importers/snapshot_safari_importer_reprise.py +665 -665
- data_management/importers/snapshot_serengeti_lila.py +14 -14
- data_management/importers/sulross_get_exif.py +8 -9
- data_management/importers/timelapse_csv_set_to_json.py +11 -11
- data_management/importers/ubc_to_json.py +13 -13
- data_management/importers/umn_to_json.py +7 -7
- data_management/importers/wellington_to_json.py +8 -8
- data_management/importers/wi_to_json.py +9 -9
- data_management/importers/zamba_results_to_md_results.py +181 -181
- data_management/labelme_to_coco.py +309 -159
- data_management/labelme_to_yolo.py +103 -60
- data_management/lila/__init__.py +0 -0
- data_management/lila/add_locations_to_island_camera_traps.py +9 -9
- data_management/lila/add_locations_to_nacti.py +147 -147
- data_management/lila/create_lila_blank_set.py +114 -31
- data_management/lila/create_lila_test_set.py +8 -8
- data_management/lila/create_links_to_md_results_files.py +106 -106
- data_management/lila/download_lila_subset.py +92 -90
- data_management/lila/generate_lila_per_image_labels.py +56 -43
- data_management/lila/get_lila_annotation_counts.py +18 -15
- data_management/lila/get_lila_image_counts.py +11 -11
- data_management/lila/lila_common.py +103 -70
- data_management/lila/test_lila_metadata_urls.py +132 -116
- data_management/ocr_tools.py +173 -128
- data_management/read_exif.py +161 -99
- data_management/remap_coco_categories.py +84 -0
- data_management/remove_exif.py +58 -62
- data_management/resize_coco_dataset.py +32 -44
- data_management/wi_download_csv_to_coco.py +246 -0
- data_management/yolo_output_to_md_output.py +86 -73
- data_management/yolo_to_coco.py +535 -95
- detection/__init__.py +0 -0
- detection/detector_training/__init__.py +0 -0
- detection/process_video.py +85 -33
- detection/pytorch_detector.py +43 -25
- detection/run_detector.py +157 -72
- detection/run_detector_batch.py +189 -114
- detection/run_inference_with_yolov5_val.py +118 -51
- detection/run_tiled_inference.py +113 -42
- detection/tf_detector.py +51 -28
- detection/video_utils.py +606 -521
- docs/source/conf.py +43 -0
- md_utils/__init__.py +0 -0
- md_utils/azure_utils.py +9 -9
- md_utils/ct_utils.py +249 -70
- md_utils/directory_listing.py +59 -64
- md_utils/md_tests.py +968 -862
- md_utils/path_utils.py +655 -155
- md_utils/process_utils.py +157 -133
- md_utils/sas_blob_utils.py +20 -20
- md_utils/split_locations_into_train_val.py +45 -32
- md_utils/string_utils.py +33 -10
- md_utils/url_utils.py +208 -27
- md_utils/write_html_image_list.py +51 -35
- md_visualization/__init__.py +0 -0
- md_visualization/plot_utils.py +102 -109
- md_visualization/render_images_with_thumbnails.py +34 -34
- md_visualization/visualization_utils.py +908 -311
- md_visualization/visualize_db.py +109 -58
- md_visualization/visualize_detector_output.py +61 -42
- {megadetector-5.0.7.dist-info → megadetector-5.0.9.dist-info}/METADATA +21 -17
- megadetector-5.0.9.dist-info/RECORD +224 -0
- {megadetector-5.0.7.dist-info → megadetector-5.0.9.dist-info}/WHEEL +1 -1
- {megadetector-5.0.7.dist-info → megadetector-5.0.9.dist-info}/top_level.txt +1 -0
- taxonomy_mapping/__init__.py +0 -0
- taxonomy_mapping/map_lila_taxonomy_to_wi_taxonomy.py +342 -335
- taxonomy_mapping/map_new_lila_datasets.py +154 -154
- taxonomy_mapping/prepare_lila_taxonomy_release.py +142 -134
- taxonomy_mapping/preview_lila_taxonomy.py +591 -591
- taxonomy_mapping/retrieve_sample_image.py +12 -12
- taxonomy_mapping/simple_image_download.py +11 -11
- taxonomy_mapping/species_lookup.py +10 -10
- taxonomy_mapping/taxonomy_csv_checker.py +18 -18
- taxonomy_mapping/taxonomy_graph.py +47 -47
- taxonomy_mapping/validate_lila_category_mappings.py +83 -76
- data_management/cct_json_to_filename_json.py +0 -89
- data_management/cct_to_csv.py +0 -140
- data_management/databases/remove_corrupted_images_from_db.py +0 -191
- detection/detector_training/copy_checkpoints.py +0 -43
- md_visualization/visualize_megadb.py +0 -183
- megadetector-5.0.7.dist-info/RECORD +0 -202
- {megadetector-5.0.7.dist-info → megadetector-5.0.9.dist-info}/LICENSE +0 -0
md_utils/directory_listing.py
CHANGED
|
@@ -1,22 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
#
|
|
13
|
-
# Sample invocation:
|
|
14
|
-
#
|
|
15
|
-
# python directory_listing.py /naipout/v002 --basepath /naipout/v002 \
|
|
16
|
-
# --enable_overwrite \
|
|
17
|
-
# --sas_url "https://naipblobs.blob.core.windows.net/naip/v002?sv=..."
|
|
18
|
-
#
|
|
19
|
-
########
|
|
1
|
+
"""
|
|
2
|
+
|
|
3
|
+
directory_listing.py
|
|
4
|
+
|
|
5
|
+
Script for creating Apache-style HTML directory listings for a local directory
|
|
6
|
+
and all its subdirectories.
|
|
7
|
+
|
|
8
|
+
Also includes a preview of a jpg file (the first in an alphabetical list),
|
|
9
|
+
if present.
|
|
10
|
+
|
|
11
|
+
"""
|
|
20
12
|
|
|
21
13
|
#%% Imports
|
|
22
14
|
|
|
@@ -28,39 +20,26 @@ import re
|
|
|
28
20
|
import azure.common
|
|
29
21
|
from azure.storage.blob import BlobServiceClient, ContentSettings
|
|
30
22
|
|
|
23
|
+
from md_utils.path_utils import is_image_file
|
|
31
24
|
|
|
32
|
-
#%% Directory enumeration functions
|
|
33
|
-
|
|
34
|
-
def is_image_file(path):
|
|
35
|
-
"""
|
|
36
|
-
Checks whether the provided file path points to an image by checking the
|
|
37
|
-
file extension. The following file extensions are considered images: jpg,
|
|
38
|
-
jpeg. The check is case-insensitive.
|
|
39
|
-
|
|
40
|
-
Args:
|
|
41
|
-
path: string, path to image file or just the file name
|
|
42
|
-
|
|
43
|
-
Returns:
|
|
44
|
-
boolean, True if the file is an image
|
|
45
|
-
"""
|
|
46
|
-
|
|
47
|
-
return os.path.splitext(path)[1].lower()[1:] in ['jpg', 'jpeg'] #, 'gif', 'tiff', 'tif', 'png']
|
|
48
25
|
|
|
26
|
+
#%% Directory enumeration functions
|
|
49
27
|
|
|
50
28
|
def create_plain_index(root, dirs, files, dirname=None):
|
|
51
29
|
"""
|
|
52
|
-
Creates the fairly plain HTML folder index
|
|
53
|
-
|
|
54
|
-
Returns the HTML source as string.
|
|
30
|
+
Creates the fairly plain HTML folder index including a preview of a single image file,
|
|
31
|
+
if any is present.
|
|
55
32
|
|
|
56
33
|
Args:
|
|
57
|
-
root:
|
|
58
|
-
|
|
59
|
-
dirs: list of strings, the directories in
|
|
60
|
-
files: list of
|
|
61
|
-
dirname: name to print in the html,
|
|
62
|
-
|
|
63
|
-
|
|
34
|
+
root (str): path to the root directory, all paths in [dirs] and
|
|
35
|
+
[files] are relative to this root folder
|
|
36
|
+
dirs (list): list of strings, the directories in [root]
|
|
37
|
+
files (list): list of strings, the files in [root]
|
|
38
|
+
dirname (str, optional): name to print in the html,
|
|
39
|
+
which may be different than [root]
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
str: HTML source of the directory listing
|
|
64
43
|
"""
|
|
65
44
|
|
|
66
45
|
if dirname is None:
|
|
@@ -128,25 +107,31 @@ def create_plain_index(root, dirs, files, dirname=None):
|
|
|
128
107
|
html += "</body></html>\n"
|
|
129
108
|
return html
|
|
130
109
|
|
|
110
|
+
# ...def create_plain_index(...)
|
|
111
|
+
|
|
131
112
|
|
|
132
113
|
def traverse_and_create_index(dir, sas_url=None, overwrite_files=False,
|
|
133
114
|
template_fun=create_plain_index, basepath=None):
|
|
134
115
|
"""
|
|
135
|
-
Recursively traverses the local directory
|
|
136
|
-
file for each folder using
|
|
116
|
+
Recursively traverses the local directory [dir] and generates a index
|
|
117
|
+
file for each folder using [template_fun] to generate the HTML output.
|
|
137
118
|
Excludes hidden files.
|
|
138
119
|
|
|
139
120
|
Args:
|
|
140
|
-
dir:
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
121
|
+
dir (str): directory to process
|
|
122
|
+
sas_url (str, optional): write-capable SAS URL that points to the same place as
|
|
123
|
+
[dir], used for the very esoteric scenario where [dir] is really a mounted
|
|
124
|
+
blob container, and we want to set the content-type on each file so the resulting
|
|
125
|
+
index can be viewed in a browser
|
|
126
|
+
overwrite_files (bool, optional): whether to over-write existing index file
|
|
127
|
+
template_fun (func, optional): function taking three arguments (string,
|
|
128
|
+
list of string, list of string) representing the current root, the list of folders,
|
|
129
|
+
and the list of files. Should return the HTML source of the index file.
|
|
130
|
+
basepath (str, optional): if not None, the name used for each subfolder in [dir]
|
|
131
|
+
in the output files will be relative to [basepath]
|
|
147
132
|
"""
|
|
148
133
|
|
|
149
|
-
print(
|
|
134
|
+
print('Traversing {}'.format(dir))
|
|
150
135
|
|
|
151
136
|
# Make sure we remove the trailing /
|
|
152
137
|
dir = os.path.normpath(dir)
|
|
@@ -222,19 +207,26 @@ def traverse_and_create_index(dir, sas_url=None, overwrite_files=False,
|
|
|
222
207
|
print('ERROR: It seems the SAS URL is incorrect or does not allow setting properties.')
|
|
223
208
|
return
|
|
224
209
|
|
|
210
|
+
# ...def traverse_and_create_index(...)
|
|
225
211
|
|
|
226
|
-
#%% Command-line driver
|
|
227
212
|
|
|
228
|
-
|
|
213
|
+
#%% Command-line driver
|
|
229
214
|
|
|
215
|
+
def main():
|
|
216
|
+
|
|
230
217
|
parser = argparse.ArgumentParser()
|
|
231
|
-
|
|
232
|
-
parser.add_argument("
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
218
|
+
|
|
219
|
+
parser.add_argument("directory", type=str,
|
|
220
|
+
help='Path to directory which should be traversed.')
|
|
221
|
+
parser.add_argument("--basepath", type=str,
|
|
222
|
+
help='Folder names will be printed relative to basepath, if specified',
|
|
223
|
+
default=None)
|
|
224
|
+
parser.add_argument("--sas_url", type=str,
|
|
225
|
+
help='Blobfuse does not set the content-type property ' + \
|
|
226
|
+
'properly and hence index.html won\'t be accessible in the browser. If you want to set the ' + \
|
|
227
|
+
'content-type in the corresponding blob storage, provide the SAS URL that corresponds to the ' + \
|
|
228
|
+
'directory, e.g. if *directory* is /mountpoint/path/to/folder, then *--sas_url* looks like ' + \
|
|
229
|
+
'"https://accname.blob.core.windows.net/bname/path/to/folder?st=...&se=...&sp=...&..."')
|
|
238
230
|
parser.add_argument("--enable_overwrite", action='store_true', default=False,
|
|
239
231
|
help='If set, the script will overwrite existing index.html files.')
|
|
240
232
|
|
|
@@ -249,3 +241,6 @@ if __name__ == '__main__':
|
|
|
249
241
|
"match the format https://accname.blob.core.windows.net/bname/path/to/folder?..."
|
|
250
242
|
|
|
251
243
|
traverse_and_create_index(args.directory, overwrite_files=args.enable_overwrite, sas_url=args.sas_url, basepath=args.basepath)
|
|
244
|
+
|
|
245
|
+
if __name__ == '__main__':
|
|
246
|
+
main()
|