megadetector 5.0.19__py3-none-any.whl → 5.0.20__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/data_management/importers/bellevue_to_json.py +0 -1
- megadetector/data_management/importers/osu-small-animals-to-json.py +364 -0
- megadetector/data_management/lila/generate_lila_per_image_labels.py +1 -1
- megadetector/data_management/lila/get_lila_annotation_counts.py +2 -0
- megadetector/data_management/lila/lila_common.py +28 -12
- megadetector/data_management/lila/test_lila_metadata_urls.py +17 -8
- megadetector/data_management/read_exif.py +73 -0
- megadetector/detection/process_video.py +84 -16
- megadetector/detection/run_detector.py +36 -13
- megadetector/detection/run_detector_batch.py +104 -15
- megadetector/detection/run_inference_with_yolov5_val.py +20 -23
- megadetector/detection/video_utils.py +60 -37
- megadetector/taxonomy_mapping/map_new_lila_datasets.py +8 -3
- megadetector/taxonomy_mapping/prepare_lila_taxonomy_release.py +3 -2
- megadetector/taxonomy_mapping/preview_lila_taxonomy.py +3 -1
- megadetector/utils/ct_utils.py +20 -0
- megadetector/utils/md_tests.py +50 -6
- {megadetector-5.0.19.dist-info → megadetector-5.0.20.dist-info}/METADATA +2 -2
- {megadetector-5.0.19.dist-info → megadetector-5.0.20.dist-info}/RECORD +22 -22
- {megadetector-5.0.19.dist-info → megadetector-5.0.20.dist-info}/WHEEL +1 -1
- megadetector/data_management/importers/snapshot_safari_importer_reprise.py +0 -677
- {megadetector-5.0.19.dist-info → megadetector-5.0.20.dist-info}/LICENSE +0 -0
- {megadetector-5.0.19.dist-info → megadetector-5.0.20.dist-info}/top_level.txt +0 -0
|
@@ -228,9 +228,10 @@ def run_callback_on_frames(input_video_file,
|
|
|
228
228
|
input_video_file (str): video file to process
|
|
229
229
|
frame_callback (function): callback to run on frames, should take an np.array and a string and
|
|
230
230
|
return a single value. callback should expect PIL-formatted (RGB) images.
|
|
231
|
-
every_n_frames (
|
|
232
|
-
if this is None or 1, every frame is processed.
|
|
233
|
-
|
|
231
|
+
every_n_frames (float, optional): sample every Nth frame starting from the first frame;
|
|
232
|
+
if this is None or 1, every frame is processed. If this is a negative value, that's
|
|
233
|
+
interpreted as a sampling rate in seconds, which is rounded to the nearest frame sampling
|
|
234
|
+
rate. Mutually exclusive with frames_to_process.
|
|
234
235
|
verbose (bool, optional): enable additional debug console output
|
|
235
236
|
frames_to_process (list of int, optional): process this specific set of frames;
|
|
236
237
|
mutually exclusive with every_n_frames. If all values are beyond the length
|
|
@@ -263,6 +264,13 @@ def run_callback_on_frames(input_video_file,
|
|
|
263
264
|
frame_filenames = []
|
|
264
265
|
results = []
|
|
265
266
|
|
|
267
|
+
if every_n_frames is not None and every_n_frames < 0:
|
|
268
|
+
every_n_seconds = abs(every_n_frames)
|
|
269
|
+
every_n_frames = int(every_n_seconds * frame_rate)
|
|
270
|
+
if verbose:
|
|
271
|
+
print('Interpreting a time sampling rate of {} hz as a frame interval of {}'.format(
|
|
272
|
+
every_n_seconds,every_n_frames))
|
|
273
|
+
|
|
266
274
|
# frame_number = 0
|
|
267
275
|
for frame_number in range(0,n_frames):
|
|
268
276
|
|
|
@@ -776,6 +784,10 @@ class FrameToVideoOptions:
|
|
|
776
784
|
#: for the whole video, i.e. "1" means "use the confidence value from the highest-confidence frame"
|
|
777
785
|
self.nth_highest_confidence = 1
|
|
778
786
|
|
|
787
|
+
#: Should we include just a single representative frame result for each video (default), or
|
|
788
|
+
#: every frame that was processed?
|
|
789
|
+
self.include_all_processed_frames = False
|
|
790
|
+
|
|
779
791
|
#: What to do if a file referred to in a .json results file appears not to be a
|
|
780
792
|
#: video; can be 'error' or 'skip_with_warning'
|
|
781
793
|
self.non_video_behavior = 'error'
|
|
@@ -803,7 +815,7 @@ def frame_results_to_video_results(input_file,
|
|
|
803
815
|
|
|
804
816
|
if options is None:
|
|
805
817
|
options = FrameToVideoOptions()
|
|
806
|
-
|
|
818
|
+
|
|
807
819
|
# Load results
|
|
808
820
|
with open(input_file,'r') as f:
|
|
809
821
|
input_data = json.load(f)
|
|
@@ -856,47 +868,58 @@ def frame_results_to_video_results(input_file,
|
|
|
856
868
|
# video_name = list(video_to_frame_info.keys())[0]
|
|
857
869
|
for video_name in tqdm(video_to_frame_info):
|
|
858
870
|
|
|
859
|
-
frames = video_to_frame_info[video_name]
|
|
860
|
-
|
|
861
|
-
all_detections_this_video = []
|
|
862
|
-
|
|
863
|
-
# frame = frames[0]
|
|
864
|
-
for frame in frames:
|
|
865
|
-
if ('detections' in frame) and (frame['detections'] is not None):
|
|
866
|
-
all_detections_this_video.extend(frame['detections'])
|
|
867
|
-
|
|
868
|
-
# At most one detection for each category for the whole video
|
|
869
|
-
canonical_detections = []
|
|
870
|
-
|
|
871
|
-
# category_id = list(detection_categories.keys())[0]
|
|
872
|
-
for category_id in detection_categories:
|
|
873
|
-
|
|
874
|
-
category_detections = [det for det in all_detections_this_video if \
|
|
875
|
-
det['category'] == category_id]
|
|
876
|
-
|
|
877
|
-
# Find the nth-highest-confidence video to choose a confidence value
|
|
878
|
-
if len(category_detections) >= options.nth_highest_confidence:
|
|
879
|
-
|
|
880
|
-
category_detections_by_confidence = sorted(category_detections,
|
|
881
|
-
key = lambda i: i['conf'],reverse=True)
|
|
882
|
-
canonical_detection = category_detections_by_confidence[options.nth_highest_confidence-1]
|
|
883
|
-
canonical_detections.append(canonical_detection)
|
|
884
|
-
|
|
885
871
|
# Prepare the output representation for this video
|
|
886
872
|
im_out = {}
|
|
887
873
|
im_out['file'] = video_name
|
|
888
|
-
im_out['detections'] = canonical_detections
|
|
889
874
|
|
|
890
875
|
if (video_filename_to_frame_rate is not None) and \
|
|
891
876
|
(video_name in video_filename_to_frame_rate):
|
|
892
877
|
im_out['frame_rate'] = video_filename_to_frame_rate[video_name]
|
|
893
878
|
|
|
894
|
-
#
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
879
|
+
# Find all detections for this video
|
|
880
|
+
all_detections_this_video = []
|
|
881
|
+
|
|
882
|
+
frames = video_to_frame_info[video_name]
|
|
883
|
+
|
|
884
|
+
# frame = frames[0]
|
|
885
|
+
for frame in frames:
|
|
886
|
+
if ('detections' in frame) and (frame['detections'] is not None):
|
|
887
|
+
all_detections_this_video.extend(frame['detections'])
|
|
888
|
+
|
|
889
|
+
# Should we keep detections for all frames?
|
|
890
|
+
if (options.include_all_processed_frames):
|
|
891
|
+
|
|
892
|
+
im_out['detections'] = all_detections_this_video
|
|
893
|
+
|
|
894
|
+
# ...or should we keep just a canonical detection for each category?
|
|
895
|
+
else:
|
|
896
|
+
|
|
897
|
+
canonical_detections = []
|
|
898
|
+
|
|
899
|
+
# category_id = list(detection_categories.keys())[0]
|
|
900
|
+
for category_id in detection_categories:
|
|
901
|
+
|
|
902
|
+
category_detections = [det for det in all_detections_this_video if \
|
|
903
|
+
det['category'] == category_id]
|
|
904
|
+
|
|
905
|
+
# Find the nth-highest-confidence video to choose a confidence value
|
|
906
|
+
if len(category_detections) >= options.nth_highest_confidence:
|
|
907
|
+
|
|
908
|
+
category_detections_by_confidence = sorted(category_detections,
|
|
909
|
+
key = lambda i: i['conf'],reverse=True)
|
|
910
|
+
canonical_detection = category_detections_by_confidence[options.nth_highest_confidence-1]
|
|
911
|
+
canonical_detections.append(canonical_detection)
|
|
912
|
+
|
|
913
|
+
im_out['detections'] = canonical_detections
|
|
914
|
+
|
|
915
|
+
# 'max_detection_conf' is no longer included in output files by default
|
|
916
|
+
if False:
|
|
917
|
+
im_out['max_detection_conf'] = 0
|
|
918
|
+
if len(canonical_detections) > 0:
|
|
919
|
+
confidences = [d['conf'] for d in canonical_detections]
|
|
920
|
+
im_out['max_detection_conf'] = max(confidences)
|
|
921
|
+
|
|
922
|
+
# ...if we're keeping output for all frames / canonical frames
|
|
900
923
|
|
|
901
924
|
output_images.append(im_out)
|
|
902
925
|
|
|
@@ -15,10 +15,10 @@ import json
|
|
|
15
15
|
# Created by get_lila_category_list.py
|
|
16
16
|
input_lila_category_list_file = os.path.expanduser('~/lila/lila_categories_list/lila_dataset_to_categories.json')
|
|
17
17
|
|
|
18
|
-
output_file = os.path.expanduser('~/lila/lila_additions_2024.
|
|
18
|
+
output_file = os.path.expanduser('~/lila/lila_additions_2024.10.05.csv')
|
|
19
19
|
|
|
20
20
|
datasets_to_map = [
|
|
21
|
-
'
|
|
21
|
+
'Ohio Small Animals'
|
|
22
22
|
]
|
|
23
23
|
|
|
24
24
|
|
|
@@ -127,13 +127,18 @@ output_df.to_csv(output_file, index=None, header=True)
|
|
|
127
127
|
#%% Manual lookup
|
|
128
128
|
|
|
129
129
|
if False:
|
|
130
|
+
|
|
131
|
+
#%%
|
|
132
|
+
|
|
133
|
+
from megadetector.utils.path_utils import open_file
|
|
134
|
+
open_file(output_file)
|
|
130
135
|
|
|
131
136
|
#%%
|
|
132
137
|
|
|
133
138
|
# q = 'white-throated monkey'
|
|
134
139
|
# q = 'cingulata'
|
|
135
140
|
# q = 'notamacropus'
|
|
136
|
-
q = '
|
|
141
|
+
q = 'thamnophis saurita saurita'
|
|
137
142
|
taxonomy_preference = 'inat'
|
|
138
143
|
m = get_preferred_taxonomic_match(q,taxonomy_preference)
|
|
139
144
|
# print(m.scientific_name); import clipboard; clipboard.copy(m.scientific_name)
|
|
@@ -68,7 +68,8 @@ if False:
|
|
|
68
68
|
|
|
69
69
|
#%% Generate the final output file
|
|
70
70
|
|
|
71
|
-
assert not os.path.isfile(release_taxonomy_file)
|
|
71
|
+
assert not os.path.isfile(release_taxonomy_file), \
|
|
72
|
+
'File {} exists, delete it manually before proceeding'.format(release_taxonomy_file)
|
|
72
73
|
|
|
73
74
|
known_levels = ['stateofmatter', #noqa
|
|
74
75
|
'kingdom',
|
|
@@ -88,7 +89,7 @@ if False:
|
|
|
88
89
|
'genus',
|
|
89
90
|
'species','subspecies','variety']
|
|
90
91
|
|
|
91
|
-
levels_to_exclude = ['stateofmatter','zoosection','parvorder']
|
|
92
|
+
levels_to_exclude = ['stateofmatter','zoosection','parvorder','complex']
|
|
92
93
|
|
|
93
94
|
for s in levels_to_exclude:
|
|
94
95
|
assert s not in levels_to_include
|
|
@@ -16,7 +16,7 @@ import os
|
|
|
16
16
|
import pandas as pd
|
|
17
17
|
|
|
18
18
|
# lila_taxonomy_file = r"c:\git\agentmorrisprivate\lila-taxonomy\lila-taxonomy-mapping.csv"
|
|
19
|
-
lila_taxonomy_file = os.path.expanduser('~/lila/lila_additions_2024.
|
|
19
|
+
lila_taxonomy_file = os.path.expanduser('~/lila/lila_additions_2024.10.05.csv')
|
|
20
20
|
|
|
21
21
|
preview_base = os.path.expanduser('~/lila/lila_taxonomy_preview')
|
|
22
22
|
os.makedirs(preview_base,exist_ok=True)
|
|
@@ -383,6 +383,8 @@ for i_row,row in df.iterrows():
|
|
|
383
383
|
|
|
384
384
|
#%% Download sample images for all scientific names
|
|
385
385
|
|
|
386
|
+
# Takes ~1 minute per 10 rows
|
|
387
|
+
|
|
386
388
|
remapped_queries = {'papio':'papio+baboon',
|
|
387
389
|
'damaliscus lunatus jimela':'damaliscus lunatus',
|
|
388
390
|
'mazama':'genus+mazama',
|
megadetector/utils/ct_utils.py
CHANGED
|
@@ -105,6 +105,26 @@ def args_to_object(args, obj):
|
|
|
105
105
|
return obj
|
|
106
106
|
|
|
107
107
|
|
|
108
|
+
def dict_to_object(d, obj):
|
|
109
|
+
"""
|
|
110
|
+
Copies all fields from a dict to an object. Skips fields starting with _.
|
|
111
|
+
Does not check existence in the target object.
|
|
112
|
+
|
|
113
|
+
Args:
|
|
114
|
+
d (dict): the dict to convert to an object
|
|
115
|
+
obj (object): object whose whose attributes will be updated
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
object: the modified object (modified in place, but also returned)
|
|
119
|
+
"""
|
|
120
|
+
|
|
121
|
+
for k in d.keys():
|
|
122
|
+
if not k.startswith('_'):
|
|
123
|
+
setattr(obj, k, d[k])
|
|
124
|
+
|
|
125
|
+
return obj
|
|
126
|
+
|
|
127
|
+
|
|
108
128
|
def pretty_print_object(obj, b_print=True):
|
|
109
129
|
"""
|
|
110
130
|
Converts an arbitrary object to .json, optionally printing the .json representation.
|
megadetector/utils/md_tests.py
CHANGED
|
@@ -177,7 +177,8 @@ def get_expected_results_filename(gpu_is_available,
|
|
|
177
177
|
|
|
178
178
|
def download_test_data(options=None):
|
|
179
179
|
"""
|
|
180
|
-
Downloads the test zipfile if necessary, unzips if necessary.
|
|
180
|
+
Downloads the test zipfile if necessary, unzips if necessary. Initializes
|
|
181
|
+
temporary fields in [options], particularly [options.scratch_dir].
|
|
181
182
|
|
|
182
183
|
Args:
|
|
183
184
|
options (MDTestOptions, optional): see MDTestOptions for details
|
|
@@ -1347,11 +1348,13 @@ if False:
|
|
|
1347
1348
|
options.force_data_download = False
|
|
1348
1349
|
options.force_data_unzip = False
|
|
1349
1350
|
options.warning_mode = False
|
|
1350
|
-
options.max_coord_error = 0.001
|
|
1351
|
-
options.max_conf_error = 0.005
|
|
1352
|
-
options.cli_working_dir = r'c:\git\MegaDetector'
|
|
1353
|
-
options.yolo_working_dir = r'c:\git\yolov5-md'
|
|
1354
|
-
|
|
1351
|
+
options.max_coord_error = 0.01 # 0.001
|
|
1352
|
+
options.max_conf_error = 0.01 # 0.005
|
|
1353
|
+
# options.cli_working_dir = r'c:\git\MegaDetector'
|
|
1354
|
+
# options.yolo_working_dir = r'c:\git\yolov5-md'
|
|
1355
|
+
options.cli_working_dir = os.path.expanduser('~')
|
|
1356
|
+
options.yolo_working_dir = '/mnt/c/git/yolov5-md'
|
|
1357
|
+
options = download_test_data(options)
|
|
1355
1358
|
|
|
1356
1359
|
#%%
|
|
1357
1360
|
|
|
@@ -1363,6 +1366,47 @@ if False:
|
|
|
1363
1366
|
|
|
1364
1367
|
run_tests(options)
|
|
1365
1368
|
|
|
1369
|
+
#%%
|
|
1370
|
+
|
|
1371
|
+
yolo_inference_options_dict = {'input_folder': '/tmp/md-tests/md-test-images',
|
|
1372
|
+
'image_filename_list': None,
|
|
1373
|
+
'model_filename': 'MDV5A',
|
|
1374
|
+
'output_file': '/tmp/md-tests/folder_inference_output_yolo_val.json',
|
|
1375
|
+
'yolo_working_folder': '/mnt/c/git/yolov5-md',
|
|
1376
|
+
'model_type': 'yolov5',
|
|
1377
|
+
'image_size': None,
|
|
1378
|
+
'conf_thres': 0.005,
|
|
1379
|
+
'batch_size': 1,
|
|
1380
|
+
'device_string': '0',
|
|
1381
|
+
'augment': False,
|
|
1382
|
+
'half_precision_enabled': None,
|
|
1383
|
+
'symlink_folder': None,
|
|
1384
|
+
'use_symlinks': True,
|
|
1385
|
+
'unique_id_strategy': 'links',
|
|
1386
|
+
'yolo_results_folder': None,
|
|
1387
|
+
'remove_symlink_folder': True,
|
|
1388
|
+
'remove_yolo_results_folder': True,
|
|
1389
|
+
'yolo_category_id_to_name': {0: 'animal', 1: 'person', 2: 'vehicle'},
|
|
1390
|
+
'overwrite_handling': 'overwrite',
|
|
1391
|
+
'preview_yolo_command_only': False,
|
|
1392
|
+
'treat_copy_failures_as_warnings': False,
|
|
1393
|
+
'save_yolo_debug_output': False,
|
|
1394
|
+
'recursive': True,
|
|
1395
|
+
'checkpoint_frequency': None}
|
|
1396
|
+
|
|
1397
|
+
from megadetector.utils.ct_utils import dict_to_object
|
|
1398
|
+
from megadetector.detection.run_inference_with_yolov5_val import \
|
|
1399
|
+
YoloInferenceOptions, run_inference_with_yolo_val
|
|
1400
|
+
|
|
1401
|
+
yolo_inference_options = YoloInferenceOptions()
|
|
1402
|
+
yolo_inference_options = dict_to_object(yolo_inference_options_dict, yolo_inference_options)
|
|
1403
|
+
|
|
1404
|
+
os.makedirs(options.scratch_dir,exist_ok=True)
|
|
1405
|
+
|
|
1406
|
+
inference_output_file_yolo_val = os.path.join(options.scratch_dir,'folder_inference_output_yolo_val.json')
|
|
1407
|
+
|
|
1408
|
+
run_inference_with_yolo_val(yolo_inference_options)
|
|
1409
|
+
|
|
1366
1410
|
|
|
1367
1411
|
#%% Command-line driver
|
|
1368
1412
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: megadetector
|
|
3
|
-
Version: 5.0.
|
|
3
|
+
Version: 5.0.20
|
|
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>
|
|
@@ -39,7 +39,7 @@ Requires-Dist: Pillow >=9.5
|
|
|
39
39
|
Requires-Dist: tqdm >=4.64.0
|
|
40
40
|
Requires-Dist: jsonpickle >=3.0.2
|
|
41
41
|
Requires-Dist: humanfriendly >=10.0
|
|
42
|
-
Requires-Dist: numpy
|
|
42
|
+
Requires-Dist: numpy <1.24,>=1.22
|
|
43
43
|
Requires-Dist: matplotlib >=3.8.0
|
|
44
44
|
Requires-Dist: opencv-python >=4.8.0
|
|
45
45
|
Requires-Dist: requests >=2.31.0
|
|
@@ -63,7 +63,7 @@ megadetector/data_management/get_image_sizes.py,sha256=2b6arj4gvoN-9f61lC3t1zAFF
|
|
|
63
63
|
megadetector/data_management/labelme_to_coco.py,sha256=8RUXALXbLpmS7UYUet4BAe9JVSDW7ojwDDpxYs072ZI,21231
|
|
64
64
|
megadetector/data_management/labelme_to_yolo.py,sha256=dRePSOwU_jiCr0EakDQCz1Ct-ZHDxDglUk4HbM1LfWc,10034
|
|
65
65
|
megadetector/data_management/ocr_tools.py,sha256=T9ClY3B-blnK3-UF1vpVdageknYsykm_6FAfqn0kliU,32529
|
|
66
|
-
megadetector/data_management/read_exif.py,sha256
|
|
66
|
+
megadetector/data_management/read_exif.py,sha256=iW3oQz4vKHnSe1nY38Pp-bXlQ5EUO49ttnhvO-0Pcqk,30508
|
|
67
67
|
megadetector/data_management/remap_coco_categories.py,sha256=xXWv0QhTjkUfc9RKtAZanK77HMSq_21mFg_34KFD6hw,2903
|
|
68
68
|
megadetector/data_management/remove_exif.py,sha256=vIWnJfw1i9JgyQKUDGEzzqkHro4ndykIPFWhtkm6RAU,2502
|
|
69
69
|
megadetector/data_management/rename_images.py,sha256=AG3YIxXEYdGmK4G-rv0_XZIylPqOZpS6gfEkydF6oDg,6918
|
|
@@ -84,7 +84,7 @@ megadetector/data_management/importers/animl_results_to_md_results.py,sha256=duv
|
|
|
84
84
|
megadetector/data_management/importers/auckland_doc_test_to_json.py,sha256=tT4XnvY3c5idDkQByfN6Z646CNiCprS-75ytjbMbnVY,12911
|
|
85
85
|
megadetector/data_management/importers/auckland_doc_to_json.py,sha256=EoNsAJvzTwcgHspE05eO0LHazMVYM7-yzFBit0FiJWk,5970
|
|
86
86
|
megadetector/data_management/importers/awc_to_json.py,sha256=e1HjShGS2WC-l99FV89g1u0o2v5990Vh9XsjIukg6qQ,5327
|
|
87
|
-
megadetector/data_management/importers/bellevue_to_json.py,sha256=
|
|
87
|
+
megadetector/data_management/importers/bellevue_to_json.py,sha256=mtlugpWhFjqBs4zgKvPGmBjWSM640BczzVV65zOHWVo,7918
|
|
88
88
|
megadetector/data_management/importers/cacophony-thermal-importer.py,sha256=4o7gyX-uUlS3rkQZlOUGMaaUVT_pdTizcuXw4rvDrE4,28577
|
|
89
89
|
megadetector/data_management/importers/carrizo_shrubfree_2018.py,sha256=ah14pfzLuDUph--qUqRqvWszOFY245rsIfAgCEF7F_I,7858
|
|
90
90
|
megadetector/data_management/importers/carrizo_trail_cam_2017.py,sha256=gwpL0sM82A6UBn2qWilP15D-1lOzQchZuhxXMzZ_7Ws,8862
|
|
@@ -101,6 +101,7 @@ megadetector/data_management/importers/mcgill_to_json.py,sha256=dfSxU1hHimyGT6Zt
|
|
|
101
101
|
megadetector/data_management/importers/missouri_to_json.py,sha256=C0ia3eCEZujVUKE2gmQc6ScsK8kXWM7m0ibeKgHfXNo,14848
|
|
102
102
|
megadetector/data_management/importers/nacti_fieldname_adjustments.py,sha256=1oDCSuFXhc2b7JPIzkSb3DkusacdAjMM2GQZnhfFQCg,2027
|
|
103
103
|
megadetector/data_management/importers/noaa_seals_2019.py,sha256=oar378j46fm27ygcbjrgN1rbq6h1SC8utAdSPNqiQt4,5152
|
|
104
|
+
megadetector/data_management/importers/osu-small-animals-to-json.py,sha256=Xr6vZ_WMNZQoTQw4qoYJqkYwBwqYf3FywCLX4hKFFPs,10096
|
|
104
105
|
megadetector/data_management/importers/pc_to_json.py,sha256=VmVvY5Fr8jMLmRkDZI9CuyLvrNuLrspJA9Q8Auxbw1A,10762
|
|
105
106
|
megadetector/data_management/importers/plot_wni_giraffes.py,sha256=KdEjbItDOXbXj0fr0celfMp7z31Rr3S29SLWBCMY-4M,3772
|
|
106
107
|
megadetector/data_management/importers/prepare-noaa-fish-data-for-lila.py,sha256=Pq5tSKWTIGEAGxBiGaO5Tz0QvKZ6QgJTIQ3raDAhjkk,12435
|
|
@@ -109,7 +110,6 @@ megadetector/data_management/importers/rspb_to_json.py,sha256=y03v1d1un9mI3HZRCZ
|
|
|
109
110
|
megadetector/data_management/importers/save_the_elephants_survey_A.py,sha256=lugw8m5Nh2Fhs-FYo9L0mDL3_29nAweLxEul6GekdkI,10669
|
|
110
111
|
megadetector/data_management/importers/save_the_elephants_survey_B.py,sha256=SWClXENsIePwifP8eJeRsj3kh3Bztl6Kzc_BdqNZvFw,11172
|
|
111
112
|
megadetector/data_management/importers/snapshot_safari_importer.py,sha256=dQ1GmpHcrQCQF9YZ0UaLTvc_3aOZEDqWGcxzYQeq4ho,23605
|
|
112
|
-
megadetector/data_management/importers/snapshot_safari_importer_reprise.py,sha256=f2WXC22fzbKaQl2888bfUlzap4oDhRG3ysZOUMBrcw0,22549
|
|
113
113
|
megadetector/data_management/importers/snapshot_serengeti_lila.py,sha256=-aYq_5IxhpcR6oxFYYVv98WVnGAr0mnVkbX-oJCPd8M,33865
|
|
114
114
|
megadetector/data_management/importers/sulross_get_exif.py,sha256=Bt1tGYtr5CllxCe2BL8uI3SfPu3e1SSqijnOz--iRqQ,2071
|
|
115
115
|
megadetector/data_management/importers/timelapse_csv_set_to_json.py,sha256=B9VbBltf3IdPBI2O1Cmg8wODhlIML4MQpjdhTFD4GP4,15916
|
|
@@ -130,20 +130,20 @@ megadetector/data_management/lila/create_lila_blank_set.py,sha256=SBwpM0-pycW37T
|
|
|
130
130
|
megadetector/data_management/lila/create_lila_test_set.py,sha256=DjivKgsFJlO1IHezXrwAGpiCAhLVmvPnv2nJYpv1ABU,4835
|
|
131
131
|
megadetector/data_management/lila/create_links_to_md_results_files.py,sha256=MvaPBAgdwoxaNrRaKZ8mGaOCky1BYXlrT08tPG9BrpM,3803
|
|
132
132
|
megadetector/data_management/lila/download_lila_subset.py,sha256=rh09kphSCVPlUGuYY-CkSyd8dy0pBUdth6uHkZ84sEo,5345
|
|
133
|
-
megadetector/data_management/lila/generate_lila_per_image_labels.py,sha256=
|
|
134
|
-
megadetector/data_management/lila/get_lila_annotation_counts.py,sha256=
|
|
133
|
+
megadetector/data_management/lila/generate_lila_per_image_labels.py,sha256=WRfqYW0cyan_-2OHy4YudoUC8ojjslfBHS_iA8JLaPo,18150
|
|
134
|
+
megadetector/data_management/lila/get_lila_annotation_counts.py,sha256=DWysGF5y7E_RYEoAyvR5RUPTOZVbauTxfAwFcIbn5sc,5622
|
|
135
135
|
megadetector/data_management/lila/get_lila_image_counts.py,sha256=UxXS5RDnSA_WbxE92qN-N7p-qR-jbyTsTZ7duLo06us,3620
|
|
136
|
-
megadetector/data_management/lila/lila_common.py,sha256=
|
|
137
|
-
megadetector/data_management/lila/test_lila_metadata_urls.py,sha256=
|
|
136
|
+
megadetector/data_management/lila/lila_common.py,sha256=74ecaGItH4AtCYeY1WSejLIcylhJPCJ1y97gYYL34PM,11080
|
|
137
|
+
megadetector/data_management/lila/test_lila_metadata_urls.py,sha256=iMpoz9Y6fcVz9whTJpo2f6EuTCiptUix2UV6khyKn9I,4688
|
|
138
138
|
megadetector/detection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
139
|
-
megadetector/detection/process_video.py,sha256=
|
|
139
|
+
megadetector/detection/process_video.py,sha256=4Fwt9utPjctSUMe8YnJzgoEsu_WHehe7MKIR3s81hC8,53242
|
|
140
140
|
megadetector/detection/pytorch_detector.py,sha256=StOnaspDBkMeePiTyq5ZEcFUDBEddq36nigHXbF-zAQ,14029
|
|
141
|
-
megadetector/detection/run_detector.py,sha256=
|
|
142
|
-
megadetector/detection/run_detector_batch.py,sha256=
|
|
143
|
-
megadetector/detection/run_inference_with_yolov5_val.py,sha256=
|
|
141
|
+
megadetector/detection/run_detector.py,sha256=r_RKrrz6ppKe9cLvuN9Q3OUhv032wC7uESQ_vxJZ1iw,32029
|
|
142
|
+
megadetector/detection/run_detector_batch.py,sha256=a98fzorcGtQaOYa5AGW2XPoJpbHeJWO5prqwzxVoPaI,62055
|
|
143
|
+
megadetector/detection/run_inference_with_yolov5_val.py,sha256=2miU2QZG_zp3rEPyoKf2XozuMpW6zAW4bAoyg6hSe-k,48691
|
|
144
144
|
megadetector/detection/run_tiled_inference.py,sha256=vw0713eNuMiEOjHfweQl58zPHNxPOMdFWZ8bTDLhlMY,37883
|
|
145
145
|
megadetector/detection/tf_detector.py,sha256=5V94a0gR6WmGPacKm59hl1eYEZI8cG04frF4EvHrmzU,8285
|
|
146
|
-
megadetector/detection/video_utils.py,sha256=
|
|
146
|
+
megadetector/detection/video_utils.py,sha256=1u5DKMcHikKPi0OYmJUCyPdjEomGEXfayIkVD_VX3_0,42622
|
|
147
147
|
megadetector/detection/detector_training/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
148
148
|
megadetector/detection/detector_training/model_main_tf2.py,sha256=YwNsZ7hkIFaEuwKU0rHG_VyqiR_0E01BbdlD0Yx4Smo,4936
|
|
149
149
|
megadetector/postprocessing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -169,9 +169,9 @@ megadetector/postprocessing/repeat_detection_elimination/remove_repeat_detection
|
|
|
169
169
|
megadetector/postprocessing/repeat_detection_elimination/repeat_detections_core.py,sha256=vEmWLSSv0_rxDwhjz_S9YaKZ_LM2tADTz2JYb_zUCnc,67923
|
|
170
170
|
megadetector/taxonomy_mapping/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
171
171
|
megadetector/taxonomy_mapping/map_lila_taxonomy_to_wi_taxonomy.py,sha256=6D_YHTeWTs6O8S9ABog2t9-wfQSh9dW2k9XTqXUZKfo,17927
|
|
172
|
-
megadetector/taxonomy_mapping/map_new_lila_datasets.py,sha256=
|
|
173
|
-
megadetector/taxonomy_mapping/prepare_lila_taxonomy_release.py,sha256
|
|
174
|
-
megadetector/taxonomy_mapping/preview_lila_taxonomy.py,sha256=
|
|
172
|
+
megadetector/taxonomy_mapping/map_new_lila_datasets.py,sha256=g--BMaLkFvkXyBs48od1fEX0T9BgpxlJicGeSHKeNUU,4150
|
|
173
|
+
megadetector/taxonomy_mapping/prepare_lila_taxonomy_release.py,sha256=-BpstFpmO_HcyEKaQt8bGsX5bcdPSPpR7S5ZQyhXwwo,4800
|
|
174
|
+
megadetector/taxonomy_mapping/preview_lila_taxonomy.py,sha256=SpZzL5Ibsz34bc6gPQ2vrgD8EHBmHxrr7b4PFAT9_IE,19580
|
|
175
175
|
megadetector/taxonomy_mapping/retrieve_sample_image.py,sha256=4cfWsLRwS_EwAmQr2p5tA_W6glBK71tSjPfaHxUZQWs,1979
|
|
176
176
|
megadetector/taxonomy_mapping/simple_image_download.py,sha256=wLhyMSocX_JhDGA6yLbEfpysz8MMI8YFJWaxyA-GZ9c,6932
|
|
177
177
|
megadetector/taxonomy_mapping/species_lookup.py,sha256=HZ7fyhap9CNdhdmq-id8dMnIa9TPMA3557rsamAkWkU,28329
|
|
@@ -180,9 +180,9 @@ megadetector/taxonomy_mapping/taxonomy_graph.py,sha256=ayrTFseVaIMbtMXhnjWCkZdxI
|
|
|
180
180
|
megadetector/taxonomy_mapping/validate_lila_category_mappings.py,sha256=1qyZr23bvZSVUYLQnO1XAtIZ4jdpARA5dxt8euKVyOA,2527
|
|
181
181
|
megadetector/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
182
182
|
megadetector/utils/azure_utils.py,sha256=0BdnkG2hW-X0yFpsJqmBhOd2wysz_LvhuyImPJMVPJs,6271
|
|
183
|
-
megadetector/utils/ct_utils.py,sha256=
|
|
183
|
+
megadetector/utils/ct_utils.py,sha256=Ecac5CLEIrEi89JFuoqdOMxiOdmbno106a1MT2SVdJY,19956
|
|
184
184
|
megadetector/utils/directory_listing.py,sha256=r4rg2xA4O9ZVxVtzPZzXIXa0DOEukAJMTTNcNSiQcuM,9668
|
|
185
|
-
megadetector/utils/md_tests.py,sha256=
|
|
185
|
+
megadetector/utils/md_tests.py,sha256=6aufzNsFi_7cQGuMd4BLfjEosO3-iLAqmP5_PkE_SOs,61001
|
|
186
186
|
megadetector/utils/path_utils.py,sha256=o68jfPDaLj3NizipVCQEnmB5GfPHpMOLUmQWamYM4w0,37165
|
|
187
187
|
megadetector/utils/process_utils.py,sha256=2SdFVxqob-YUW2BTjUEavNuRH3jA4V05fbKMtrVSd3c,5635
|
|
188
188
|
megadetector/utils/sas_blob_utils.py,sha256=k76EcMmJc_otrEHcfV2fxAC6fNhxU88FxM3ddSYrsKU,16917
|
|
@@ -197,8 +197,8 @@ megadetector/visualization/render_images_with_thumbnails.py,sha256=kgJYW8BsqRO4C
|
|
|
197
197
|
megadetector/visualization/visualization_utils.py,sha256=J53VsI8aQmzzBBeu-msm8c-qC6pm_HCMkMKYvnylqjo,63083
|
|
198
198
|
megadetector/visualization/visualize_db.py,sha256=x9jScwG-3V-mZGy5cB1s85KWbiAIfvgVUcLqUplHxGA,22110
|
|
199
199
|
megadetector/visualization/visualize_detector_output.py,sha256=LY8QgDWpWlXVLZJUskvT29CdkNvIlEsFTk4DC_lS6pk,17052
|
|
200
|
-
megadetector-5.0.
|
|
201
|
-
megadetector-5.0.
|
|
202
|
-
megadetector-5.0.
|
|
203
|
-
megadetector-5.0.
|
|
204
|
-
megadetector-5.0.
|
|
200
|
+
megadetector-5.0.20.dist-info/LICENSE,sha256=RMa3qq-7Cyk7DdtqRj_bP1oInGFgjyHn9-PZ3PcrqIs,1100
|
|
201
|
+
megadetector-5.0.20.dist-info/METADATA,sha256=mpalvNnG04pMLXU6BD8IZ7YTumaa8uS9KPOFdS87KGk,7468
|
|
202
|
+
megadetector-5.0.20.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
|
203
|
+
megadetector-5.0.20.dist-info/top_level.txt,sha256=wf9DXa8EwiOSZ4G5IPjakSxBPxTDjhYYnqWRfR-zS4M,13
|
|
204
|
+
megadetector-5.0.20.dist-info/RECORD,,
|