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.

Files changed (23) hide show
  1. megadetector/data_management/importers/bellevue_to_json.py +0 -1
  2. megadetector/data_management/importers/osu-small-animals-to-json.py +364 -0
  3. megadetector/data_management/lila/generate_lila_per_image_labels.py +1 -1
  4. megadetector/data_management/lila/get_lila_annotation_counts.py +2 -0
  5. megadetector/data_management/lila/lila_common.py +28 -12
  6. megadetector/data_management/lila/test_lila_metadata_urls.py +17 -8
  7. megadetector/data_management/read_exif.py +73 -0
  8. megadetector/detection/process_video.py +84 -16
  9. megadetector/detection/run_detector.py +36 -13
  10. megadetector/detection/run_detector_batch.py +104 -15
  11. megadetector/detection/run_inference_with_yolov5_val.py +20 -23
  12. megadetector/detection/video_utils.py +60 -37
  13. megadetector/taxonomy_mapping/map_new_lila_datasets.py +8 -3
  14. megadetector/taxonomy_mapping/prepare_lila_taxonomy_release.py +3 -2
  15. megadetector/taxonomy_mapping/preview_lila_taxonomy.py +3 -1
  16. megadetector/utils/ct_utils.py +20 -0
  17. megadetector/utils/md_tests.py +50 -6
  18. {megadetector-5.0.19.dist-info → megadetector-5.0.20.dist-info}/METADATA +2 -2
  19. {megadetector-5.0.19.dist-info → megadetector-5.0.20.dist-info}/RECORD +22 -22
  20. {megadetector-5.0.19.dist-info → megadetector-5.0.20.dist-info}/WHEEL +1 -1
  21. megadetector/data_management/importers/snapshot_safari_importer_reprise.py +0 -677
  22. {megadetector-5.0.19.dist-info → megadetector-5.0.20.dist-info}/LICENSE +0 -0
  23. {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 (int, optional): sample every Nth frame starting from the first frame;
232
- if this is None or 1, every frame is processed. Mutually exclusive with
233
- frames_to_process.
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
- # 'max_detection_conf' is no longer included in output files by default
895
- if False:
896
- im_out['max_detection_conf'] = 0
897
- if len(canonical_detections) > 0:
898
- confidences = [d['conf'] for d in canonical_detections]
899
- im_out['max_detection_conf'] = max(confidences)
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.07.16.csv')
18
+ output_file = os.path.expanduser('~/lila/lila_additions_2024.10.05.csv')
19
19
 
20
20
  datasets_to_map = [
21
- 'Desert Lion Conservation Camera Traps'
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 = 'aves'
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.07.16.csv')
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',
@@ -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.
@@ -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.19
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 >=1.26.0
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=-q0NqJ3VZSBovD_d6de-s3UR2NuKF6gSw2etfvVuRO4,27866
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=oJMSF0r_snRXtppiwFy4vvP8gErEw6_7Kv1UJs59QLo,7919
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=K54-JS7s88HsugtaXo56P22PiPsGEdHYB2AaGMBhvIY,18135
134
- megadetector/data_management/lila/get_lila_annotation_counts.py,sha256=aOkjemasOqf1Uixu-yhaFKYyKILYRZQZi4GBW4sbtic,5602
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=IEnGoyRgcqbek1qJ1gFE83p1Pg_5kaMS-nQI25lRWIs,10132
137
- megadetector/data_management/lila/test_lila_metadata_urls.py,sha256=jqN7UID16fu78BK_2sygb4s9BBeVCpSZT3_oL2GYxxY,4438
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=ugBpIPy7ogrbHSklIA7FTh5YqnTzDtfeN5z8JmrXJpc,50282
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=vEfq3jJTseD0sIM9MaIhbeEVqP6JoLXOC2cl8Dhehxs,30553
142
- megadetector/detection/run_detector_batch.py,sha256=P1sb922Vo_TD-ioGGkwt1FfXLyJFJms-MLGIcnmBtfg,57304
143
- megadetector/detection/run_inference_with_yolov5_val.py,sha256=yjNm130qntOyJ4jbetdt5xDHWnSmBXRydyxB2I56XjM,49099
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=tMKl47sg7jtU07vBeobGvjVgXdHWpHrMOx3jRvJ3iLo,41471
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=FSJ6ygpADtlYLf5Bhp9kMb5km2-MH0mmM_ccyStxo34,4054
173
- megadetector/taxonomy_mapping/prepare_lila_taxonomy_release.py,sha256=sRCTgaY84FiGoTtK5LOHL5dhpSrEk9zZGkUR1w9FNm4,4694
174
- megadetector/taxonomy_mapping/preview_lila_taxonomy.py,sha256=qCOyhrgddFZOYBCamfIDKdMMQuIMdGhSrd7ovLz1Yuo,19549
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=1LXAjnzeeFeQqp59cWn3Nxt5OQk3t2DfO5wQ30flA5E,19441
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=qRotO_FCRQEs2jGm4aQCrfnktJws29O9iRzha_vjZ4Q,58435
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.19.dist-info/LICENSE,sha256=RMa3qq-7Cyk7DdtqRj_bP1oInGFgjyHn9-PZ3PcrqIs,1100
201
- megadetector-5.0.19.dist-info/METADATA,sha256=fxnqQFFPLS8pROblOELOmej7ULwUYhV16VWcxuanq8k,7464
202
- megadetector-5.0.19.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
203
- megadetector-5.0.19.dist-info/top_level.txt,sha256=wf9DXa8EwiOSZ4G5IPjakSxBPxTDjhYYnqWRfR-zS4M,13
204
- megadetector-5.0.19.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (74.1.2)
2
+ Generator: setuptools (75.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5