megadetector 5.0.7__py3-none-any.whl → 5.0.9__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 (191) hide show
  1. api/__init__.py +0 -0
  2. api/batch_processing/__init__.py +0 -0
  3. api/batch_processing/api_core/__init__.py +0 -0
  4. api/batch_processing/api_core/batch_service/__init__.py +0 -0
  5. api/batch_processing/api_core/batch_service/score.py +0 -1
  6. api/batch_processing/api_core/server_job_status_table.py +0 -1
  7. api/batch_processing/api_core_support/__init__.py +0 -0
  8. api/batch_processing/api_core_support/aggregate_results_manually.py +0 -1
  9. api/batch_processing/api_support/__init__.py +0 -0
  10. api/batch_processing/api_support/summarize_daily_activity.py +0 -1
  11. api/batch_processing/data_preparation/__init__.py +0 -0
  12. api/batch_processing/data_preparation/manage_local_batch.py +93 -79
  13. api/batch_processing/data_preparation/manage_video_batch.py +8 -8
  14. api/batch_processing/integration/digiKam/xmp_integration.py +0 -1
  15. api/batch_processing/integration/eMammal/test_scripts/push_annotations_to_emammal.py +0 -1
  16. api/batch_processing/postprocessing/__init__.py +0 -0
  17. api/batch_processing/postprocessing/add_max_conf.py +12 -12
  18. api/batch_processing/postprocessing/categorize_detections_by_size.py +32 -14
  19. api/batch_processing/postprocessing/combine_api_outputs.py +69 -55
  20. api/batch_processing/postprocessing/compare_batch_results.py +114 -44
  21. api/batch_processing/postprocessing/convert_output_format.py +62 -19
  22. api/batch_processing/postprocessing/load_api_results.py +17 -20
  23. api/batch_processing/postprocessing/md_to_coco.py +31 -21
  24. api/batch_processing/postprocessing/md_to_labelme.py +165 -68
  25. api/batch_processing/postprocessing/merge_detections.py +40 -15
  26. api/batch_processing/postprocessing/postprocess_batch_results.py +270 -186
  27. api/batch_processing/postprocessing/remap_detection_categories.py +170 -0
  28. api/batch_processing/postprocessing/render_detection_confusion_matrix.py +75 -39
  29. api/batch_processing/postprocessing/repeat_detection_elimination/find_repeat_detections.py +53 -44
  30. api/batch_processing/postprocessing/repeat_detection_elimination/remove_repeat_detections.py +25 -14
  31. api/batch_processing/postprocessing/repeat_detection_elimination/repeat_detections_core.py +244 -160
  32. api/batch_processing/postprocessing/separate_detections_into_folders.py +159 -114
  33. api/batch_processing/postprocessing/subset_json_detector_output.py +146 -169
  34. api/batch_processing/postprocessing/top_folders_to_bottom.py +77 -43
  35. api/synchronous/__init__.py +0 -0
  36. api/synchronous/api_core/animal_detection_api/__init__.py +0 -0
  37. api/synchronous/api_core/animal_detection_api/api_backend.py +0 -2
  38. api/synchronous/api_core/animal_detection_api/api_frontend.py +266 -268
  39. api/synchronous/api_core/animal_detection_api/config.py +35 -35
  40. api/synchronous/api_core/tests/__init__.py +0 -0
  41. api/synchronous/api_core/tests/load_test.py +109 -109
  42. classification/__init__.py +0 -0
  43. classification/aggregate_classifier_probs.py +21 -24
  44. classification/analyze_failed_images.py +11 -13
  45. classification/cache_batchapi_outputs.py +51 -51
  46. classification/create_classification_dataset.py +69 -68
  47. classification/crop_detections.py +54 -53
  48. classification/csv_to_json.py +97 -100
  49. classification/detect_and_crop.py +105 -105
  50. classification/evaluate_model.py +43 -42
  51. classification/identify_mislabeled_candidates.py +47 -46
  52. classification/json_to_azcopy_list.py +10 -10
  53. classification/json_validator.py +72 -71
  54. classification/map_classification_categories.py +44 -43
  55. classification/merge_classification_detection_output.py +68 -68
  56. classification/prepare_classification_script.py +157 -154
  57. classification/prepare_classification_script_mc.py +228 -228
  58. classification/run_classifier.py +27 -26
  59. classification/save_mislabeled.py +30 -30
  60. classification/train_classifier.py +20 -20
  61. classification/train_classifier_tf.py +21 -22
  62. classification/train_utils.py +10 -10
  63. data_management/__init__.py +0 -0
  64. data_management/annotations/__init__.py +0 -0
  65. data_management/annotations/annotation_constants.py +18 -31
  66. data_management/camtrap_dp_to_coco.py +238 -0
  67. data_management/cct_json_utils.py +107 -59
  68. data_management/cct_to_md.py +176 -158
  69. data_management/cct_to_wi.py +247 -219
  70. data_management/coco_to_labelme.py +272 -0
  71. data_management/coco_to_yolo.py +86 -62
  72. data_management/databases/__init__.py +0 -0
  73. data_management/databases/add_width_and_height_to_db.py +20 -16
  74. data_management/databases/combine_coco_camera_traps_files.py +35 -31
  75. data_management/databases/integrity_check_json_db.py +130 -83
  76. data_management/databases/subset_json_db.py +25 -16
  77. data_management/generate_crops_from_cct.py +27 -45
  78. data_management/get_image_sizes.py +188 -144
  79. data_management/importers/add_nacti_sizes.py +8 -8
  80. data_management/importers/add_timestamps_to_icct.py +78 -78
  81. data_management/importers/animl_results_to_md_results.py +158 -160
  82. data_management/importers/auckland_doc_test_to_json.py +9 -9
  83. data_management/importers/auckland_doc_to_json.py +8 -8
  84. data_management/importers/awc_to_json.py +7 -7
  85. data_management/importers/bellevue_to_json.py +15 -15
  86. data_management/importers/cacophony-thermal-importer.py +13 -13
  87. data_management/importers/carrizo_shrubfree_2018.py +8 -8
  88. data_management/importers/carrizo_trail_cam_2017.py +8 -8
  89. data_management/importers/cct_field_adjustments.py +9 -9
  90. data_management/importers/channel_islands_to_cct.py +10 -10
  91. data_management/importers/eMammal/copy_and_unzip_emammal.py +1 -0
  92. data_management/importers/ena24_to_json.py +7 -7
  93. data_management/importers/filenames_to_json.py +8 -8
  94. data_management/importers/helena_to_cct.py +7 -7
  95. data_management/importers/idaho-camera-traps.py +7 -7
  96. data_management/importers/idfg_iwildcam_lila_prep.py +10 -10
  97. data_management/importers/jb_csv_to_json.py +9 -9
  98. data_management/importers/mcgill_to_json.py +8 -8
  99. data_management/importers/missouri_to_json.py +18 -18
  100. data_management/importers/nacti_fieldname_adjustments.py +10 -10
  101. data_management/importers/noaa_seals_2019.py +8 -8
  102. data_management/importers/pc_to_json.py +7 -7
  103. data_management/importers/plot_wni_giraffes.py +7 -7
  104. data_management/importers/prepare-noaa-fish-data-for-lila.py +359 -359
  105. data_management/importers/prepare_zsl_imerit.py +7 -7
  106. data_management/importers/rspb_to_json.py +8 -8
  107. data_management/importers/save_the_elephants_survey_A.py +8 -8
  108. data_management/importers/save_the_elephants_survey_B.py +9 -9
  109. data_management/importers/snapshot_safari_importer.py +26 -26
  110. data_management/importers/snapshot_safari_importer_reprise.py +665 -665
  111. data_management/importers/snapshot_serengeti_lila.py +14 -14
  112. data_management/importers/sulross_get_exif.py +8 -9
  113. data_management/importers/timelapse_csv_set_to_json.py +11 -11
  114. data_management/importers/ubc_to_json.py +13 -13
  115. data_management/importers/umn_to_json.py +7 -7
  116. data_management/importers/wellington_to_json.py +8 -8
  117. data_management/importers/wi_to_json.py +9 -9
  118. data_management/importers/zamba_results_to_md_results.py +181 -181
  119. data_management/labelme_to_coco.py +309 -159
  120. data_management/labelme_to_yolo.py +103 -60
  121. data_management/lila/__init__.py +0 -0
  122. data_management/lila/add_locations_to_island_camera_traps.py +9 -9
  123. data_management/lila/add_locations_to_nacti.py +147 -147
  124. data_management/lila/create_lila_blank_set.py +114 -31
  125. data_management/lila/create_lila_test_set.py +8 -8
  126. data_management/lila/create_links_to_md_results_files.py +106 -106
  127. data_management/lila/download_lila_subset.py +92 -90
  128. data_management/lila/generate_lila_per_image_labels.py +56 -43
  129. data_management/lila/get_lila_annotation_counts.py +18 -15
  130. data_management/lila/get_lila_image_counts.py +11 -11
  131. data_management/lila/lila_common.py +103 -70
  132. data_management/lila/test_lila_metadata_urls.py +132 -116
  133. data_management/ocr_tools.py +173 -128
  134. data_management/read_exif.py +161 -99
  135. data_management/remap_coco_categories.py +84 -0
  136. data_management/remove_exif.py +58 -62
  137. data_management/resize_coco_dataset.py +32 -44
  138. data_management/wi_download_csv_to_coco.py +246 -0
  139. data_management/yolo_output_to_md_output.py +86 -73
  140. data_management/yolo_to_coco.py +535 -95
  141. detection/__init__.py +0 -0
  142. detection/detector_training/__init__.py +0 -0
  143. detection/process_video.py +85 -33
  144. detection/pytorch_detector.py +43 -25
  145. detection/run_detector.py +157 -72
  146. detection/run_detector_batch.py +189 -114
  147. detection/run_inference_with_yolov5_val.py +118 -51
  148. detection/run_tiled_inference.py +113 -42
  149. detection/tf_detector.py +51 -28
  150. detection/video_utils.py +606 -521
  151. docs/source/conf.py +43 -0
  152. md_utils/__init__.py +0 -0
  153. md_utils/azure_utils.py +9 -9
  154. md_utils/ct_utils.py +249 -70
  155. md_utils/directory_listing.py +59 -64
  156. md_utils/md_tests.py +968 -862
  157. md_utils/path_utils.py +655 -155
  158. md_utils/process_utils.py +157 -133
  159. md_utils/sas_blob_utils.py +20 -20
  160. md_utils/split_locations_into_train_val.py +45 -32
  161. md_utils/string_utils.py +33 -10
  162. md_utils/url_utils.py +208 -27
  163. md_utils/write_html_image_list.py +51 -35
  164. md_visualization/__init__.py +0 -0
  165. md_visualization/plot_utils.py +102 -109
  166. md_visualization/render_images_with_thumbnails.py +34 -34
  167. md_visualization/visualization_utils.py +908 -311
  168. md_visualization/visualize_db.py +109 -58
  169. md_visualization/visualize_detector_output.py +61 -42
  170. {megadetector-5.0.7.dist-info → megadetector-5.0.9.dist-info}/METADATA +21 -17
  171. megadetector-5.0.9.dist-info/RECORD +224 -0
  172. {megadetector-5.0.7.dist-info → megadetector-5.0.9.dist-info}/WHEEL +1 -1
  173. {megadetector-5.0.7.dist-info → megadetector-5.0.9.dist-info}/top_level.txt +1 -0
  174. taxonomy_mapping/__init__.py +0 -0
  175. taxonomy_mapping/map_lila_taxonomy_to_wi_taxonomy.py +342 -335
  176. taxonomy_mapping/map_new_lila_datasets.py +154 -154
  177. taxonomy_mapping/prepare_lila_taxonomy_release.py +142 -134
  178. taxonomy_mapping/preview_lila_taxonomy.py +591 -591
  179. taxonomy_mapping/retrieve_sample_image.py +12 -12
  180. taxonomy_mapping/simple_image_download.py +11 -11
  181. taxonomy_mapping/species_lookup.py +10 -10
  182. taxonomy_mapping/taxonomy_csv_checker.py +18 -18
  183. taxonomy_mapping/taxonomy_graph.py +47 -47
  184. taxonomy_mapping/validate_lila_category_mappings.py +83 -76
  185. data_management/cct_json_to_filename_json.py +0 -89
  186. data_management/cct_to_csv.py +0 -140
  187. data_management/databases/remove_corrupted_images_from_db.py +0 -191
  188. detection/detector_training/copy_checkpoints.py +0 -43
  189. md_visualization/visualize_megadb.py +0 -183
  190. megadetector-5.0.7.dist-info/RECORD +0 -202
  191. {megadetector-5.0.7.dist-info → megadetector-5.0.9.dist-info}/LICENSE +0 -0
@@ -1,22 +1,14 @@
1
- ########
2
- #
3
- # directory_listing.py
4
- #
5
- # Script for creating HTML directory listings for a local directory and
6
- # all its subdirectories. Primarily intended for use on mounted blob
7
- # containers, so it includes the ability to set the content-type property
8
- # on the generated html using the blob SDK, so it can be browser-viewable.
9
- #
10
- # Also includes a preview of a jpg file (the first in an alphabetical list),
11
- # if present.
12
- #
13
- # Sample invocation:
14
- #
15
- # python directory_listing.py /naipout/v002 --basepath /naipout/v002 \
16
- # --enable_overwrite \
17
- # --sas_url "https://naipblobs.blob.core.windows.net/naip/v002?sv=..."
18
- #
19
- ########
1
+ """
2
+
3
+ directory_listing.py
4
+
5
+ Script for creating Apache-style HTML directory listings for a local directory
6
+ and all its subdirectories.
7
+
8
+ Also includes a preview of a jpg file (the first in an alphabetical list),
9
+ if present.
10
+
11
+ """
20
12
 
21
13
  #%% Imports
22
14
 
@@ -28,39 +20,26 @@ import re
28
20
  import azure.common
29
21
  from azure.storage.blob import BlobServiceClient, ContentSettings
30
22
 
23
+ from md_utils.path_utils import is_image_file
31
24
 
32
- #%% Directory enumeration functions
33
-
34
- def is_image_file(path):
35
- """
36
- Checks whether the provided file path points to an image by checking the
37
- file extension. The following file extensions are considered images: jpg,
38
- jpeg. The check is case-insensitive.
39
-
40
- Args:
41
- path: string, path to image file or just the file name
42
-
43
- Returns:
44
- boolean, True if the file is an image
45
- """
46
-
47
- return os.path.splitext(path)[1].lower()[1:] in ['jpg', 'jpeg'] #, 'gif', 'tiff', 'tif', 'png']
48
25
 
26
+ #%% Directory enumeration functions
49
27
 
50
28
  def create_plain_index(root, dirs, files, dirname=None):
51
29
  """
52
- Creates the fairly plain HTML folder index
53
- including a preview of a single image file, if any is present.
54
- Returns the HTML source as string.
30
+ Creates the fairly plain HTML folder index including a preview of a single image file,
31
+ if any is present.
55
32
 
56
33
  Args:
57
- root: string, path to the root directory, all paths in *dirs* and
58
- *files* are relative to this one
59
- dirs: list of strings, the directories in *root*
60
- files: list of string, the files in *root*
61
- dirname: name to print in the html, which may be different than *root*
62
-
63
- Returns: HTML source of the directory listing
34
+ root (str): path to the root directory, all paths in [dirs] and
35
+ [files] are relative to this root folder
36
+ dirs (list): list of strings, the directories in [root]
37
+ files (list): list of strings, the files in [root]
38
+ dirname (str, optional): name to print in the html,
39
+ which may be different than [root]
40
+
41
+ Returns:
42
+ str: HTML source of the directory listing
64
43
  """
65
44
 
66
45
  if dirname is None:
@@ -128,25 +107,31 @@ def create_plain_index(root, dirs, files, dirname=None):
128
107
  html += "</body></html>\n"
129
108
  return html
130
109
 
110
+ # ...def create_plain_index(...)
111
+
131
112
 
132
113
  def traverse_and_create_index(dir, sas_url=None, overwrite_files=False,
133
114
  template_fun=create_plain_index, basepath=None):
134
115
  """
135
- Recursively traverses the local directory *dir* and generates a index
136
- file for each folder using *template_fun* to generate the HTML output.
116
+ Recursively traverses the local directory [dir] and generates a index
117
+ file for each folder using [template_fun] to generate the HTML output.
137
118
  Excludes hidden files.
138
119
 
139
120
  Args:
140
- dir: string, path to directory
141
- template_fun: function taking three arguments (string, list of string, list of string)
142
- representing the current root, the list of folders, and the list of files.
143
- Should return the HTML source of the index file
144
-
145
- Return:
146
- None
121
+ dir (str): directory to process
122
+ sas_url (str, optional): write-capable SAS URL that points to the same place as
123
+ [dir], used for the very esoteric scenario where [dir] is really a mounted
124
+ blob container, and we want to set the content-type on each file so the resulting
125
+ index can be viewed in a browser
126
+ overwrite_files (bool, optional): whether to over-write existing index file
127
+ template_fun (func, optional): function taking three arguments (string,
128
+ list of string, list of string) representing the current root, the list of folders,
129
+ and the list of files. Should return the HTML source of the index file.
130
+ basepath (str, optional): if not None, the name used for each subfolder in [dir]
131
+ in the output files will be relative to [basepath]
147
132
  """
148
133
 
149
- print("Traversing {}".format(dir))
134
+ print('Traversing {}'.format(dir))
150
135
 
151
136
  # Make sure we remove the trailing /
152
137
  dir = os.path.normpath(dir)
@@ -222,19 +207,26 @@ def traverse_and_create_index(dir, sas_url=None, overwrite_files=False,
222
207
  print('ERROR: It seems the SAS URL is incorrect or does not allow setting properties.')
223
208
  return
224
209
 
210
+ # ...def traverse_and_create_index(...)
225
211
 
226
- #%% Command-line driver
227
212
 
228
- if __name__ == '__main__':
213
+ #%% Command-line driver
229
214
 
215
+ def main():
216
+
230
217
  parser = argparse.ArgumentParser()
231
- parser.add_argument("directory", type=str, help='Path to directory which should be traversed.')
232
- parser.add_argument("--basepath", type=str, help='Folder names will be printed relative to basepath, if specified', default=None)
233
- parser.add_argument("--sas_url", type=str, help='Blobfuse does not set the content-type property ' + \
234
- 'properly and hence index.html won\'t be accessible in the browser. If you want to set the ' + \
235
- 'content-type in the corresponding blob storage, provide the SAS URL that corresponds to the ' + \
236
- "directory, e.g. if *directory* is /mountpoint/path/to/folder, then *--sas_url* looks like " + \
237
- "'https://accname.blob.core.windows.net/bname/path/to/folder?st=...&se=...&sp=...&...'")
218
+
219
+ parser.add_argument("directory", type=str,
220
+ help='Path to directory which should be traversed.')
221
+ parser.add_argument("--basepath", type=str,
222
+ help='Folder names will be printed relative to basepath, if specified',
223
+ default=None)
224
+ parser.add_argument("--sas_url", type=str,
225
+ help='Blobfuse does not set the content-type property ' + \
226
+ 'properly and hence index.html won\'t be accessible in the browser. If you want to set the ' + \
227
+ 'content-type in the corresponding blob storage, provide the SAS URL that corresponds to the ' + \
228
+ 'directory, e.g. if *directory* is /mountpoint/path/to/folder, then *--sas_url* looks like ' + \
229
+ '"https://accname.blob.core.windows.net/bname/path/to/folder?st=...&se=...&sp=...&..."')
238
230
  parser.add_argument("--enable_overwrite", action='store_true', default=False,
239
231
  help='If set, the script will overwrite existing index.html files.')
240
232
 
@@ -249,3 +241,6 @@ if __name__ == '__main__':
249
241
  "match the format https://accname.blob.core.windows.net/bname/path/to/folder?..."
250
242
 
251
243
  traverse_and_create_index(args.directory, overwrite_files=args.enable_overwrite, sas_url=args.sas_url, basepath=args.basepath)
244
+
245
+ if __name__ == '__main__':
246
+ main()