megadetector 5.0.27__py3-none-any.whl → 5.0.29__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/api_core/batch_service/score.py +4 -5
- megadetector/api/batch_processing/api_core_support/aggregate_results_manually.py +1 -1
- megadetector/api/batch_processing/api_support/summarize_daily_activity.py +1 -1
- 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/api/synchronous/api_core/tests/load_test.py +2 -3
- 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/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 +23 -23
- 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 -1
- megadetector/data_management/camtrap_dp_to_coco.py +45 -45
- megadetector/data_management/cct_json_utils.py +101 -101
- 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 +189 -189
- megadetector/data_management/databases/add_width_and_height_to_db.py +3 -2
- megadetector/data_management/databases/combine_coco_camera_traps_files.py +38 -38
- megadetector/data_management/databases/integrity_check_json_db.py +202 -188
- megadetector/data_management/databases/subset_json_db.py +33 -33
- megadetector/data_management/generate_crops_from_cct.py +38 -38
- megadetector/data_management/get_image_sizes.py +54 -49
- megadetector/data_management/labelme_to_coco.py +130 -124
- megadetector/data_management/labelme_to_yolo.py +78 -72
- 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 +91 -91
- megadetector/data_management/lila/get_lila_annotation_counts.py +30 -30
- megadetector/data_management/lila/get_lila_image_counts.py +22 -22
- megadetector/data_management/lila/lila_common.py +70 -70
- megadetector/data_management/lila/test_lila_metadata_urls.py +13 -14
- megadetector/data_management/mewc_to_md.py +339 -340
- megadetector/data_management/ocr_tools.py +258 -252
- megadetector/data_management/read_exif.py +232 -223
- megadetector/data_management/remap_coco_categories.py +26 -26
- megadetector/data_management/remove_exif.py +31 -20
- megadetector/data_management/rename_images.py +187 -187
- megadetector/data_management/resize_coco_dataset.py +41 -41
- 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 +117 -120
- megadetector/data_management/yolo_to_coco.py +195 -188
- megadetector/detection/change_detection.py +831 -0
- megadetector/detection/process_video.py +341 -338
- megadetector/detection/pytorch_detector.py +308 -266
- megadetector/detection/run_detector.py +186 -166
- megadetector/detection/run_detector_batch.py +366 -364
- megadetector/detection/run_inference_with_yolov5_val.py +328 -325
- megadetector/detection/run_tiled_inference.py +312 -253
- megadetector/detection/tf_detector.py +24 -24
- megadetector/detection/video_utils.py +291 -283
- megadetector/postprocessing/add_max_conf.py +15 -11
- megadetector/postprocessing/categorize_detections_by_size.py +44 -44
- megadetector/postprocessing/classification_postprocessing.py +808 -311
- megadetector/postprocessing/combine_batch_outputs.py +20 -21
- megadetector/postprocessing/compare_batch_results.py +528 -517
- megadetector/postprocessing/convert_output_format.py +97 -97
- megadetector/postprocessing/create_crop_folder.py +220 -147
- megadetector/postprocessing/detector_calibration.py +173 -168
- megadetector/postprocessing/generate_csv_report.py +508 -0
- megadetector/postprocessing/load_api_results.py +25 -22
- megadetector/postprocessing/md_to_coco.py +129 -98
- megadetector/postprocessing/md_to_labelme.py +89 -83
- megadetector/postprocessing/md_to_wi.py +40 -40
- megadetector/postprocessing/merge_detections.py +87 -114
- megadetector/postprocessing/postprocess_batch_results.py +319 -302
- megadetector/postprocessing/remap_detection_categories.py +36 -36
- megadetector/postprocessing/render_detection_confusion_matrix.py +205 -199
- 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 +702 -677
- 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 +15 -15
- megadetector/taxonomy_mapping/prepare_lila_taxonomy_release.py +14 -14
- megadetector/taxonomy_mapping/preview_lila_taxonomy.py +66 -69
- megadetector/taxonomy_mapping/retrieve_sample_image.py +16 -16
- megadetector/taxonomy_mapping/simple_image_download.py +8 -8
- megadetector/taxonomy_mapping/species_lookup.py +33 -33
- megadetector/taxonomy_mapping/taxonomy_csv_checker.py +14 -14
- megadetector/taxonomy_mapping/taxonomy_graph.py +11 -11
- megadetector/taxonomy_mapping/validate_lila_category_mappings.py +13 -13
- megadetector/utils/azure_utils.py +22 -22
- megadetector/utils/ct_utils.py +1019 -200
- megadetector/utils/directory_listing.py +21 -77
- megadetector/utils/gpu_test.py +22 -22
- megadetector/utils/md_tests.py +541 -518
- megadetector/utils/path_utils.py +1511 -406
- megadetector/utils/process_utils.py +41 -41
- megadetector/utils/sas_blob_utils.py +53 -49
- megadetector/utils/split_locations_into_train_val.py +73 -60
- megadetector/utils/string_utils.py +147 -26
- megadetector/utils/url_utils.py +463 -173
- megadetector/utils/wi_utils.py +2629 -2868
- megadetector/utils/write_html_image_list.py +137 -137
- megadetector/visualization/plot_utils.py +21 -21
- megadetector/visualization/render_images_with_thumbnails.py +37 -73
- megadetector/visualization/visualization_utils.py +424 -404
- megadetector/visualization/visualize_db.py +197 -190
- megadetector/visualization/visualize_detector_output.py +126 -98
- {megadetector-5.0.27.dist-info → megadetector-5.0.29.dist-info}/METADATA +6 -3
- megadetector-5.0.29.dist-info/RECORD +163 -0
- {megadetector-5.0.27.dist-info → megadetector-5.0.29.dist-info}/WHEEL +1 -1
- 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-5.0.27.dist-info/RECORD +0 -208
- {megadetector-5.0.27.dist-info → megadetector-5.0.29.dist-info}/licenses/LICENSE +0 -0
- {megadetector-5.0.27.dist-info → megadetector-5.0.29.dist-info}/top_level.txt +0 -0
|
@@ -27,14 +27,15 @@ the results of multiple model versions, see merge_detections.py.
|
|
|
27
27
|
import argparse
|
|
28
28
|
import sys
|
|
29
29
|
import json
|
|
30
|
+
from megadetector.utils import ct_utils
|
|
30
31
|
|
|
31
32
|
|
|
32
33
|
#%% Merge functions
|
|
33
34
|
|
|
34
35
|
def combine_batch_output_files(input_files,
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
output_file=None,
|
|
37
|
+
require_uniqueness=True,
|
|
38
|
+
verbose=True):
|
|
38
39
|
"""
|
|
39
40
|
Merges the list of MD results files [input_files] into a single
|
|
40
41
|
dictionary, optionally writing the result to [output_file].
|
|
@@ -44,16 +45,16 @@ def combine_batch_output_files(input_files,
|
|
|
44
45
|
output_file (str, optional): path to write merged JSON
|
|
45
46
|
require_uniqueness (bool): whether to require that the images in
|
|
46
47
|
each list of images be unique
|
|
47
|
-
|
|
48
|
+
|
|
48
49
|
Returns:
|
|
49
|
-
dict: merged dictionaries loaded from [input_files], identical to what's
|
|
50
|
+
dict: merged dictionaries loaded from [input_files], identical to what's
|
|
50
51
|
written to [output_file] if [output_file] is not None
|
|
51
52
|
"""
|
|
52
|
-
|
|
53
|
+
|
|
53
54
|
def print_if_verbose(s):
|
|
54
55
|
if verbose:
|
|
55
56
|
print(s)
|
|
56
|
-
|
|
57
|
+
|
|
57
58
|
input_dicts = []
|
|
58
59
|
for fn in input_files:
|
|
59
60
|
print_if_verbose('Loading results from {}'.format(fn))
|
|
@@ -66,8 +67,7 @@ def combine_batch_output_files(input_files,
|
|
|
66
67
|
|
|
67
68
|
print_if_verbose('Writing output to {}'.format(output_file))
|
|
68
69
|
if output_file is not None:
|
|
69
|
-
|
|
70
|
-
json.dump(merged_dict, f, indent=1)
|
|
70
|
+
ct_utils.write_json(output_file, merged_dict)
|
|
71
71
|
|
|
72
72
|
return merged_dict
|
|
73
73
|
|
|
@@ -78,16 +78,16 @@ def combine_batch_output_dictionaries(input_dicts, require_uniqueness=True):
|
|
|
78
78
|
See module header comment for details on merge rules.
|
|
79
79
|
|
|
80
80
|
Args:
|
|
81
|
-
input_dicts (list of dicts): list of dicts in which each dict represents the
|
|
81
|
+
input_dicts (list of dicts): list of dicts in which each dict represents the
|
|
82
82
|
contents of a MD output file
|
|
83
83
|
require_uniqueness (bool): whether to require that the images in
|
|
84
84
|
each input dict be unique; if this is True and image filenames are
|
|
85
85
|
not unique, an error is raised.
|
|
86
86
|
|
|
87
|
-
Returns
|
|
87
|
+
Returns:
|
|
88
88
|
dict: merged MD results
|
|
89
89
|
"""
|
|
90
|
-
|
|
90
|
+
|
|
91
91
|
# Map image filenames to detections, we'll convert to a list later
|
|
92
92
|
images = {}
|
|
93
93
|
info = {}
|
|
@@ -183,17 +183,17 @@ def combine_api_shard_files(input_files, output_file=None):
|
|
|
183
183
|
"""
|
|
184
184
|
Merges the list of .json-formatted API shard files [input_files] into a single
|
|
185
185
|
list of dictionaries, optionally writing the result to [output_file].
|
|
186
|
-
|
|
186
|
+
|
|
187
187
|
This operates on mostly-deprecated API shard files, not MegaDetector results files.
|
|
188
188
|
If you don't know what an API shard file is, you don't want this function.
|
|
189
|
-
|
|
189
|
+
|
|
190
190
|
Args:
|
|
191
191
|
input_files (list of str): files to merge
|
|
192
192
|
output_file (str, optional): file to which we should write merged results
|
|
193
|
-
|
|
193
|
+
|
|
194
194
|
Returns:
|
|
195
195
|
dict: merged results
|
|
196
|
-
|
|
196
|
+
|
|
197
197
|
:meta private:
|
|
198
198
|
"""
|
|
199
199
|
|
|
@@ -215,8 +215,7 @@ def combine_api_shard_files(input_files, output_file=None):
|
|
|
215
215
|
|
|
216
216
|
print('Writing output')
|
|
217
217
|
if output_file is not None:
|
|
218
|
-
|
|
219
|
-
json.dump(detections, f, indent=1)
|
|
218
|
+
ct_utils.write_json(output_file, detections)
|
|
220
219
|
|
|
221
220
|
return detections
|
|
222
221
|
|
|
@@ -225,8 +224,8 @@ def combine_api_shard_files(input_files, output_file=None):
|
|
|
225
224
|
|
|
226
225
|
#%% Command-line driver
|
|
227
226
|
|
|
228
|
-
def main():
|
|
229
|
-
|
|
227
|
+
def main(): # noqa
|
|
228
|
+
|
|
230
229
|
parser = argparse.ArgumentParser()
|
|
231
230
|
parser.add_argument(
|
|
232
231
|
'input_paths', nargs='+',
|
|
@@ -234,7 +233,7 @@ def main():
|
|
|
234
233
|
parser.add_argument(
|
|
235
234
|
'output_path',
|
|
236
235
|
help='Output .json file')
|
|
237
|
-
|
|
236
|
+
|
|
238
237
|
if len(sys.argv[1:]) == 0:
|
|
239
238
|
parser.print_help()
|
|
240
239
|
parser.exit()
|