megadetector 5.0.28__py3-none-any.whl → 10.0.0__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.
- megadetector/api/batch_processing/integration/digiKam/xmp_integration.py +2 -2
- megadetector/api/batch_processing/integration/eMammal/test_scripts/push_annotations_to_emammal.py +1 -1
- megadetector/api/batch_processing/integration/eMammal/test_scripts/select_images_for_testing.py +1 -1
- megadetector/classification/aggregate_classifier_probs.py +3 -3
- megadetector/classification/analyze_failed_images.py +5 -5
- megadetector/classification/cache_batchapi_outputs.py +5 -5
- megadetector/classification/create_classification_dataset.py +11 -12
- megadetector/classification/crop_detections.py +10 -10
- megadetector/classification/csv_to_json.py +8 -8
- megadetector/classification/detect_and_crop.py +13 -15
- megadetector/classification/efficientnet/model.py +8 -8
- megadetector/classification/efficientnet/utils.py +6 -5
- megadetector/classification/evaluate_model.py +7 -7
- megadetector/classification/identify_mislabeled_candidates.py +6 -6
- megadetector/classification/json_to_azcopy_list.py +1 -1
- megadetector/classification/json_validator.py +29 -32
- megadetector/classification/map_classification_categories.py +9 -9
- megadetector/classification/merge_classification_detection_output.py +12 -9
- megadetector/classification/prepare_classification_script.py +19 -19
- megadetector/classification/prepare_classification_script_mc.py +26 -26
- megadetector/classification/run_classifier.py +4 -4
- megadetector/classification/save_mislabeled.py +6 -6
- megadetector/classification/train_classifier.py +1 -1
- megadetector/classification/train_classifier_tf.py +9 -9
- megadetector/classification/train_utils.py +10 -10
- megadetector/data_management/annotations/annotation_constants.py +1 -2
- megadetector/data_management/camtrap_dp_to_coco.py +79 -46
- megadetector/data_management/cct_json_utils.py +103 -103
- megadetector/data_management/cct_to_md.py +49 -49
- megadetector/data_management/cct_to_wi.py +33 -33
- megadetector/data_management/coco_to_labelme.py +75 -75
- megadetector/data_management/coco_to_yolo.py +210 -193
- megadetector/data_management/databases/add_width_and_height_to_db.py +86 -12
- megadetector/data_management/databases/combine_coco_camera_traps_files.py +40 -40
- megadetector/data_management/databases/integrity_check_json_db.py +228 -200
- megadetector/data_management/databases/subset_json_db.py +33 -33
- megadetector/data_management/generate_crops_from_cct.py +88 -39
- megadetector/data_management/get_image_sizes.py +54 -49
- megadetector/data_management/labelme_to_coco.py +133 -125
- megadetector/data_management/labelme_to_yolo.py +159 -73
- megadetector/data_management/lila/create_lila_blank_set.py +81 -83
- megadetector/data_management/lila/create_lila_test_set.py +32 -31
- megadetector/data_management/lila/create_links_to_md_results_files.py +18 -18
- megadetector/data_management/lila/download_lila_subset.py +21 -24
- megadetector/data_management/lila/generate_lila_per_image_labels.py +365 -107
- megadetector/data_management/lila/get_lila_annotation_counts.py +35 -33
- megadetector/data_management/lila/get_lila_image_counts.py +22 -22
- megadetector/data_management/lila/lila_common.py +73 -70
- megadetector/data_management/lila/test_lila_metadata_urls.py +28 -19
- megadetector/data_management/mewc_to_md.py +344 -340
- megadetector/data_management/ocr_tools.py +262 -255
- megadetector/data_management/read_exif.py +249 -227
- megadetector/data_management/remap_coco_categories.py +90 -28
- megadetector/data_management/remove_exif.py +81 -21
- megadetector/data_management/rename_images.py +187 -187
- megadetector/data_management/resize_coco_dataset.py +588 -120
- megadetector/data_management/speciesnet_to_md.py +41 -41
- megadetector/data_management/wi_download_csv_to_coco.py +55 -55
- megadetector/data_management/yolo_output_to_md_output.py +248 -122
- megadetector/data_management/yolo_to_coco.py +333 -191
- megadetector/detection/change_detection.py +832 -0
- megadetector/detection/process_video.py +340 -337
- megadetector/detection/pytorch_detector.py +358 -278
- megadetector/detection/run_detector.py +399 -186
- megadetector/detection/run_detector_batch.py +404 -377
- megadetector/detection/run_inference_with_yolov5_val.py +340 -327
- megadetector/detection/run_tiled_inference.py +257 -249
- megadetector/detection/tf_detector.py +24 -24
- megadetector/detection/video_utils.py +332 -295
- megadetector/postprocessing/add_max_conf.py +19 -11
- megadetector/postprocessing/categorize_detections_by_size.py +45 -45
- megadetector/postprocessing/classification_postprocessing.py +468 -433
- megadetector/postprocessing/combine_batch_outputs.py +23 -23
- megadetector/postprocessing/compare_batch_results.py +590 -525
- megadetector/postprocessing/convert_output_format.py +106 -102
- megadetector/postprocessing/create_crop_folder.py +347 -147
- megadetector/postprocessing/detector_calibration.py +173 -168
- megadetector/postprocessing/generate_csv_report.py +508 -499
- megadetector/postprocessing/load_api_results.py +48 -27
- megadetector/postprocessing/md_to_coco.py +133 -102
- megadetector/postprocessing/md_to_labelme.py +107 -90
- megadetector/postprocessing/md_to_wi.py +40 -40
- megadetector/postprocessing/merge_detections.py +92 -114
- megadetector/postprocessing/postprocess_batch_results.py +319 -301
- megadetector/postprocessing/remap_detection_categories.py +91 -38
- megadetector/postprocessing/render_detection_confusion_matrix.py +214 -205
- megadetector/postprocessing/repeat_detection_elimination/find_repeat_detections.py +57 -57
- megadetector/postprocessing/repeat_detection_elimination/remove_repeat_detections.py +27 -28
- megadetector/postprocessing/repeat_detection_elimination/repeat_detections_core.py +704 -679
- megadetector/postprocessing/separate_detections_into_folders.py +226 -211
- megadetector/postprocessing/subset_json_detector_output.py +265 -262
- megadetector/postprocessing/top_folders_to_bottom.py +45 -45
- megadetector/postprocessing/validate_batch_results.py +70 -70
- megadetector/taxonomy_mapping/map_lila_taxonomy_to_wi_taxonomy.py +52 -52
- megadetector/taxonomy_mapping/map_new_lila_datasets.py +18 -19
- megadetector/taxonomy_mapping/prepare_lila_taxonomy_release.py +54 -33
- megadetector/taxonomy_mapping/preview_lila_taxonomy.py +67 -67
- megadetector/taxonomy_mapping/retrieve_sample_image.py +16 -16
- megadetector/taxonomy_mapping/simple_image_download.py +8 -8
- megadetector/taxonomy_mapping/species_lookup.py +156 -74
- megadetector/taxonomy_mapping/taxonomy_csv_checker.py +14 -14
- megadetector/taxonomy_mapping/taxonomy_graph.py +10 -10
- megadetector/taxonomy_mapping/validate_lila_category_mappings.py +13 -13
- megadetector/utils/ct_utils.py +1049 -211
- megadetector/utils/directory_listing.py +21 -77
- megadetector/utils/gpu_test.py +22 -22
- megadetector/utils/md_tests.py +632 -529
- megadetector/utils/path_utils.py +1520 -431
- megadetector/utils/process_utils.py +41 -41
- megadetector/utils/split_locations_into_train_val.py +62 -62
- megadetector/utils/string_utils.py +148 -27
- megadetector/utils/url_utils.py +489 -176
- megadetector/utils/wi_utils.py +2658 -2526
- megadetector/utils/write_html_image_list.py +137 -137
- megadetector/visualization/plot_utils.py +34 -30
- megadetector/visualization/render_images_with_thumbnails.py +39 -74
- megadetector/visualization/visualization_utils.py +487 -435
- megadetector/visualization/visualize_db.py +232 -198
- megadetector/visualization/visualize_detector_output.py +82 -76
- {megadetector-5.0.28.dist-info → megadetector-10.0.0.dist-info}/METADATA +5 -2
- megadetector-10.0.0.dist-info/RECORD +139 -0
- {megadetector-5.0.28.dist-info → megadetector-10.0.0.dist-info}/WHEEL +1 -1
- megadetector/api/batch_processing/api_core/__init__.py +0 -0
- megadetector/api/batch_processing/api_core/batch_service/__init__.py +0 -0
- megadetector/api/batch_processing/api_core/batch_service/score.py +0 -439
- megadetector/api/batch_processing/api_core/server.py +0 -294
- megadetector/api/batch_processing/api_core/server_api_config.py +0 -97
- megadetector/api/batch_processing/api_core/server_app_config.py +0 -55
- megadetector/api/batch_processing/api_core/server_batch_job_manager.py +0 -220
- megadetector/api/batch_processing/api_core/server_job_status_table.py +0 -149
- megadetector/api/batch_processing/api_core/server_orchestration.py +0 -360
- megadetector/api/batch_processing/api_core/server_utils.py +0 -88
- megadetector/api/batch_processing/api_core_support/__init__.py +0 -0
- megadetector/api/batch_processing/api_core_support/aggregate_results_manually.py +0 -46
- megadetector/api/batch_processing/api_support/__init__.py +0 -0
- megadetector/api/batch_processing/api_support/summarize_daily_activity.py +0 -152
- megadetector/api/batch_processing/data_preparation/__init__.py +0 -0
- megadetector/api/synchronous/__init__.py +0 -0
- megadetector/api/synchronous/api_core/animal_detection_api/__init__.py +0 -0
- megadetector/api/synchronous/api_core/animal_detection_api/api_backend.py +0 -151
- megadetector/api/synchronous/api_core/animal_detection_api/api_frontend.py +0 -263
- megadetector/api/synchronous/api_core/animal_detection_api/config.py +0 -35
- megadetector/api/synchronous/api_core/tests/__init__.py +0 -0
- megadetector/api/synchronous/api_core/tests/load_test.py +0 -110
- megadetector/data_management/importers/add_nacti_sizes.py +0 -52
- megadetector/data_management/importers/add_timestamps_to_icct.py +0 -79
- megadetector/data_management/importers/animl_results_to_md_results.py +0 -158
- megadetector/data_management/importers/auckland_doc_test_to_json.py +0 -373
- megadetector/data_management/importers/auckland_doc_to_json.py +0 -201
- megadetector/data_management/importers/awc_to_json.py +0 -191
- megadetector/data_management/importers/bellevue_to_json.py +0 -272
- megadetector/data_management/importers/cacophony-thermal-importer.py +0 -793
- megadetector/data_management/importers/carrizo_shrubfree_2018.py +0 -269
- megadetector/data_management/importers/carrizo_trail_cam_2017.py +0 -289
- megadetector/data_management/importers/cct_field_adjustments.py +0 -58
- megadetector/data_management/importers/channel_islands_to_cct.py +0 -913
- megadetector/data_management/importers/eMammal/copy_and_unzip_emammal.py +0 -180
- megadetector/data_management/importers/eMammal/eMammal_helpers.py +0 -249
- megadetector/data_management/importers/eMammal/make_eMammal_json.py +0 -223
- megadetector/data_management/importers/ena24_to_json.py +0 -276
- megadetector/data_management/importers/filenames_to_json.py +0 -386
- megadetector/data_management/importers/helena_to_cct.py +0 -283
- megadetector/data_management/importers/idaho-camera-traps.py +0 -1407
- megadetector/data_management/importers/idfg_iwildcam_lila_prep.py +0 -294
- megadetector/data_management/importers/import_desert_lion_conservation_camera_traps.py +0 -387
- megadetector/data_management/importers/jb_csv_to_json.py +0 -150
- megadetector/data_management/importers/mcgill_to_json.py +0 -250
- megadetector/data_management/importers/missouri_to_json.py +0 -490
- megadetector/data_management/importers/nacti_fieldname_adjustments.py +0 -79
- megadetector/data_management/importers/noaa_seals_2019.py +0 -181
- megadetector/data_management/importers/osu-small-animals-to-json.py +0 -364
- megadetector/data_management/importers/pc_to_json.py +0 -365
- megadetector/data_management/importers/plot_wni_giraffes.py +0 -123
- megadetector/data_management/importers/prepare_zsl_imerit.py +0 -131
- megadetector/data_management/importers/raic_csv_to_md_results.py +0 -416
- megadetector/data_management/importers/rspb_to_json.py +0 -356
- megadetector/data_management/importers/save_the_elephants_survey_A.py +0 -320
- megadetector/data_management/importers/save_the_elephants_survey_B.py +0 -329
- megadetector/data_management/importers/snapshot_safari_importer.py +0 -758
- megadetector/data_management/importers/snapshot_serengeti_lila.py +0 -1067
- megadetector/data_management/importers/snapshotserengeti/make_full_SS_json.py +0 -150
- megadetector/data_management/importers/snapshotserengeti/make_per_season_SS_json.py +0 -153
- megadetector/data_management/importers/sulross_get_exif.py +0 -65
- megadetector/data_management/importers/timelapse_csv_set_to_json.py +0 -490
- megadetector/data_management/importers/ubc_to_json.py +0 -399
- megadetector/data_management/importers/umn_to_json.py +0 -507
- megadetector/data_management/importers/wellington_to_json.py +0 -263
- megadetector/data_management/importers/wi_to_json.py +0 -442
- megadetector/data_management/importers/zamba_results_to_md_results.py +0 -180
- megadetector/data_management/lila/add_locations_to_island_camera_traps.py +0 -101
- megadetector/data_management/lila/add_locations_to_nacti.py +0 -151
- megadetector/utils/azure_utils.py +0 -178
- megadetector/utils/sas_blob_utils.py +0 -509
- megadetector-5.0.28.dist-info/RECORD +0 -209
- /megadetector/{api/batch_processing/__init__.py → __init__.py} +0 -0
- {megadetector-5.0.28.dist-info → megadetector-10.0.0.dist-info}/licenses/LICENSE +0 -0
- {megadetector-5.0.28.dist-info → megadetector-10.0.0.dist-info}/top_level.txt +0 -0
|
@@ -14,9 +14,12 @@ import random
|
|
|
14
14
|
|
|
15
15
|
from tqdm import tqdm
|
|
16
16
|
from collections import defaultdict
|
|
17
|
+
from copy import deepcopy
|
|
17
18
|
|
|
18
19
|
from megadetector.data_management.lila.lila_common import \
|
|
19
20
|
read_lila_all_images_file, is_empty, lila_base_urls
|
|
21
|
+
from megadetector.utils.url_utils import parallel_download_urls
|
|
22
|
+
from megadetector.utils.path_utils import open_file
|
|
20
23
|
|
|
21
24
|
for s in lila_base_urls.values():
|
|
22
25
|
assert s.endswith('/')
|
|
@@ -58,13 +61,13 @@ common_name_to_count = defaultdict(int)
|
|
|
58
61
|
|
|
59
62
|
ds_name_to_urls = defaultdict(list)
|
|
60
63
|
|
|
61
|
-
def find_items(row):
|
|
62
|
-
|
|
64
|
+
def find_items(row): # noqa
|
|
65
|
+
|
|
63
66
|
if is_empty(row['common_name']):
|
|
64
67
|
return
|
|
65
|
-
|
|
68
|
+
|
|
66
69
|
match = False
|
|
67
|
-
|
|
70
|
+
|
|
68
71
|
# This is the only bit of this file that's specific to a particular query. In this case
|
|
69
72
|
# we're checking whether each row is on a list of species of interest, but you do you.
|
|
70
73
|
for species_name in species_of_interest:
|
|
@@ -72,7 +75,7 @@ def find_items(row):
|
|
|
72
75
|
match = True
|
|
73
76
|
common_name_to_count[species_name] += 1
|
|
74
77
|
break
|
|
75
|
-
|
|
78
|
+
|
|
76
79
|
if match:
|
|
77
80
|
ds_name_to_urls[row['dataset_name']].append(row['url_' + preferred_provider])
|
|
78
81
|
|
|
@@ -86,8 +89,7 @@ print('Found {} matching URLs across {} datasets'.format(len(all_urls),len(ds_na
|
|
|
86
89
|
|
|
87
90
|
for common_name in common_name_to_count:
|
|
88
91
|
print('{}: {}'.format(common_name,common_name_to_count[common_name]))
|
|
89
|
-
|
|
90
|
-
from copy import deepcopy
|
|
92
|
+
|
|
91
93
|
ds_name_to_urls_raw = deepcopy(ds_name_to_urls)
|
|
92
94
|
|
|
93
95
|
|
|
@@ -104,19 +106,17 @@ else:
|
|
|
104
106
|
|
|
105
107
|
#%% Choose target files for each URL
|
|
106
108
|
|
|
107
|
-
from megadetector.data_management.lila.lila_common import lila_base_urls
|
|
108
|
-
|
|
109
109
|
# We have a list of URLs per dataset, flatten that into a single list of URLs
|
|
110
110
|
urls_to_download = set()
|
|
111
111
|
for ds_name in ds_name_to_urls:
|
|
112
112
|
for url in ds_name_to_urls[ds_name]:
|
|
113
113
|
urls_to_download.add(url)
|
|
114
|
-
urls_to_download = sorted(list(urls_to_download))
|
|
114
|
+
urls_to_download = sorted(list(urls_to_download))
|
|
115
115
|
|
|
116
116
|
# A URL might look like this:
|
|
117
117
|
#
|
|
118
118
|
# https://storage.googleapis.com/public-datasets-lila/wcs-unzipped/animals/0667/0302.jpg
|
|
119
|
-
#
|
|
119
|
+
#
|
|
120
120
|
# We'll write that to an output file that looks like this (relative to output_dir):
|
|
121
121
|
#
|
|
122
122
|
# wcs-unzipped/animals/0667/0302.jpg
|
|
@@ -128,7 +128,7 @@ assert base_url.endswith('/')
|
|
|
128
128
|
url_to_target_file = {}
|
|
129
129
|
|
|
130
130
|
for url in urls_to_download:
|
|
131
|
-
assert url.startswith(base_url)
|
|
131
|
+
assert url.startswith(base_url)
|
|
132
132
|
target_fn_relative = url.replace(base_url,'')
|
|
133
133
|
target_fn_abs = os.path.join(output_dir,target_fn_relative)
|
|
134
134
|
url_to_target_file[url] = target_fn_abs
|
|
@@ -136,8 +136,6 @@ for url in urls_to_download:
|
|
|
136
136
|
|
|
137
137
|
#%% Download image files
|
|
138
138
|
|
|
139
|
-
from megadetector.utils.url_utils import parallel_download_urls
|
|
140
|
-
|
|
141
139
|
download_results = parallel_download_urls(url_to_target_file=url_to_target_file,
|
|
142
140
|
verbose=False,
|
|
143
141
|
overwrite=False,
|
|
@@ -147,39 +145,38 @@ download_results = parallel_download_urls(url_to_target_file=url_to_target_file,
|
|
|
147
145
|
|
|
148
146
|
#%% Open output folder
|
|
149
147
|
|
|
150
|
-
from megadetector.utils.path_utils import open_file
|
|
151
148
|
open_file(output_dir)
|
|
152
149
|
|
|
153
150
|
|
|
154
151
|
#%% Scrap
|
|
155
152
|
|
|
156
153
|
if False:
|
|
157
|
-
|
|
154
|
+
|
|
158
155
|
pass
|
|
159
156
|
|
|
160
157
|
#%% Find all the reptiles on LILA
|
|
161
158
|
|
|
162
159
|
reptile_rows = df.loc[df['class'] == 'reptilia']
|
|
163
|
-
|
|
160
|
+
|
|
164
161
|
# i_row = 0; row = reptile_rows.iloc[i_row]
|
|
165
|
-
|
|
162
|
+
|
|
166
163
|
common_name_to_count = defaultdict(int)
|
|
167
164
|
dataset_to_count = defaultdict(int)
|
|
168
165
|
for i_row,row in reptile_rows.iterrows():
|
|
169
166
|
common_name_to_count[row['common_name']] += 1
|
|
170
167
|
dataset_to_count[row['dataset_name']] += 1
|
|
171
|
-
|
|
168
|
+
|
|
172
169
|
from megadetector.utils.ct_utils import sort_dictionary_by_value
|
|
173
|
-
|
|
170
|
+
|
|
174
171
|
print('Found {} reptiles\n'.format(len(reptile_rows)))
|
|
175
|
-
|
|
172
|
+
|
|
176
173
|
common_name_to_count = sort_dictionary_by_value(common_name_to_count,reverse=True)
|
|
177
174
|
dataset_to_count = sort_dictionary_by_value(dataset_to_count,reverse=True)
|
|
178
|
-
|
|
175
|
+
|
|
179
176
|
print('Common names by count:\n')
|
|
180
177
|
for k in common_name_to_count:
|
|
181
178
|
print('{} ({})'.format(k,common_name_to_count[k]))
|
|
182
|
-
|
|
183
|
-
print('\nDatasets by count:\n')
|
|
179
|
+
|
|
180
|
+
print('\nDatasets by count:\n')
|
|
184
181
|
for k in dataset_to_count:
|
|
185
182
|
print('{} ({})'.format(k,dataset_to_count[k]))
|