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
|
@@ -54,11 +54,11 @@ def _render_image(entry,
|
|
|
54
54
|
"""
|
|
55
55
|
Internal function for rendering a single image.
|
|
56
56
|
"""
|
|
57
|
-
|
|
57
|
+
|
|
58
58
|
rendering_result = {'failed_image':False,'missing_image':False,
|
|
59
59
|
'skipped_image':False,'annotated_image_path':None,
|
|
60
60
|
'max_conf':None,'file':entry['file']}
|
|
61
|
-
|
|
61
|
+
|
|
62
62
|
image_id = entry['file']
|
|
63
63
|
|
|
64
64
|
if 'failure' in entry and entry['failure'] is not None:
|
|
@@ -66,14 +66,14 @@ def _render_image(entry,
|
|
|
66
66
|
return rendering_result
|
|
67
67
|
|
|
68
68
|
assert 'detections' in entry and entry['detections'] is not None
|
|
69
|
-
|
|
69
|
+
|
|
70
70
|
max_conf = get_max_conf(entry)
|
|
71
71
|
rendering_result['max_conf'] = max_conf
|
|
72
|
-
|
|
72
|
+
|
|
73
73
|
if (max_conf < confidence_threshold) and render_detections_only:
|
|
74
74
|
rendering_result['skipped_image'] = True
|
|
75
75
|
return rendering_result
|
|
76
|
-
|
|
76
|
+
|
|
77
77
|
if images_dir is None:
|
|
78
78
|
image_filename_in_abs = image_id
|
|
79
79
|
assert path_is_abs(image_filename_in_abs), \
|
|
@@ -89,7 +89,7 @@ def _render_image(entry,
|
|
|
89
89
|
|
|
90
90
|
# Load the image
|
|
91
91
|
image = vis_utils.open_image(image_filename_in_abs)
|
|
92
|
-
|
|
92
|
+
|
|
93
93
|
# Find categories we're supposed to blur
|
|
94
94
|
category_ids_to_blur = []
|
|
95
95
|
if category_names_to_blur is not None:
|
|
@@ -98,21 +98,21 @@ def _render_image(entry,
|
|
|
98
98
|
for category_id in detector_label_map:
|
|
99
99
|
if detector_label_map[category_id] in category_names_to_blur:
|
|
100
100
|
category_ids_to_blur.append(category_id)
|
|
101
|
-
|
|
101
|
+
|
|
102
102
|
detections_to_blur = []
|
|
103
103
|
for d in entry['detections']:
|
|
104
104
|
if d['conf'] >= confidence_threshold and d['category'] in category_ids_to_blur:
|
|
105
105
|
detections_to_blur.append(d)
|
|
106
106
|
if len(detections_to_blur) > 0:
|
|
107
107
|
blur_detections(image,detections_to_blur)
|
|
108
|
-
|
|
108
|
+
|
|
109
109
|
# Resize if necessary
|
|
110
110
|
#
|
|
111
111
|
# If output_image_width is -1 or None, this will just return the original image
|
|
112
112
|
image = vis_utils.resize_image(image, output_image_width)
|
|
113
113
|
|
|
114
114
|
vis_utils.render_detection_bounding_boxes(
|
|
115
|
-
entry['detections'], image,
|
|
115
|
+
entry['detections'], image,
|
|
116
116
|
label_map=detector_label_map,
|
|
117
117
|
classification_label_map=classification_label_map,
|
|
118
118
|
confidence_threshold=confidence_threshold,
|
|
@@ -127,9 +127,9 @@ def _render_image(entry,
|
|
|
127
127
|
assert not os.path.isabs(image_id), "Can't preserve paths when operating on absolute paths"
|
|
128
128
|
annotated_img_path = os.path.join(out_dir, image_id)
|
|
129
129
|
os.makedirs(os.path.dirname(annotated_img_path),exist_ok=True)
|
|
130
|
-
|
|
130
|
+
|
|
131
131
|
image.save(annotated_img_path)
|
|
132
|
-
rendering_result['annotated_image_path'] = annotated_img_path
|
|
132
|
+
rendering_result['annotated_image_path'] = annotated_img_path
|
|
133
133
|
|
|
134
134
|
return rendering_result
|
|
135
135
|
|
|
@@ -155,14 +155,13 @@ def visualize_detector_output(detector_output_path,
|
|
|
155
155
|
parallelize_rendering_with_threads=True,
|
|
156
156
|
box_sort_order=None,
|
|
157
157
|
category_names_to_blur=None):
|
|
158
|
-
|
|
159
158
|
"""
|
|
160
159
|
Draws bounding boxes on images given the output of a detector.
|
|
161
160
|
|
|
162
161
|
Args:
|
|
163
162
|
detector_output_path (str): path to detector output .json file
|
|
164
163
|
out_dir (str): path to directory for saving annotated images
|
|
165
|
-
images_dir (str): folder where the images live; filenames in
|
|
164
|
+
images_dir (str, optional): folder where the images live; filenames in
|
|
166
165
|
[detector_output_path] should be relative to [image_dir]. Can be None if paths are
|
|
167
166
|
absolute.
|
|
168
167
|
confidence_threshold (float, optional): threshold above which detections will be rendered
|
|
@@ -170,25 +169,25 @@ def visualize_detector_output(detector_output_path,
|
|
|
170
169
|
output_image_width (int, optional): width in pixels to resize images for display,
|
|
171
170
|
preserving aspect ration; set to -1 to use original image width
|
|
172
171
|
random_seed (int, optional): seed to use for choosing images when sample != -1
|
|
173
|
-
render_detections_only (bool): only render images with above-threshold detections.
|
|
174
|
-
images are discarded after sampling, so if you want to see, e.g., 1000 non-empty
|
|
175
|
-
you can set [render_detections_only], but you need to sample more than 1000 images.
|
|
172
|
+
render_detections_only (bool, optional): only render images with above-threshold detections.
|
|
173
|
+
Empty images are discarded after sampling, so if you want to see, e.g., 1000 non-empty
|
|
174
|
+
images, you can set [render_detections_only], but you need to sample more than 1000 images.
|
|
176
175
|
classification_confidence_threshold (float, optional): only show classifications
|
|
177
176
|
above this threshold; does not impact whether images are rendered, only whether
|
|
178
177
|
classification labels (not detection categories) are displayed
|
|
179
178
|
html_output_file (str, optional): output path for an HTML index file (not written
|
|
180
179
|
if None)
|
|
181
|
-
html_output_options (dict, optional): HTML formatting options; see write_html_image_list
|
|
182
|
-
for details. The most common option you may want to supply here is
|
|
180
|
+
html_output_options (dict, optional): HTML formatting options; see write_html_image_list
|
|
181
|
+
for details. The most common option you may want to supply here is
|
|
183
182
|
'maxFiguresPerHtmlFile'.
|
|
184
183
|
preserve_path_structure (bool, optional): if False (default), writes images to unique
|
|
185
184
|
names in a flat structure in the output folder; if True, preserves relative paths
|
|
186
185
|
within the output folder
|
|
187
186
|
parallelize_rendering (bool, optional): whether to use concurrent workers for rendering
|
|
188
|
-
parallelize_rendering_n_cores (int, optional): number of concurrent workers to use
|
|
187
|
+
parallelize_rendering_n_cores (int, optional): number of concurrent workers to use
|
|
189
188
|
(ignored if parallelize_rendering is False)
|
|
190
189
|
parallelize_rendering_with_threads (bool, optional): determines whether we use
|
|
191
|
-
threads (True) or processes (False) for parallelization (ignored if parallelize_rendering
|
|
190
|
+
threads (True) or processes (False) for parallelization (ignored if parallelize_rendering
|
|
192
191
|
is False)
|
|
193
192
|
box_sort_order (str, optional): sorting scheme for detection boxes, can be None, "confidence", or
|
|
194
193
|
"reverse_confidence"
|
|
@@ -198,11 +197,11 @@ def visualize_detector_output(detector_output_path,
|
|
|
198
197
|
Returns:
|
|
199
198
|
list: list of paths to annotated images
|
|
200
199
|
"""
|
|
201
|
-
|
|
200
|
+
|
|
202
201
|
assert os.path.exists(detector_output_path), \
|
|
203
202
|
'Detector output file does not exist at {}'.format(detector_output_path)
|
|
204
203
|
|
|
205
|
-
if images_dir is not None:
|
|
204
|
+
if images_dir is not None:
|
|
206
205
|
assert os.path.isdir(images_dir), \
|
|
207
206
|
'Image folder {} is not available'.format(images_dir)
|
|
208
207
|
|
|
@@ -212,15 +211,15 @@ def visualize_detector_output(detector_output_path,
|
|
|
212
211
|
##%% Load detector output
|
|
213
212
|
|
|
214
213
|
detector_output = load_md_or_speciesnet_file(detector_output_path)
|
|
215
|
-
|
|
214
|
+
|
|
216
215
|
images = detector_output['images']
|
|
217
|
-
|
|
216
|
+
|
|
218
217
|
if confidence_threshold is None:
|
|
219
218
|
confidence_threshold = get_typical_confidence_threshold_from_results(detector_output)
|
|
220
|
-
|
|
219
|
+
|
|
221
220
|
assert confidence_threshold >= 0 and confidence_threshold <= 1, \
|
|
222
221
|
f'Confidence threshold {confidence_threshold} is invalid, must be in (0, 1).'
|
|
223
|
-
|
|
222
|
+
|
|
224
223
|
if 'detection_categories' in detector_output:
|
|
225
224
|
detector_label_map = detector_output['detection_categories']
|
|
226
225
|
else:
|
|
@@ -244,77 +243,84 @@ def visualize_detector_output(detector_output_path,
|
|
|
244
243
|
|
|
245
244
|
print('Rendering detections above a confidence threshold of {}'.format(
|
|
246
245
|
confidence_threshold))
|
|
247
|
-
|
|
246
|
+
|
|
248
247
|
classification_label_map = None
|
|
249
|
-
|
|
248
|
+
|
|
250
249
|
if 'classification_categories' in detector_output:
|
|
251
250
|
classification_label_map = detector_output['classification_categories']
|
|
252
|
-
|
|
251
|
+
|
|
253
252
|
rendering_results = []
|
|
254
|
-
|
|
253
|
+
|
|
255
254
|
if parallelize_rendering:
|
|
256
|
-
|
|
255
|
+
|
|
257
256
|
if parallelize_rendering_with_threads:
|
|
258
257
|
worker_string = 'threads'
|
|
259
258
|
else:
|
|
260
259
|
worker_string = 'processes'
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
pool = ThreadPool(parallelize_rendering_n_cores)
|
|
260
|
+
|
|
261
|
+
pool = None
|
|
262
|
+
try:
|
|
263
|
+
if parallelize_rendering_n_cores is None:
|
|
264
|
+
if parallelize_rendering_with_threads:
|
|
265
|
+
pool = ThreadPool()
|
|
266
|
+
else:
|
|
267
|
+
pool = Pool()
|
|
270
268
|
else:
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
269
|
+
if parallelize_rendering_with_threads:
|
|
270
|
+
pool = ThreadPool(parallelize_rendering_n_cores)
|
|
271
|
+
else:
|
|
272
|
+
pool = Pool(parallelize_rendering_n_cores)
|
|
273
|
+
print('Rendering images with {} {}'.format(parallelize_rendering_n_cores,
|
|
274
|
+
worker_string))
|
|
275
|
+
rendering_results = list(tqdm(pool.imap(
|
|
276
|
+
partial(_render_image,detector_label_map=detector_label_map,
|
|
277
|
+
classification_label_map=classification_label_map,
|
|
278
|
+
confidence_threshold=confidence_threshold,
|
|
279
|
+
classification_confidence_threshold=classification_confidence_threshold,
|
|
280
|
+
render_detections_only=render_detections_only,
|
|
281
|
+
preserve_path_structure=preserve_path_structure,
|
|
282
|
+
out_dir=out_dir,
|
|
283
|
+
images_dir=images_dir,
|
|
284
|
+
output_image_width=output_image_width,
|
|
285
|
+
box_sort_order=box_sort_order,
|
|
286
|
+
category_names_to_blur=category_names_to_blur),
|
|
287
|
+
images), total=len(images)))
|
|
288
|
+
finally:
|
|
289
|
+
if pool is not None:
|
|
290
|
+
pool.close()
|
|
291
|
+
pool.join()
|
|
292
|
+
print("Pool closed and joined for detector output visualization")
|
|
293
|
+
|
|
288
294
|
else:
|
|
289
|
-
|
|
295
|
+
|
|
290
296
|
for entry in tqdm(images):
|
|
291
|
-
|
|
297
|
+
|
|
292
298
|
rendering_result = _render_image(entry,detector_label_map,classification_label_map,
|
|
293
299
|
confidence_threshold,classification_confidence_threshold,
|
|
294
300
|
render_detections_only,preserve_path_structure,out_dir,
|
|
295
301
|
images_dir,output_image_width,box_sort_order,
|
|
296
302
|
category_names_to_blur=category_names_to_blur)
|
|
297
303
|
rendering_results.append(rendering_result)
|
|
298
|
-
|
|
304
|
+
|
|
299
305
|
# ...for each image
|
|
300
|
-
|
|
306
|
+
|
|
301
307
|
failed_images = [r for r in rendering_results if r['failed_image']]
|
|
302
308
|
missing_images = [r for r in rendering_results if r['missing_image']]
|
|
303
309
|
skipped_images = [r for r in rendering_results if r['skipped_image']]
|
|
304
|
-
|
|
310
|
+
|
|
305
311
|
print('Skipped {} failed images (of {})'.format(len(failed_images),len(images)))
|
|
306
312
|
print('Skipped {} missing images (of {})'.format(len(missing_images),len(images)))
|
|
307
313
|
print('Skipped {} below-threshold images (of {})'.format(len(skipped_images),len(images)))
|
|
308
|
-
|
|
314
|
+
|
|
309
315
|
print(f'Rendered detection results to {out_dir}')
|
|
310
316
|
|
|
311
317
|
annotated_image_paths = [r['annotated_image_path'] for r in rendering_results if \
|
|
312
318
|
r['annotated_image_path'] is not None]
|
|
313
|
-
|
|
319
|
+
|
|
314
320
|
if html_output_file is not None:
|
|
315
|
-
|
|
321
|
+
|
|
316
322
|
html_dir = os.path.dirname(html_output_file)
|
|
317
|
-
|
|
323
|
+
|
|
318
324
|
html_image_info = []
|
|
319
325
|
|
|
320
326
|
for r in rendering_results:
|
|
@@ -329,10 +335,10 @@ def visualize_detector_output(detector_output_path,
|
|
|
329
335
|
'text-align:left;margin-top:20;margin-bottom:5'
|
|
330
336
|
d['title'] = '{} (max conf: {})'.format(r['file'],r['max_conf'])
|
|
331
337
|
html_image_info.append(d)
|
|
332
|
-
|
|
338
|
+
|
|
333
339
|
_ = write_html_image_list.write_html_image_list(html_output_file,html_image_info,
|
|
334
340
|
options=html_output_options)
|
|
335
|
-
|
|
341
|
+
|
|
336
342
|
return annotated_image_paths
|
|
337
343
|
|
|
338
344
|
# ...def visualize_detector_output(...)
|
|
@@ -340,8 +346,8 @@ def visualize_detector_output(detector_output_path,
|
|
|
340
346
|
|
|
341
347
|
#%% Command-line driver
|
|
342
348
|
|
|
343
|
-
def main():
|
|
344
|
-
|
|
349
|
+
def main(): # noqa
|
|
350
|
+
|
|
345
351
|
parser = argparse.ArgumentParser(
|
|
346
352
|
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
347
353
|
description='Annotate the bounding boxes predicted by a detector above '
|
|
@@ -399,11 +405,11 @@ def main():
|
|
|
399
405
|
parser.exit()
|
|
400
406
|
|
|
401
407
|
args = parser.parse_args()
|
|
402
|
-
|
|
408
|
+
|
|
403
409
|
category_names_to_blur = args.category_names_to_blur
|
|
404
410
|
if category_names_to_blur is not None:
|
|
405
411
|
category_names_to_blur = category_names_to_blur.split(',')
|
|
406
|
-
|
|
412
|
+
|
|
407
413
|
visualize_detector_output(
|
|
408
414
|
detector_output_path=args.detector_output_path,
|
|
409
415
|
out_dir=args.out_dir,
|
|
@@ -429,12 +435,12 @@ if __name__ == '__main__':
|
|
|
429
435
|
#%% Interactive driver
|
|
430
436
|
|
|
431
437
|
if False:
|
|
432
|
-
|
|
438
|
+
|
|
433
439
|
pass
|
|
434
440
|
|
|
435
441
|
#%%
|
|
436
|
-
|
|
437
|
-
detector_output_path = os.path.expanduser('
|
|
442
|
+
|
|
443
|
+
detector_output_path = os.path.expanduser('detections.json')
|
|
438
444
|
out_dir = r'g:\temp\preview'
|
|
439
445
|
images_dir = r'g:\camera_traps\camera_trap_images'
|
|
440
446
|
confidence_threshold = 0.15
|
|
@@ -465,6 +471,6 @@ if False:
|
|
|
465
471
|
parallelize_rendering,
|
|
466
472
|
parallelize_rendering_n_cores,
|
|
467
473
|
parallelize_rendering_with_threads)
|
|
468
|
-
|
|
474
|
+
|
|
469
475
|
from megadetector.utils.path_utils import open_file
|
|
470
476
|
open_file(html_output_file)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: megadetector
|
|
3
|
-
Version:
|
|
3
|
+
Version: 10.0.0
|
|
4
4
|
Summary: MegaDetector is an AI model that helps conservation folks spend less time doing boring things with camera trap images.
|
|
5
5
|
Author-email: Your friendly neighborhood MegaDetector team <cameratraps@lila.science>
|
|
6
6
|
Maintainer-email: Your friendly neighborhood MegaDetector team <cameratraps@lila.science>
|
|
@@ -47,10 +47,13 @@ Requires-Dist: scikit-learn>=1.3.1
|
|
|
47
47
|
Requires-Dist: pandas>=2.1.1
|
|
48
48
|
Requires-Dist: python-dateutil
|
|
49
49
|
Requires-Dist: send2trash
|
|
50
|
+
Requires-Dist: python-dateutil
|
|
51
|
+
Requires-Dist: clipboard
|
|
50
52
|
Requires-Dist: dill
|
|
53
|
+
Requires-Dist: ruff
|
|
54
|
+
Requires-Dist: pytest
|
|
51
55
|
Requires-Dist: ultralytics-yolov5==0.1.1
|
|
52
56
|
Requires-Dist: yolov9pip==0.0.4
|
|
53
|
-
Requires-Dist: python-dateutil
|
|
54
57
|
Dynamic: license-file
|
|
55
58
|
|
|
56
59
|
# MegaDetector
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
megadetector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
megadetector/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
megadetector/api/batch_processing/integration/digiKam/setup.py,sha256=7P1X3JYrBDXmLUeLRrzxNfDkL5lo-pY8nXsp9Cz8rOI,203
|
|
4
|
+
megadetector/api/batch_processing/integration/digiKam/xmp_integration.py,sha256=dbib8WseSrNpLnSTKvnmEseii5ls5WAi1C612ovmwps,17796
|
|
5
|
+
megadetector/api/batch_processing/integration/eMammal/test_scripts/config_template.py,sha256=UnvrgaFRBu59MuVUJa2WpG8ebcOJWcNeZEx6GWuYLzc,73
|
|
6
|
+
megadetector/api/batch_processing/integration/eMammal/test_scripts/push_annotations_to_emammal.py,sha256=86MluxfHY5JsslX0OWgmVUyuPP6DMDE-o6kYKdlTtMI,3583
|
|
7
|
+
megadetector/api/batch_processing/integration/eMammal/test_scripts/select_images_for_testing.py,sha256=z8DkkV9VU69HFPEwwTVDQI9BSJa72TMoqwRt6ZiilNo,1376
|
|
8
|
+
megadetector/classification/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
megadetector/classification/aggregate_classifier_probs.py,sha256=ScRlN7yV6qOES8hDwyAylKQ92Vn-klbdPGqDbPM3pGw,3417
|
|
10
|
+
megadetector/classification/analyze_failed_images.py,sha256=dsNajqn4c-yL6vUelxqhotdNBFLHzaONfJkMAdwX7QI,8426
|
|
11
|
+
megadetector/classification/cache_batchapi_outputs.py,sha256=m4HrRg2XSP1oP_1YTzPSOydnhyR1pWu0m2LbIXUUWwE,6304
|
|
12
|
+
megadetector/classification/create_classification_dataset.py,sha256=Sv79ocsy1sWAWzzkKg4tWruQD434faOpJGBHb4Kt3XY,25404
|
|
13
|
+
megadetector/classification/crop_detections.py,sha256=LWT3zzNKfJNwTVKl1-nM_qzjkdCuFjEmPRDsSZ0MV4Y,20387
|
|
14
|
+
megadetector/classification/csv_to_json.py,sha256=j_edQLiMyDvpZFxYDNh-BAvzwSM4zbbQEXMIH-44nAs,5894
|
|
15
|
+
megadetector/classification/detect_and_crop.py,sha256=Y3T1gr2DJr6LEg17QXoBvhYMihnMAmbKJ-gBmmwoMd8,36925
|
|
16
|
+
megadetector/classification/evaluate_model.py,sha256=x51dfebVtsObAcLafXq7xMJv7hOiwiXHM-Cg06sUAyw,19323
|
|
17
|
+
megadetector/classification/identify_mislabeled_candidates.py,sha256=NvLAUk5VgwyyPKMxY875V5k2iRsl-Eh_sAuZRjtgc4c,5011
|
|
18
|
+
megadetector/classification/json_to_azcopy_list.py,sha256=Om8efCzRwlfA5LRXtzOgdrY0P5YDofs0vuewQvKNmsA,1669
|
|
19
|
+
megadetector/classification/json_validator.py,sha256=EOwX2aV_GDhkz6EQqkq6iC08IuBlNiUiR4OMUXuSGWo,26417
|
|
20
|
+
megadetector/classification/map_classification_categories.py,sha256=VFSBQhZjJMwMDZwv-rFHs4cE3q5GionqLYumjBypZhw,10661
|
|
21
|
+
megadetector/classification/merge_classification_detection_output.py,sha256=N4HhGSKZz_YbgY8SNtxxjw3S-CvpwfpIEsj2WCpUD7M,20163
|
|
22
|
+
megadetector/classification/prepare_classification_script.py,sha256=hD_vdd4oMBimz4rTkuTVI51dYnlDXHaAoBdL7FvXan4,6361
|
|
23
|
+
megadetector/classification/prepare_classification_script_mc.py,sha256=e9wLNy3EGLrUBSdhDacoa4Y9ciY1CI6YnYy9gaE7k-U,7061
|
|
24
|
+
megadetector/classification/run_classifier.py,sha256=JKMdeD33yo-CY6lyTfPZmOWnvr_Ft-vDbysfdSiXSX4,9323
|
|
25
|
+
megadetector/classification/save_mislabeled.py,sha256=hoxYmGbfGxEwvuH9JcYDW8NOs8CxCx0K4UtMHDaG0KI,3386
|
|
26
|
+
megadetector/classification/train_classifier.py,sha256=ksAcLpIn-D1sq8jdJjpjru8cUNXLhEoNVJsfWRayfLA,32334
|
|
27
|
+
megadetector/classification/train_classifier_tf.py,sha256=sXJ9i_BhEam5ndxm65cwe3CaZIFTg5-eEdKGhMpEhHo,28051
|
|
28
|
+
megadetector/classification/train_utils.py,sha256=BNOnGl2dNegsQdOYzfq5IE3hsS2gL3eUd9q-Tgimf_E,11293
|
|
29
|
+
megadetector/classification/efficientnet/__init__.py,sha256=e-jfknjzCc5a0CSW-TaZ2vi0SPU1OMIsayoz2s94QAo,182
|
|
30
|
+
megadetector/classification/efficientnet/model.py,sha256=o7m379-FVeHrioW1HSJ48fLUqH9MMlf4b1BwktL2EoQ,17120
|
|
31
|
+
megadetector/classification/efficientnet/utils.py,sha256=76SQdh0zK7CFcwTW4kiechCGMHSftPT0tC1PtqNRLZI,24756
|
|
32
|
+
megadetector/data_management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
|
+
megadetector/data_management/camtrap_dp_to_coco.py,sha256=HoCGMzZTEvnudnAjbOr-mCizXHmc8mMNSUChy_Q9PkI,9673
|
|
34
|
+
megadetector/data_management/cct_json_utils.py,sha256=iybRIlARCsId-yWiwRckNZhfmY5aFFfsiJbyaXCDr1E,19535
|
|
35
|
+
megadetector/data_management/cct_to_md.py,sha256=e1fYevSz0m65n5H16uB6uwzNiXiwxjdB2ka5p68R4d0,5120
|
|
36
|
+
megadetector/data_management/cct_to_wi.py,sha256=wcBOmurXY5I-hiqV6SmRSGUAeYaKHEU1LgCZjqVmCyw,9561
|
|
37
|
+
megadetector/data_management/coco_to_labelme.py,sha256=uYJ60XoZfHUEfLzj-EjLyeNM590skNnMp-IThWwNISo,8683
|
|
38
|
+
megadetector/data_management/coco_to_yolo.py,sha256=UwFaLRuh5emeZx8i-Bi4uyPxXSH0bG3LRhv8I5NxJTQ,28602
|
|
39
|
+
megadetector/data_management/generate_crops_from_cct.py,sha256=sKvT0NTsKhuVQYI0SOQYwrDgMY1rVQO97AXftz9ERSQ,5357
|
|
40
|
+
megadetector/data_management/get_image_sizes.py,sha256=sZtjRxhlIj56oA9X4Iq1ek4xeT3MllyWpZCOV19MkCY,6501
|
|
41
|
+
megadetector/data_management/labelme_to_coco.py,sha256=SO6DMfJ9WNlMUHF9EUYWjSNyepqudO3qzxknnzSZHdE,20958
|
|
42
|
+
megadetector/data_management/labelme_to_yolo.py,sha256=bsqpNUsnDJucJ60wSQD_yvq_tWiots1u4tSFNiHeaYA,12769
|
|
43
|
+
megadetector/data_management/mewc_to_md.py,sha256=09XHEykIG-whGkgEIkho7xfVuPlic1TYTKGAufv_tto,12637
|
|
44
|
+
megadetector/data_management/ocr_tools.py,sha256=aYpULCPn_tHaqatOd8qjEpKJ7MksRZS0o1kqQF04IE0,31389
|
|
45
|
+
megadetector/data_management/read_exif.py,sha256=M_8492al57kWgZ-0gNWLNdzpm442zPCC8J2DtgzHAyA,29646
|
|
46
|
+
megadetector/data_management/remap_coco_categories.py,sha256=DT4Rdt7Y1IdhbO2TZiBhQDESdit-l_-b_Hw0tbJ2Nuw,7090
|
|
47
|
+
megadetector/data_management/remove_exif.py,sha256=5JHGWMIeXqB2PE2ZwIMJOEtNYopxknNDwynQAuJCLvw,4031
|
|
48
|
+
megadetector/data_management/rename_images.py,sha256=iHkdQ_c1G9Oc8C4wcnPLmhKv0S9i9g7ppbytfBBqn2Y,6516
|
|
49
|
+
megadetector/data_management/resize_coco_dataset.py,sha256=onXe3y27QKC53OQQ2Y2h9115-UOztQYWpOoTljUbKxY,26613
|
|
50
|
+
megadetector/data_management/speciesnet_to_md.py,sha256=kINd7PfWC1G-kawZH8YDigtBAuewahLYpLszKC-lpOM,1368
|
|
51
|
+
megadetector/data_management/wi_download_csv_to_coco.py,sha256=rhqWSEmDiXs1GbHavoNwdGSqk01-a-4xmz7z7x1Qjs4,7973
|
|
52
|
+
megadetector/data_management/yolo_output_to_md_output.py,sha256=4wU31dHo8rSwge91m0bO0YAYrytvmxZH0YRHiRjRGa8,22509
|
|
53
|
+
megadetector/data_management/yolo_to_coco.py,sha256=5fa7VAbRZQgWK-03DeyVhpj6qeIW6cT7v8B33rhsN3I,31003
|
|
54
|
+
megadetector/data_management/annotations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
55
|
+
megadetector/data_management/annotations/annotation_constants.py,sha256=Fp_uaFQbMzhjMBcXOBUuTA9eOmenjPboMQojPQUaJjI,951
|
|
56
|
+
megadetector/data_management/databases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
57
|
+
megadetector/data_management/databases/add_width_and_height_to_db.py,sha256=EYfFGPkXyFz6ZGQfXjCK3pNXLBg0hu73wiACdEEB0E0,2964
|
|
58
|
+
megadetector/data_management/databases/combine_coco_camera_traps_files.py,sha256=Au7akR2KZHm_l8-MGGRGf0CQy1az_JVgZW5Yz1_XQeQ,6609
|
|
59
|
+
megadetector/data_management/databases/integrity_check_json_db.py,sha256=kxGCHpBADXT_LHVLUENGvmby-orvVYIsK6fdgqhABBI,17386
|
|
60
|
+
megadetector/data_management/databases/subset_json_db.py,sha256=mO1eAkrfCSAp2_r5vHVjHvet_utFJcWRm3rNa8WvSx8,4134
|
|
61
|
+
megadetector/data_management/lila/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
|
+
megadetector/data_management/lila/create_lila_blank_set.py,sha256=tApCL4XN1Vzl6YvcdI6SY4TZbHeCyHLzNYweFfX0sy0,19490
|
|
63
|
+
megadetector/data_management/lila/create_lila_test_set.py,sha256=UWJPKrwNW-UVeGrMUrFvmIt2UHVyuFiPzRFKkbEbk5A,5014
|
|
64
|
+
megadetector/data_management/lila/create_links_to_md_results_files.py,sha256=XrtbM1MJtN-4PKzViGkDov8Rw-lJogF1E8_hHh6wR9U,3687
|
|
65
|
+
megadetector/data_management/lila/download_lila_subset.py,sha256=coLlmga7r5I37L_YxjUoERLC1JAGUjcED16oWtd072Y,5339
|
|
66
|
+
megadetector/data_management/lila/generate_lila_per_image_labels.py,sha256=PIFfQudH2z02q4diJ0zujqIneWnnrEN9ceHSCWmZYQQ,25760
|
|
67
|
+
megadetector/data_management/lila/get_lila_annotation_counts.py,sha256=1U-49HVsgc_rmN1KrocI1mwFvS61FPxA9I_DyzS9YMg,5534
|
|
68
|
+
megadetector/data_management/lila/get_lila_image_counts.py,sha256=Jz89nNHwghguMJBUs1v_ZN5VPwg9zH9ggat-6ZsUfQ4,3518
|
|
69
|
+
megadetector/data_management/lila/lila_common.py,sha256=IRWs46TrxcjckLidDwXPmb5O6kyW6qvSWf8CQo2ctfM,10791
|
|
70
|
+
megadetector/data_management/lila/test_lila_metadata_urls.py,sha256=ThU78Ks5V3rFyJSKStFcM5M2yTlhR_pgMTa6_KuF5Hs,5256
|
|
71
|
+
megadetector/detection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
|
+
megadetector/detection/change_detection.py,sha256=Ne3GajbH_0KPBU8ruHp4Rkr0uKd5oKAMQ3CQTRKRHgQ,28659
|
|
73
|
+
megadetector/detection/process_video.py,sha256=yc5TdaCxUX1dBzckXwp0b7ehXjfNqAIAjQIFG5qDEy4,52388
|
|
74
|
+
megadetector/detection/pytorch_detector.py,sha256=-0b016Oyv0IlQcRvvKnK7m0ab0aTnPBn30KLTDc230k,46861
|
|
75
|
+
megadetector/detection/run_detector.py,sha256=mFnGU3D6jZuLTatuszftWpwf8qC_nA5rJv1HRjhL9F4,46479
|
|
76
|
+
megadetector/detection/run_detector_batch.py,sha256=RCpGHW-WSCr87JNcG6Iuumtx30auXnSWWl4CbueCUSs,72863
|
|
77
|
+
megadetector/detection/run_inference_with_yolov5_val.py,sha256=A-AQuARVVy7oR9WtenCZwzvd5U3HQwihMr4Jkiv9U0g,53515
|
|
78
|
+
megadetector/detection/run_tiled_inference.py,sha256=wrQkKIloHBO9v2i0nZ1_Tt75iFtVrnco3Y4FafoVxdw,39382
|
|
79
|
+
megadetector/detection/tf_detector.py,sha256=3b2MiqgMw8KBDzHQliUSDXWrmKpa9iZnfe6EgYpMcYo,8398
|
|
80
|
+
megadetector/detection/video_utils.py,sha256=nk2xsbJK5e7IcXdYD7648MkicnPL8KDv-scLQAK_tQc,44095
|
|
81
|
+
megadetector/postprocessing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
82
|
+
megadetector/postprocessing/add_max_conf.py,sha256=9MYtsH2mwkiaZb7Qcor5J_HskfAj7d9srp8G_Qldpk0,1722
|
|
83
|
+
megadetector/postprocessing/categorize_detections_by_size.py,sha256=DpZpRNFlyeOfWuOc6ICuENgIWDCEtiErJ_frBZp9lYM,5382
|
|
84
|
+
megadetector/postprocessing/classification_postprocessing.py,sha256=y3y46XDydA7SvSQpfJ8XA0-PhNw3y5eB7Obvb2mDiMo,59243
|
|
85
|
+
megadetector/postprocessing/combine_batch_outputs.py,sha256=I7cVKoAi_Dr5a8TBZGp9hU1QmkaDHB5tIgN3oGOeUfk,8417
|
|
86
|
+
megadetector/postprocessing/compare_batch_results.py,sha256=Dn0eD5uVaaHd3vsGE3iA8qvoGZe9mAp5MGpxg7jTaic,83214
|
|
87
|
+
megadetector/postprocessing/convert_output_format.py,sha256=FiwKSiMyEeNVLLfjpQtx3CrMbchwNUaW2TgLmdXGFVo,14892
|
|
88
|
+
megadetector/postprocessing/create_crop_folder.py,sha256=T37HnvBEakikXY3n3Bgk5boFo_0-Z5aKnkEWXv-Ki4s,23166
|
|
89
|
+
megadetector/postprocessing/detector_calibration.py,sha256=UFjJ8D6tMghatLRj3CyrtJ7vrPIJkULMNsYMIj98j2M,20495
|
|
90
|
+
megadetector/postprocessing/generate_csv_report.py,sha256=QLLxE2b6JXoqtuU4h1tgVROgOQXjwK4tCTYcNF0XJlk,19160
|
|
91
|
+
megadetector/postprocessing/load_api_results.py,sha256=v2Nn7wSXRqAetr3V_vohxycCoBFa9UrlsAHXtS5r23I,7873
|
|
92
|
+
megadetector/postprocessing/md_to_coco.py,sha256=CkN1ky4A2uZj_gUu8rmyaaxyOH00k6J5cuW_ZtKv3Ow,16932
|
|
93
|
+
megadetector/postprocessing/md_to_labelme.py,sha256=r-EGyXVrSSyN6N6wqQ6pwKeV-fCNzb50ZkJqaDqjrvM,11935
|
|
94
|
+
megadetector/postprocessing/md_to_wi.py,sha256=AiECnonxGBrAvWYl_hnOGvciGRZKBfF4BcJX6ZV3hyE,1211
|
|
95
|
+
megadetector/postprocessing/merge_detections.py,sha256=wXC1dPvA2TTGyjQGeUZNFIMiEkCty6IGTiOzaVh4YxE,15664
|
|
96
|
+
megadetector/postprocessing/postprocess_batch_results.py,sha256=iAoCLKgwfC_vlrUGNg9cI694nzohJLNvdT7R0FScfLI,84597
|
|
97
|
+
megadetector/postprocessing/remap_detection_categories.py,sha256=BE6Ce-PGBEx1FyG3XwbYp2D5sh5xUlVf6fonaMuPMAg,7927
|
|
98
|
+
megadetector/postprocessing/render_detection_confusion_matrix.py,sha256=oNvDTh5td5ynELNnhz4XaLP2HiwLuojkJlob15TpgcY,26365
|
|
99
|
+
megadetector/postprocessing/separate_detections_into_folders.py,sha256=rRYvRblQFKYTV-dNt7e19Eco9eLTaGru_i9aOCGyEH0,32258
|
|
100
|
+
megadetector/postprocessing/subset_json_detector_output.py,sha256=Quz6xxM1T0N6bb1zGVKMv5GHBECLwNtuu9Sb35bWPhI,32188
|
|
101
|
+
megadetector/postprocessing/top_folders_to_bottom.py,sha256=zYrqMHjUZG8urh2CYphfs91ZQ620uqe-TL8jVYy8KVw,6049
|
|
102
|
+
megadetector/postprocessing/validate_batch_results.py,sha256=alIAJj4g76m3sXDwjkj6JaJCfeoWrGLyY89xCvw64K4,11012
|
|
103
|
+
megadetector/postprocessing/repeat_detection_elimination/find_repeat_detections.py,sha256=XgVeyga8iSC01MAjXxb2rn-CgJTYHqC_gfxxEoSn4aw,9420
|
|
104
|
+
megadetector/postprocessing/repeat_detection_elimination/remove_repeat_detections.py,sha256=mJtexTuWRJbjxu-ss4GRs6Ivl7PFDWlFVSitXTbpbhA,2820
|
|
105
|
+
megadetector/postprocessing/repeat_detection_elimination/repeat_detections_core.py,sha256=ku4tHM5kRemDtX3leMZIpQPhz4gJEhIIFctCkn_5tCk,66781
|
|
106
|
+
megadetector/taxonomy_mapping/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
107
|
+
megadetector/taxonomy_mapping/map_lila_taxonomy_to_wi_taxonomy.py,sha256=cutQ4rtZ6T3WtnpHxUd9A5tM5f3bdyUdMMbe8Qss8eA,17694
|
|
108
|
+
megadetector/taxonomy_mapping/map_new_lila_datasets.py,sha256=eSC18J-hxL9OUUN1hx9EGtSKaut9qX15VAek3NYFkAA,4088
|
|
109
|
+
megadetector/taxonomy_mapping/prepare_lila_taxonomy_release.py,sha256=rj9L9SPjsqiJJK0ZLWX9c3BVDWEr6t6MWSP-slpO0UY,5097
|
|
110
|
+
megadetector/taxonomy_mapping/preview_lila_taxonomy.py,sha256=M5V7kmKGmICrV12Y0z3gWVFcZp0mz3KxxWIA1ZTGt_o,17341
|
|
111
|
+
megadetector/taxonomy_mapping/retrieve_sample_image.py,sha256=YZcOsu15ZSQCZSzkYPw80Rk6eCfnDjKg5y2wyYKkybY,1866
|
|
112
|
+
megadetector/taxonomy_mapping/simple_image_download.py,sha256=sxmt8LGOd0rQCLpJhu3XI_tqzI_b3U1iVl5d9sK9Ygc,6875
|
|
113
|
+
megadetector/taxonomy_mapping/species_lookup.py,sha256=LQmX6Vx_RW0ai9QwRFNRs38P4fEAJreSbKlSxK94PTg,32969
|
|
114
|
+
megadetector/taxonomy_mapping/taxonomy_csv_checker.py,sha256=PIQh-5q43ibSgT6CdG1iwfZXZx_zOHWSv7AiHnql8d4,4782
|
|
115
|
+
megadetector/taxonomy_mapping/taxonomy_graph.py,sha256=GjrDZq7HesF40cUA9sPz7bGKojRdM2KBFvcUPy69hp4,12203
|
|
116
|
+
megadetector/taxonomy_mapping/validate_lila_category_mappings.py,sha256=sAKYreO1FDMxWl_0IvkmaGhiuS4OtzzMvSosovpugNc,2415
|
|
117
|
+
megadetector/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
118
|
+
megadetector/utils/ct_utils.py,sha256=onduG59K7Fgx-Kndw4fyA3Fba8De3-Raw20EUghaSpk,58303
|
|
119
|
+
megadetector/utils/directory_listing.py,sha256=CZBzwg0Fus1xuRAp3ycEBjViDdwwk4eKdGq06ZERLDg,6414
|
|
120
|
+
megadetector/utils/gpu_test.py,sha256=5zUfAVeSjH8I08eCqayFmMxL-0mix8SjJJTe5ORABvU,3544
|
|
121
|
+
megadetector/utils/md_tests.py,sha256=Qp_UfmD6HhTJYu-u0xHaXTl9CFnYIngoYL6BEA4egaA,76435
|
|
122
|
+
megadetector/utils/path_utils.py,sha256=tUNnx2OzDm4ND5rEhIw60DS0dUfXqByk6JJ4DKNlibU,98982
|
|
123
|
+
megadetector/utils/process_utils.py,sha256=gQcpH9WYvGPUs0FhtJ5_Xvl6JsvoGz8_mnDQk0PbTRM,5673
|
|
124
|
+
megadetector/utils/split_locations_into_train_val.py,sha256=fd_6pj1aWY6hybwaXvBn9kBcOHjI90U-OsTmEAGpeu8,10297
|
|
125
|
+
megadetector/utils/string_utils.py,sha256=r2Maw3zbzk3EyaZcNkdqr96yP_8m4ey6v0WxlemEY9U,6155
|
|
126
|
+
megadetector/utils/url_utils.py,sha256=VWYDHbWctTtw7mvbb_A5DTdF3v9V2mWhBoOP5MGE5S8,25728
|
|
127
|
+
megadetector/utils/wi_utils.py,sha256=L9GU-hpEtQuOZHrZfe-Fkm9_XfucErCGo-v-n8gJytw,100521
|
|
128
|
+
megadetector/utils/write_html_image_list.py,sha256=6Tbe5wyUxoBYJgH9yVrxxKCeWF2BVre_wQMEOQJ-ZIU,9068
|
|
129
|
+
megadetector/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
130
|
+
megadetector/visualization/plot_utils.py,sha256=uDDlOhdaJ3V8sGj2kS9b0cgszKc8WCq2_ofl6TW_XUs,10727
|
|
131
|
+
megadetector/visualization/render_images_with_thumbnails.py,sha256=-XX4PG4wnrFjFTIwd0sMxXxKMxPuu0SZ_TfK3dI1x8Y,8425
|
|
132
|
+
megadetector/visualization/visualization_utils.py,sha256=_f8x6Tx5mWeGYpvTbkBDOGGaxenK-qPi2ba3ndOLQDk,75865
|
|
133
|
+
megadetector/visualization/visualize_db.py,sha256=DTqeLPqtSdY-DVAUJpGxkcHPnXHI5WJifsTuWoDKaRY,25951
|
|
134
|
+
megadetector/visualization/visualize_detector_output.py,sha256=BBX93VFHJubMJVH0h-QNncS_VypOitPFHV_mv4NPqy0,20217
|
|
135
|
+
megadetector-10.0.0.dist-info/licenses/LICENSE,sha256=RMa3qq-7Cyk7DdtqRj_bP1oInGFgjyHn9-PZ3PcrqIs,1100
|
|
136
|
+
megadetector-10.0.0.dist-info/METADATA,sha256=nRDKdsXF-B_Zfio310mRuoxfsy1usVmYtTlvyTJW5X4,6519
|
|
137
|
+
megadetector-10.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
138
|
+
megadetector-10.0.0.dist-info/top_level.txt,sha256=wf9DXa8EwiOSZ4G5IPjakSxBPxTDjhYYnqWRfR-zS4M,13
|
|
139
|
+
megadetector-10.0.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|