megadetector 5.0.8__tar.gz → 5.0.9__tar.gz

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 (245) hide show
  1. {megadetector-5.0.8/megadetector.egg-info → megadetector-5.0.9}/PKG-INFO +13 -7
  2. {megadetector-5.0.8 → megadetector-5.0.9}/README-package.md +11 -6
  3. {megadetector-5.0.8 → megadetector-5.0.9}/README.md +5 -4
  4. megadetector-5.0.9/api/__init__.py +0 -0
  5. megadetector-5.0.9/api/batch_processing/__init__.py +0 -0
  6. megadetector-5.0.9/api/batch_processing/api_core/__init__.py +0 -0
  7. megadetector-5.0.9/api/batch_processing/api_core/batch_service/__init__.py +0 -0
  8. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/api_core/batch_service/score.py +0 -1
  9. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/api_core/server_job_status_table.py +0 -1
  10. megadetector-5.0.9/api/batch_processing/api_core_support/__init__.py +0 -0
  11. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/api_core_support/aggregate_results_manually.py +0 -1
  12. megadetector-5.0.9/api/batch_processing/api_support/__init__.py +0 -0
  13. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/api_support/summarize_daily_activity.py +0 -1
  14. megadetector-5.0.9/api/batch_processing/data_preparation/__init__.py +0 -0
  15. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/data_preparation/manage_local_batch.py +65 -65
  16. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/data_preparation/manage_video_batch.py +8 -8
  17. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/integration/digiKam/xmp_integration.py +0 -1
  18. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/integration/eMammal/test_scripts/push_annotations_to_emammal.py +0 -1
  19. megadetector-5.0.9/api/batch_processing/postprocessing/__init__.py +0 -0
  20. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/add_max_conf.py +12 -12
  21. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/categorize_detections_by_size.py +32 -14
  22. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/combine_api_outputs.py +68 -54
  23. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/compare_batch_results.py +113 -43
  24. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/convert_output_format.py +41 -16
  25. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/load_api_results.py +16 -17
  26. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/md_to_coco.py +31 -21
  27. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/md_to_labelme.py +52 -22
  28. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/merge_detections.py +14 -14
  29. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/postprocess_batch_results.py +246 -174
  30. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/remap_detection_categories.py +32 -25
  31. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/render_detection_confusion_matrix.py +60 -27
  32. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/repeat_detection_elimination/find_repeat_detections.py +53 -44
  33. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/repeat_detection_elimination/remove_repeat_detections.py +25 -14
  34. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/repeat_detection_elimination/repeat_detections_core.py +242 -158
  35. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/separate_detections_into_folders.py +159 -114
  36. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/subset_json_detector_output.py +146 -169
  37. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/postprocessing/top_folders_to_bottom.py +77 -43
  38. megadetector-5.0.9/api/synchronous/__init__.py +0 -0
  39. megadetector-5.0.9/api/synchronous/api_core/animal_detection_api/__init__.py +0 -0
  40. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/api_backend.py +0 -2
  41. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/api_frontend.py +266 -268
  42. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/config.py +35 -35
  43. megadetector-5.0.9/api/synchronous/api_core/tests/__init__.py +0 -0
  44. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/tests/load_test.py +109 -109
  45. megadetector-5.0.9/classification/__init__.py +0 -0
  46. {megadetector-5.0.8 → megadetector-5.0.9}/classification/aggregate_classifier_probs.py +21 -24
  47. {megadetector-5.0.8 → megadetector-5.0.9}/classification/analyze_failed_images.py +11 -13
  48. {megadetector-5.0.8 → megadetector-5.0.9}/classification/cache_batchapi_outputs.py +51 -51
  49. {megadetector-5.0.8 → megadetector-5.0.9}/classification/create_classification_dataset.py +69 -68
  50. {megadetector-5.0.8 → megadetector-5.0.9}/classification/crop_detections.py +54 -53
  51. {megadetector-5.0.8 → megadetector-5.0.9}/classification/csv_to_json.py +97 -100
  52. {megadetector-5.0.8 → megadetector-5.0.9}/classification/detect_and_crop.py +105 -105
  53. {megadetector-5.0.8 → megadetector-5.0.9}/classification/evaluate_model.py +43 -42
  54. {megadetector-5.0.8 → megadetector-5.0.9}/classification/identify_mislabeled_candidates.py +47 -46
  55. {megadetector-5.0.8 → megadetector-5.0.9}/classification/json_to_azcopy_list.py +10 -10
  56. {megadetector-5.0.8 → megadetector-5.0.9}/classification/json_validator.py +72 -71
  57. {megadetector-5.0.8 → megadetector-5.0.9}/classification/map_classification_categories.py +44 -43
  58. {megadetector-5.0.8 → megadetector-5.0.9}/classification/merge_classification_detection_output.py +68 -68
  59. megadetector-5.0.9/classification/prepare_classification_script.py +194 -0
  60. {megadetector-5.0.8 → megadetector-5.0.9}/classification/prepare_classification_script_mc.py +228 -228
  61. {megadetector-5.0.8 → megadetector-5.0.9}/classification/run_classifier.py +27 -26
  62. {megadetector-5.0.8 → megadetector-5.0.9}/classification/save_mislabeled.py +30 -30
  63. {megadetector-5.0.8 → megadetector-5.0.9}/classification/train_classifier.py +20 -20
  64. {megadetector-5.0.8 → megadetector-5.0.9}/classification/train_classifier_tf.py +21 -22
  65. {megadetector-5.0.8 → megadetector-5.0.9}/classification/train_utils.py +10 -10
  66. megadetector-5.0.9/data_management/__init__.py +0 -0
  67. megadetector-5.0.9/data_management/annotations/__init__.py +0 -0
  68. megadetector-5.0.9/data_management/annotations/annotation_constants.py +34 -0
  69. megadetector-5.0.9/data_management/camtrap_dp_to_coco.py +238 -0
  70. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/cct_json_utils.py +102 -59
  71. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/cct_to_md.py +176 -158
  72. megadetector-5.0.9/data_management/cct_to_wi.py +289 -0
  73. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/coco_to_labelme.py +272 -263
  74. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/coco_to_yolo.py +79 -58
  75. megadetector-5.0.9/data_management/databases/__init__.py +0 -0
  76. megadetector-5.0.9/data_management/databases/add_width_and_height_to_db.py +33 -0
  77. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/databases/combine_coco_camera_traps_files.py +35 -31
  78. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/databases/integrity_check_json_db.py +62 -24
  79. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/databases/subset_json_db.py +24 -15
  80. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/generate_crops_from_cct.py +27 -45
  81. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/get_image_sizes.py +188 -162
  82. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/add_nacti_sizes.py +8 -8
  83. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/add_timestamps_to_icct.py +78 -78
  84. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/animl_results_to_md_results.py +158 -158
  85. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/auckland_doc_test_to_json.py +9 -9
  86. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/auckland_doc_to_json.py +8 -8
  87. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/awc_to_json.py +7 -7
  88. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/bellevue_to_json.py +15 -15
  89. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/cacophony-thermal-importer.py +13 -13
  90. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/carrizo_shrubfree_2018.py +8 -8
  91. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/carrizo_trail_cam_2017.py +8 -8
  92. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/cct_field_adjustments.py +9 -9
  93. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/channel_islands_to_cct.py +10 -10
  94. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/eMammal/copy_and_unzip_emammal.py +1 -0
  95. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/ena24_to_json.py +7 -7
  96. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/filenames_to_json.py +8 -8
  97. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/helena_to_cct.py +7 -7
  98. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/idaho-camera-traps.py +7 -7
  99. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/idfg_iwildcam_lila_prep.py +10 -10
  100. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/jb_csv_to_json.py +9 -9
  101. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/mcgill_to_json.py +8 -8
  102. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/missouri_to_json.py +18 -18
  103. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/nacti_fieldname_adjustments.py +10 -10
  104. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/noaa_seals_2019.py +7 -7
  105. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/pc_to_json.py +7 -7
  106. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/plot_wni_giraffes.py +7 -7
  107. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/prepare-noaa-fish-data-for-lila.py +359 -359
  108. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/prepare_zsl_imerit.py +7 -7
  109. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/rspb_to_json.py +8 -8
  110. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/save_the_elephants_survey_A.py +8 -8
  111. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/save_the_elephants_survey_B.py +9 -9
  112. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/snapshot_safari_importer.py +26 -26
  113. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/snapshot_safari_importer_reprise.py +665 -665
  114. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/snapshot_serengeti_lila.py +14 -14
  115. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/sulross_get_exif.py +8 -9
  116. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/timelapse_csv_set_to_json.py +11 -11
  117. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/ubc_to_json.py +13 -13
  118. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/umn_to_json.py +7 -7
  119. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/wellington_to_json.py +8 -8
  120. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/wi_to_json.py +9 -9
  121. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/zamba_results_to_md_results.py +181 -181
  122. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/labelme_to_coco.py +65 -24
  123. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/labelme_to_yolo.py +8 -8
  124. megadetector-5.0.9/data_management/lila/__init__.py +0 -0
  125. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/lila/add_locations_to_island_camera_traps.py +9 -9
  126. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/lila/add_locations_to_nacti.py +147 -147
  127. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/lila/create_lila_blank_set.py +13 -13
  128. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/lila/create_lila_test_set.py +8 -8
  129. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/lila/create_links_to_md_results_files.py +106 -106
  130. megadetector-5.0.9/data_management/lila/download_lila_subset.py +177 -0
  131. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/lila/generate_lila_per_image_labels.py +55 -42
  132. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/lila/get_lila_annotation_counts.py +18 -15
  133. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/lila/get_lila_image_counts.py +11 -11
  134. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/lila/lila_common.py +96 -33
  135. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/lila/test_lila_metadata_urls.py +132 -116
  136. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/ocr_tools.py +173 -128
  137. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/read_exif.py +110 -97
  138. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/remap_coco_categories.py +83 -83
  139. megadetector-5.0.9/data_management/remove_exif.py +66 -0
  140. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/resize_coco_dataset.py +30 -23
  141. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/wi_download_csv_to_coco.py +246 -239
  142. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/yolo_output_to_md_output.py +86 -73
  143. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/yolo_to_coco.py +300 -60
  144. megadetector-5.0.9/detection/__init__.py +0 -0
  145. megadetector-5.0.9/detection/detector_training/__init__.py +0 -0
  146. {megadetector-5.0.8 → megadetector-5.0.9}/detection/process_video.py +85 -33
  147. {megadetector-5.0.8 → megadetector-5.0.9}/detection/pytorch_detector.py +43 -25
  148. {megadetector-5.0.8 → megadetector-5.0.9}/detection/run_detector.py +157 -72
  149. {megadetector-5.0.8 → megadetector-5.0.9}/detection/run_detector_batch.py +179 -113
  150. {megadetector-5.0.8 → megadetector-5.0.9}/detection/run_inference_with_yolov5_val.py +108 -48
  151. {megadetector-5.0.8 → megadetector-5.0.9}/detection/run_tiled_inference.py +111 -40
  152. {megadetector-5.0.8 → megadetector-5.0.9}/detection/tf_detector.py +51 -29
  153. {megadetector-5.0.8 → megadetector-5.0.9}/detection/video_utils.py +606 -521
  154. megadetector-5.0.9/docs/source/conf.py +43 -0
  155. megadetector-5.0.9/md_utils/__init__.py +0 -0
  156. {megadetector-5.0.8 → megadetector-5.0.9}/md_utils/azure_utils.py +9 -9
  157. {megadetector-5.0.8 → megadetector-5.0.9}/md_utils/ct_utils.py +228 -68
  158. {megadetector-5.0.8 → megadetector-5.0.9}/md_utils/directory_listing.py +59 -64
  159. {megadetector-5.0.8 → megadetector-5.0.9}/md_utils/md_tests.py +968 -871
  160. megadetector-5.0.9/md_utils/path_utils.py +1044 -0
  161. {megadetector-5.0.8 → megadetector-5.0.9}/md_utils/process_utils.py +157 -133
  162. {megadetector-5.0.8 → megadetector-5.0.9}/md_utils/sas_blob_utils.py +20 -20
  163. {megadetector-5.0.8 → megadetector-5.0.9}/md_utils/split_locations_into_train_val.py +45 -32
  164. {megadetector-5.0.8 → megadetector-5.0.9}/md_utils/string_utils.py +33 -10
  165. megadetector-5.0.9/md_utils/url_utils.py +323 -0
  166. {megadetector-5.0.8 → megadetector-5.0.9}/md_utils/write_html_image_list.py +40 -33
  167. megadetector-5.0.9/md_visualization/__init__.py +0 -0
  168. {megadetector-5.0.8 → megadetector-5.0.9}/md_visualization/plot_utils.py +102 -109
  169. {megadetector-5.0.8 → megadetector-5.0.9}/md_visualization/render_images_with_thumbnails.py +34 -34
  170. {megadetector-5.0.8 → megadetector-5.0.9}/md_visualization/visualization_utils.py +597 -291
  171. {megadetector-5.0.8 → megadetector-5.0.9}/md_visualization/visualize_db.py +76 -48
  172. {megadetector-5.0.8 → megadetector-5.0.9}/md_visualization/visualize_detector_output.py +61 -42
  173. {megadetector-5.0.8 → megadetector-5.0.9/megadetector.egg-info}/PKG-INFO +13 -7
  174. {megadetector-5.0.8 → megadetector-5.0.9}/megadetector.egg-info/SOURCES.txt +23 -4
  175. {megadetector-5.0.8 → megadetector-5.0.9}/megadetector.egg-info/top_level.txt +1 -0
  176. {megadetector-5.0.8 → megadetector-5.0.9}/pyproject.toml +2 -1
  177. megadetector-5.0.9/taxonomy_mapping/__init__.py +0 -0
  178. megadetector-5.0.9/taxonomy_mapping/map_lila_taxonomy_to_wi_taxonomy.py +491 -0
  179. {megadetector-5.0.8 → megadetector-5.0.9}/taxonomy_mapping/map_new_lila_datasets.py +154 -154
  180. megadetector-5.0.9/taxonomy_mapping/prepare_lila_taxonomy_release.py +142 -0
  181. {megadetector-5.0.8 → megadetector-5.0.9}/taxonomy_mapping/preview_lila_taxonomy.py +591 -591
  182. {megadetector-5.0.8 → megadetector-5.0.9}/taxonomy_mapping/retrieve_sample_image.py +12 -12
  183. {megadetector-5.0.8 → megadetector-5.0.9}/taxonomy_mapping/simple_image_download.py +11 -11
  184. {megadetector-5.0.8 → megadetector-5.0.9}/taxonomy_mapping/species_lookup.py +10 -10
  185. {megadetector-5.0.8 → megadetector-5.0.9}/taxonomy_mapping/taxonomy_csv_checker.py +18 -18
  186. {megadetector-5.0.8 → megadetector-5.0.9}/taxonomy_mapping/taxonomy_graph.py +47 -47
  187. megadetector-5.0.9/taxonomy_mapping/validate_lila_category_mappings.py +83 -0
  188. megadetector-5.0.8/classification/prepare_classification_script.py +0 -191
  189. megadetector-5.0.8/data_management/annotations/annotation_constants.py +0 -47
  190. megadetector-5.0.8/data_management/cct_json_to_filename_json.py +0 -89
  191. megadetector-5.0.8/data_management/cct_to_csv.py +0 -140
  192. megadetector-5.0.8/data_management/cct_to_wi.py +0 -261
  193. megadetector-5.0.8/data_management/databases/add_width_and_height_to_db.py +0 -29
  194. megadetector-5.0.8/data_management/databases/remove_corrupted_images_from_db.py +0 -191
  195. megadetector-5.0.8/data_management/lila/download_lila_subset.py +0 -243
  196. megadetector-5.0.8/data_management/remove_exif.py +0 -70
  197. megadetector-5.0.8/detection/detector_training/copy_checkpoints.py +0 -43
  198. megadetector-5.0.8/md_utils/path_utils.py +0 -718
  199. megadetector-5.0.8/md_utils/url_utils.py +0 -207
  200. megadetector-5.0.8/taxonomy_mapping/map_lila_taxonomy_to_wi_taxonomy.py +0 -484
  201. megadetector-5.0.8/taxonomy_mapping/prepare_lila_taxonomy_release.py +0 -134
  202. megadetector-5.0.8/taxonomy_mapping/validate_lila_category_mappings.py +0 -76
  203. {megadetector-5.0.8 → megadetector-5.0.9}/LICENSE +0 -0
  204. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/api_core/server.py +0 -0
  205. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/api_core/server_api_config.py +0 -0
  206. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/api_core/server_app_config.py +0 -0
  207. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/api_core/server_batch_job_manager.py +0 -0
  208. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/api_core/server_orchestration.py +0 -0
  209. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/api_core/server_utils.py +0 -0
  210. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/integration/digiKam/setup.py +0 -0
  211. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/integration/eMammal/test_scripts/config_template.py +0 -0
  212. {megadetector-5.0.8 → megadetector-5.0.9}/api/batch_processing/integration/eMammal/test_scripts/select_images_for_testing.py +0 -0
  213. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/data_management/annotations/annotation_constants.py +0 -0
  214. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/detection/detector_training/copy_checkpoints.py +0 -0
  215. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/detection/detector_training/model_main_tf2.py +0 -0
  216. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/detection/process_video.py +0 -0
  217. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/detection/pytorch_detector.py +0 -0
  218. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/detection/run_detector.py +0 -0
  219. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/detection/run_detector_batch.py +0 -0
  220. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/detection/run_inference_with_yolov5_val.py +0 -0
  221. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/detection/run_tiled_inference.py +0 -0
  222. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/detection/tf_detector.py +0 -0
  223. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/detection/video_utils.py +0 -0
  224. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/md_utils/azure_utils.py +0 -0
  225. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/md_utils/ct_utils.py +0 -0
  226. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/md_utils/directory_listing.py +0 -0
  227. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/md_utils/matlab_porting_tools.py +0 -0
  228. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/md_utils/path_utils.py +0 -0
  229. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/md_utils/process_utils.py +0 -0
  230. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/md_utils/sas_blob_utils.py +0 -0
  231. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/md_utils/string_utils.py +0 -0
  232. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/md_utils/url_utils.py +0 -0
  233. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/md_utils/write_html_image_list.py +0 -0
  234. {megadetector-5.0.8 → megadetector-5.0.9}/api/synchronous/api_core/animal_detection_api/md_visualization/visualization_utils.py +0 -0
  235. {megadetector-5.0.8 → megadetector-5.0.9}/classification/efficientnet/__init__.py +0 -0
  236. {megadetector-5.0.8 → megadetector-5.0.9}/classification/efficientnet/model.py +0 -0
  237. {megadetector-5.0.8 → megadetector-5.0.9}/classification/efficientnet/utils.py +0 -0
  238. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/eMammal/eMammal_helpers.py +0 -0
  239. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/eMammal/make_eMammal_json.py +0 -0
  240. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/snapshotserengeti/make_full_SS_json.py +0 -0
  241. {megadetector-5.0.8 → megadetector-5.0.9}/data_management/importers/snapshotserengeti/make_per_season_SS_json.py +0 -0
  242. {megadetector-5.0.8 → megadetector-5.0.9}/detection/detector_training/model_main_tf2.py +0 -0
  243. {megadetector-5.0.8 → megadetector-5.0.9}/megadetector.egg-info/dependency_links.txt +0 -0
  244. {megadetector-5.0.8 → megadetector-5.0.9}/megadetector.egg-info/requires.txt +0 -0
  245. {megadetector-5.0.8 → megadetector-5.0.9}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: megadetector
3
- Version: 5.0.8
3
+ Version: 5.0.9
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>
@@ -25,6 +25,7 @@ License: MIT License
25
25
  SOFTWARE.
26
26
 
27
27
  Project-URL: Homepage, https://github.com/agentmorris/MegaDetector
28
+ Project-URL: Documentation, https://megadetector.readthedocs.io
28
29
  Project-URL: Bug Reports, https://github.com/agentmorris/MegaDetector/issues
29
30
  Project-URL: Source, https://github.com/agentmorris/MegaDetector
30
31
  Keywords: camera traps,conservation,wildlife,ai
@@ -51,16 +52,16 @@ Requires-Dist: ultralytics-yolov5==0.1.1
51
52
 
52
53
  # MegaDetector
53
54
 
54
- This package is a pip-installable version of the support/inference code for [MegaDetector](https://github.com/agentmorris/MegaDetector), an object detection model that helps conservation biologists spend less time doing boring things with camera trap images.
55
+ This package is a pip-installable version of the support/inference code for [MegaDetector](https://github.com/agentmorris/MegaDetector), an object detection model that helps conservation biologists spend less time doing boring things with camera trap images. Complete documentation for this Python package is available at <megadetector.readthedocs.io>.
55
56
 
56
- If you want to learn more about what MegaDetector is all about, head over to the [MegaDetector repo](https://github.com/agentmorris/MegaDetector).
57
+ If you aren't looking for the Python package specificaly, and you just want to learn more about what MegaDetector is all about, head over to the [MegaDetector repo](https://github.com/agentmorris/MegaDetector).
57
58
 
58
59
 
59
60
  ## Reasons you probably aren't looking for this package
60
61
 
61
62
  ### If you are an ecologist...
62
63
 
63
- If you are an ecologist looking to use MegaDetector to help you get through your camera trap images, you probably don't want this package. We recommend starting with our "[Getting started with MegaDetector](https://github.com/agentmorris/MegaDetector/blob/main/collaborations.md)" page, then digging in to the [MegaDetector User Guide](https://github.com/agentmorris/MegaDetector/blob/main/megadetector.md), which will walk you through the process of using MegaDetector. That journey will <i>not</i> involve this Python package.
64
+ If you are an ecologist looking to use MegaDetector to help you get through your camera trap images, you probably don't want this package. We recommend starting with our "[Getting started with MegaDetector](https://github.com/agentmorris/MegaDetector/blob/main/getting-started.md)" page, then digging in to the [MegaDetector User Guide](https://github.com/agentmorris/MegaDetector/blob/main/megadetector.md), which will walk you through the process of using MegaDetector. That journey will <i>not</i> involve this Python package.
64
65
 
65
66
  ### If you are a computer-vision-y type...
66
67
 
@@ -80,9 +81,14 @@ To install:
80
81
 
81
82
  MegaDetector model weights aren't downloaded at pip-install time, but they will be (optionally) automatically downloaded the first time you run the model.
82
83
 
83
- ### Examples of things you can do with this package
84
+ ## Package reference
84
85
 
85
- #### Run MegaDetector on one image and count the number of detections
86
+ See <megadetector.readthedocs.io>.
87
+
88
+
89
+ ## Examples of things you can do with this package
90
+
91
+ ### Run MegaDetector on one image and count the number of detections
86
92
 
87
93
  ```
88
94
  from md_utils import url_utils
@@ -104,7 +110,7 @@ detections_above_threshold = [d for d in result['detections'] if d['conf'] > 0.2
104
110
  print('Found {} detections above threshold'.format(len(detections_above_threshold)))
105
111
  ```
106
112
 
107
- #### Run MegaDetector on a folder of images
113
+ ### Run MegaDetector on a folder of images
108
114
 
109
115
  ```
110
116
  from detection.run_detector_batch import load_and_run_detector_batch,write_results_to_file
@@ -1,15 +1,15 @@
1
1
  # MegaDetector
2
2
 
3
- This package is a pip-installable version of the support/inference code for [MegaDetector](https://github.com/agentmorris/MegaDetector), an object detection model that helps conservation biologists spend less time doing boring things with camera trap images.
3
+ This package is a pip-installable version of the support/inference code for [MegaDetector](https://github.com/agentmorris/MegaDetector), an object detection model that helps conservation biologists spend less time doing boring things with camera trap images. Complete documentation for this Python package is available at <megadetector.readthedocs.io>.
4
4
 
5
- If you want to learn more about what MegaDetector is all about, head over to the [MegaDetector repo](https://github.com/agentmorris/MegaDetector).
5
+ If you aren't looking for the Python package specificaly, and you just want to learn more about what MegaDetector is all about, head over to the [MegaDetector repo](https://github.com/agentmorris/MegaDetector).
6
6
 
7
7
 
8
8
  ## Reasons you probably aren't looking for this package
9
9
 
10
10
  ### If you are an ecologist...
11
11
 
12
- If you are an ecologist looking to use MegaDetector to help you get through your camera trap images, you probably don't want this package. We recommend starting with our "[Getting started with MegaDetector](https://github.com/agentmorris/MegaDetector/blob/main/collaborations.md)" page, then digging in to the [MegaDetector User Guide](https://github.com/agentmorris/MegaDetector/blob/main/megadetector.md), which will walk you through the process of using MegaDetector. That journey will <i>not</i> involve this Python package.
12
+ If you are an ecologist looking to use MegaDetector to help you get through your camera trap images, you probably don't want this package. We recommend starting with our "[Getting started with MegaDetector](https://github.com/agentmorris/MegaDetector/blob/main/getting-started.md)" page, then digging in to the [MegaDetector User Guide](https://github.com/agentmorris/MegaDetector/blob/main/megadetector.md), which will walk you through the process of using MegaDetector. That journey will <i>not</i> involve this Python package.
13
13
 
14
14
  ### If you are a computer-vision-y type...
15
15
 
@@ -29,9 +29,14 @@ To install:
29
29
 
30
30
  MegaDetector model weights aren't downloaded at pip-install time, but they will be (optionally) automatically downloaded the first time you run the model.
31
31
 
32
- ### Examples of things you can do with this package
32
+ ## Package reference
33
33
 
34
- #### Run MegaDetector on one image and count the number of detections
34
+ See <megadetector.readthedocs.io>.
35
+
36
+
37
+ ## Examples of things you can do with this package
38
+
39
+ ### Run MegaDetector on one image and count the number of detections
35
40
 
36
41
  ```
37
42
  from md_utils import url_utils
@@ -53,7 +58,7 @@ detections_above_threshold = [d for d in result['detections'] if d['conf'] > 0.2
53
58
  print('Found {} detections above threshold'.format(len(detections_above_threshold)))
54
59
  ```
55
60
 
56
- #### Run MegaDetector on a folder of images
61
+ ### Run MegaDetector on a folder of images
57
62
 
58
63
  ```
59
64
  from detection.run_detector_batch import load_and_run_detector_batch,write_results_to_file
@@ -23,7 +23,7 @@ Here's a &ldquo;teaser&rdquo; image of what MegaDetector output looks like:
23
23
  ## How do I get started with MegaDetector?
24
24
 
25
25
  * If you are looking for a convenient tool to run MegaDetector, you don't need anything from this repository: check out [EcoAssist](https://github.com/PetervanLunteren/EcoAssist?tab=readme-ov-file).
26
- * If you're just <i>considering</i> the use of AI in your workflow, and you aren't even sure yet whether MegaDetector would be useful to you, we recommend reading the "[getting started with MegaDetector](collaborations.md)" page.
26
+ * If you're just <i>considering</i> the use of AI in your workflow, and you aren't even sure yet whether MegaDetector would be useful to you, we recommend reading the "[getting started with MegaDetector](getting-started.md)" page.
27
27
  * If you're already familiar with MegaDetector and you're ready to run it on your data, see the [MegaDetector User Guide](megadetector.md) for instructions on running MegaDetector.
28
28
  * If you're a programmer-type looking to use tools from this repo, check out the [Python package](https://pypi.org/project/megadetector/) that provides access to everything in this repo (yes, you guessed it, "pip install megadetector").
29
29
  * If you have any questions, or you want to tell us that MegaDetector was amazing/terrible on your images, <a href="mailto:cameratraps@lila.science">email us</a>!
@@ -33,7 +33,7 @@ MegaDetector is just one of many tools that aims to make conservation biologists
33
33
 
34
34
  ## Who is using MegaDetector?
35
35
 
36
- We work with ecologists all over the world to help them spend less time annotating images and more time thinking about conservation. You can read a little more about how this works on our [getting started with MegaDetector](collaborations.md) page.
36
+ We work with ecologists all over the world to help them spend less time annotating images and more time thinking about conservation. You can read a little more about how this works on our [getting started with MegaDetector](getting-started.md) page.
37
37
 
38
38
  Here are a few of the organizations that have used MegaDetector... we're only listing organizations who (a) we know about and (b) have given us permission to refer to them here (or have posted publicly about their use of MegaDetector), so if you're using MegaDetector or other tools from this repo and would like to be added to this list, <a href="mailto:cameratraps@lila.science">email us</a>!
39
39
 
@@ -85,6 +85,7 @@ Here are a few of the organizations that have used MegaDetector... we're only li
85
85
  * [Hamaarag](https://hamaarag.org.il/), The Steinhardt Museum of Natural History, Tel Aviv University
86
86
  * [Institut des Science de la Forêt Tempérée](https://isfort.uqo.ca/) (ISFORT), Université du Québec en Outaouais
87
87
  * [Lab of Dr. Bilal Habib](https://bhlab.in/about), the Wildlife Institute of India
88
+ * [Landscape Ecology Lab](https://www.concordia.ca/artsci/geography-planning-environment/research/labs/lel.html), Concordia University
88
89
  * [Mammal Spatial Ecology and Conservation Lab](https://labs.wsu.edu/dthornton/), Washington State University
89
90
  * [McLoughlin Lab in Population Ecology](http://mcloughlinlab.ca/lab/), University of Saskatchewan
90
91
  * [National Wildlife Refuge System, Southwest Region](https://www.fws.gov/about/region/southwest), U.S. Fish & Wildlife Service
@@ -184,7 +185,7 @@ Code for:
184
185
 
185
186
  ### detection
186
187
 
187
- Code for training, running, and evaluating MegaDetector.
188
+ Code for running models, especially MegaDetector.
188
189
 
189
190
 
190
191
  ### envs
@@ -204,7 +205,7 @@ Small utility functions for string manipulation, filename manipulation, download
204
205
 
205
206
  ### md_visualization
206
207
 
207
- Shared tools for visualizing images with ground truth and/or predicted annotations.
208
+ Tools for visualizing images with ground truth and/or predicted annotations.
208
209
 
209
210
 
210
211
  ### sandbox
File without changes
File without changes
@@ -435,6 +435,5 @@ def main():
435
435
  with open(task_output_path, 'w', encoding='utf-8') as f:
436
436
  json.dump(detections, f, ensure_ascii=False)
437
437
 
438
-
439
438
  if __name__ == '__main__':
440
439
  main()
@@ -148,6 +148,5 @@ class TestJobStatusTable(unittest.TestCase):
148
148
  item_read = table.read_job_status(job_id)
149
149
  self.assertIsNone(item_read)
150
150
 
151
-
152
151
  if __name__ == '__main__':
153
152
  unittest.main()
@@ -42,6 +42,5 @@ def main():
42
42
  output_file_urls_str = json.dumps(output_file_urls)
43
43
  print(output_file_urls_str)
44
44
 
45
-
46
45
  if __name__ == '__main__':
47
46
  main()
@@ -148,6 +148,5 @@ def main():
148
148
  send_message()
149
149
  time.sleep(24 * 60 * 60)
150
150
 
151
-
152
151
  if __name__ == '__main__':
153
152
  main()
@@ -1,64 +1,64 @@
1
- ########
2
- #
3
- # manage_local_batch.py
4
- #
5
- # Semi-automated process for managing a local MegaDetector job, including
6
- # standard postprocessing steps.
7
- #
8
- # This script is not intended to be run from top to bottom like a typical Python script,
9
- # it's a notebook disguised with a .py extension. It's the Bestest Most Awesome way to
10
- # run MegaDetector, but it's also pretty subtle; if you want to play with this, you might
11
- # want to check in with cameratraps@lila.science for some tips. Otherwise... YMMV.
12
- #
13
- # Some general notes on using this script, which I do in Spyder, though everything will be
14
- # the same if you are reading this in Jupyter Notebook (using the .ipynb version of the
15
- # script):
16
- #
17
- # * Typically when I have a MegaDetector job to run, I make a copy of this script. Let's
18
- # say I'm running a job for an organization called "bibblebop"; I have a big folder of
19
- # job-specific copies of this script, and I might save a new one called "bibblebop-2023-07-26.py"
20
- # (the filename doesn't matter, it just helps me keep these organized).
21
- #
22
- # * There are three variables you need to set in this script before you start running code:
23
- # "input_path", "organization_name_short", and "job_date". You will get a sensible error if you forget
24
- # to set any of these. In this case I might set those to "/data/bibblebobcamerastuff",
25
- # "bibblebop", and "2023-07-26", respectively.
26
- #
27
- # * The defaults assume you want to split the job into two tasks (this is the default because I have
28
- # two GPUs). Nothing bad will happen if you do this on a zero-GPU or single-GPU machine, but if you
29
- # want everything to run in one logical task, change "n_gpus" and "n_jobs" to 1 (instead of 2).
30
- #
31
- # * After setting the required variables, I run the first few cells - up to and including the one
32
- # called "Generate commands" - which collectively take basically zero seconds. After you run the
33
- # "Generate commands" cell, you will have a folder that looks something like:
34
- #
35
- # ~/postprocessing/bibblebop/bibblebop-2023-07-06-mdv5a/
36
- #
37
- # On Windows, this means:
38
- #
39
- # ~/postprocessing/bibblebop/bibblebop-2023-07-06-mdv5a/
40
- #
41
- # Everything related to this job - scripts, outputs, intermediate stuff - will be in this folder.
42
- # Specifically, after the "Generate commands" cell, you'll have scripts in that folder called something
43
- # like:
44
- #
45
- # run_chunk_000_gpu_00.sh (or .bat on Windows)
46
- #
47
- # Personally, I like to run that script directly in a command prompt (I just leave Spyder open, though
48
- # it's OK if Spyder gets shut down while MD is running).
49
- #
50
- # At this point, once you get the hang of it, you've invested about zero seconds of human time,
51
- # but possibly several days of unattended compute time, depending on the size of your job.
52
- #
53
- # * Then when the jobs are done, back to the interactive environment! I run the next few cells,
54
- # which make sure the job finished OK, and the cell called "Post-processing (pre-RDE)", which
55
- # generates an HTML preview of the results. You are very plausibly done at this point, and can ignore
56
- # all the remaining cells. If you want to do things like repeat detection elimination, or running
57
- # a classifier, or splitting your results file up in specialized ways, there are cells for all of those
58
- # things, but now you're in power-user territory, so I'm going to leave this guide here. Email
59
- # cameratraps@lila.science with questions about the fancy stuff.
60
- #
61
- ########
1
+ """
2
+
3
+ manage_local_batch.py
4
+
5
+ Semi-automated process for managing a local MegaDetector job, including
6
+ standard postprocessing steps.
7
+
8
+ This script is not intended to be run from top to bottom like a typical Python script,
9
+ it's a notebook disguised with a .py extension. It's the Bestest Most Awesome way to
10
+ run MegaDetector, but it's also pretty subtle; if you want to play with this, you might
11
+ want to check in with cameratraps@lila.science for some tips. Otherwise... YMMV.
12
+
13
+ Some general notes on using this script, which I do in Spyder, though everything will be
14
+ the same if you are reading this in Jupyter Notebook (using the .ipynb version of the
15
+ script):
16
+
17
+ * Typically when I have a MegaDetector job to run, I make a copy of this script. Let's
18
+ say I'm running a job for an organization called "bibblebop"; I have a big folder of
19
+ job-specific copies of this script, and I might save a new one called "bibblebop-2023-07-26.py"
20
+ (the filename doesn't matter, it just helps me keep these organized).
21
+
22
+ * There are three variables you need to set in this script before you start running code:
23
+ "input_path", "organization_name_short", and "job_date". You will get a sensible error if you forget
24
+ to set any of these. In this case I might set those to "/data/bibblebobcamerastuff",
25
+ "bibblebop", and "2023-07-26", respectively.
26
+
27
+ * The defaults assume you want to split the job into two tasks (this is the default because I have
28
+ two GPUs). Nothing bad will happen if you do this on a zero-GPU or single-GPU machine, but if you
29
+ want everything to run in one logical task, change "n_gpus" and "n_jobs" to 1 (instead of 2).
30
+
31
+ * After setting the required variables, I run the first few cells - up to and including the one
32
+ called "Generate commands" - which collectively take basically zero seconds. After you run the
33
+ "Generate commands" cell, you will have a folder that looks something like:
34
+
35
+ ~/postprocessing/bibblebop/bibblebop-2023-07-06-mdv5a/
36
+
37
+ On Windows, this means:
38
+
39
+ ~/postprocessing/bibblebop/bibblebop-2023-07-06-mdv5a/
40
+
41
+ Everything related to this job - scripts, outputs, intermediate stuff - will be in this folder.
42
+ Specifically, after the "Generate commands" cell, you'll have scripts in that folder called something
43
+ like:
44
+
45
+ run_chunk_000_gpu_00.sh (or .bat on Windows)
46
+
47
+ Personally, I like to run that script directly in a command prompt (I just leave Spyder open, though
48
+ it's OK if Spyder gets shut down while MD is running).
49
+
50
+ At this point, once you get the hang of it, you've invested about zero seconds of human time,
51
+ but possibly several days of unattended compute time, depending on the size of your job.
52
+
53
+ * Then when the jobs are done, back to the interactive environment! I run the next few cells,
54
+ which make sure the job finished OK, and the cell called "Post-processing (pre-RDE)", which
55
+ generates an HTML preview of the results. You are very plausibly done at this point, and can ignore
56
+ all the remaining cells. If you want to do things like repeat detection elimination, or running
57
+ a classifier, or splitting your results file up in specialized ways, there are cells for all of those
58
+ things, but now you're in power-user territory, so I'm going to leave this guide here. Email
59
+ cameratraps@lila.science with questions about the fancy stuff.
60
+
61
+ """
62
62
 
63
63
  #%% Imports and constants
64
64
 
@@ -803,7 +803,7 @@ if render_animals_only:
803
803
  os.makedirs(output_base, exist_ok=True)
804
804
  print('Processing to {}'.format(output_base))
805
805
 
806
- options.api_output_file = combined_api_output_file
806
+ options.md_results_file = combined_api_output_file
807
807
  options.output_dir = output_base
808
808
  ppresults = process_batch_results(options)
809
809
  html_output_file = ppresults.output_html_file
@@ -939,7 +939,7 @@ os.makedirs(output_base, exist_ok=True)
939
939
 
940
940
  print('Processing post-RDE to {}'.format(output_base))
941
941
 
942
- options.api_output_file = filtered_output_filename
942
+ options.md_results_file = filtered_output_filename
943
943
  options.output_dir = output_base
944
944
  ppresults = process_batch_results(options)
945
945
  html_output_file = ppresults.output_html_file
@@ -2014,7 +2014,7 @@ output_base = os.path.join(postprocessing_output_folder, folder_token + \
2014
2014
  os.makedirs(output_base, exist_ok=True)
2015
2015
  print('Processing {} to {}'.format(base_task_name, output_base))
2016
2016
 
2017
- options.api_output_file = sequence_smoothed_classification_file
2017
+ options.md_results_file = sequence_smoothed_classification_file
2018
2018
  options.output_dir = output_base
2019
2019
  ppresults = process_batch_results(options)
2020
2020
  path_utils.open_file(ppresults.output_html_file,attempt_to_open_in_wsl_host=True,browser_name='chrome')
@@ -2134,7 +2134,7 @@ output_base_large_boxes = os.path.join(postprocessing_output_folder,
2134
2134
  os.makedirs(output_base_large_boxes, exist_ok=True)
2135
2135
  print('Processing post-RDE, post-size-separation to {}'.format(output_base_large_boxes))
2136
2136
 
2137
- options.api_output_file = size_separated_file
2137
+ options.md_results_file = size_separated_file
2138
2138
  options.output_dir = output_base_large_boxes
2139
2139
 
2140
2140
  ppresults = process_batch_results(options)
@@ -1,11 +1,11 @@
1
- ########
2
- #
3
- # manage_video_batch.py
4
- #
5
- # Notebook-esque script to manage the process of running a local batch of videos
6
- # through MD. Defers most of the heavy lifting to manage_local_batch.py .
7
- #
8
- ########
1
+ """
2
+
3
+ manage_video_batch.py
4
+
5
+ Notebook-esque script to manage the process of running a local batch of videos
6
+ through MD. Defers most of the heavy lifting to manage_local_batch.py .
7
+
8
+ """
9
9
 
10
10
  #%% Imports and constants
11
11
 
@@ -460,7 +460,6 @@ def main():
460
460
  else:
461
461
  process_input_data(options)
462
462
 
463
-
464
463
  if __name__ == '__main__':
465
464
 
466
465
  main()
@@ -121,7 +121,6 @@ def main():
121
121
  update_data(sql)
122
122
  mysql_connection.commit()
123
123
 
124
-
125
124
  if __name__ == '__main__':
126
125
  main()
127
126
 
@@ -1,15 +1,15 @@
1
- ########
2
- #
3
- # add_max_conf.py
4
- #
5
- # The MD output format included a "max_detection_conf" field with each image
6
- # up to and including version 1.2; it was removed as of version 1.3 (it's
7
- # redundant with the individual detection confidence values).
8
- #
9
- # Just in case someone took a dependency on that field, this script allows you
10
- # to add it back to an existing .json file.
11
- #
12
- ########
1
+ """
2
+
3
+ add_max_conf.py
4
+
5
+ The MD output format included a "max_detection_conf" field with each image
6
+ up to and including version 1.2; it was removed as of version 1.3 (it's
7
+ redundant with the individual detection confidence values).
8
+
9
+ Just in case someone took a dependency on that field, this script allows you
10
+ to add it back to an existing .json file.
11
+
12
+ """
13
13
 
14
14
  #%% Imports and constants
15
15
 
@@ -1,11 +1,11 @@
1
- ########
2
- #
3
- # categorize_detections_by_size.py
4
- #
5
- # Given an API output .json file, creates a separate category for bounding boxes
6
- # above one or more size thresholds.
7
- #
8
- ########
1
+ """
2
+
3
+ categorize_detections_by_size.py
4
+
5
+ Given a MegaDetector .json file, creates a separate category for bounding boxes
6
+ above one or more size thresholds.
7
+
8
+ """
9
9
 
10
10
  #%% Constants and imports
11
11
 
@@ -18,24 +18,42 @@ from tqdm import tqdm
18
18
  #%% Support classes
19
19
 
20
20
  class SizeCategorizationOptions:
21
-
22
- # Should be sorted from smallest to largest
21
+ """
22
+ Options used to parameterize categorize_detections_by_size().
23
+ """
24
+
25
+ #: Thresholds to use for separation, as a fraction of the image size.
26
+ #:
27
+ #: Should be sorted from smallest to largest.
23
28
  size_thresholds = [0.95]
24
29
 
25
- # List of category numbers to use in separation; uses all categories if None
30
+ #: List of category numbers to use in separation; uses all categories if None
26
31
  categories_to_separate = None
27
32
 
28
- # Can be "size", "width", or "height"
33
+ #: Dimension to use for thresholding; can be "size", "width", or "height"
29
34
  measurement = 'size'
30
35
 
31
- # Should have the same length as "size_thresholds"
36
+ #: Categories to assign to thresholded ranges; should have the same length as
37
+ #: "size_thresholds".
32
38
  size_category_names = ['large_detection']
33
39
 
34
40
 
35
41
  #%% Main functions
36
42
 
37
43
  def categorize_detections_by_size(input_file,output_file=None,options=None):
38
-
44
+ """
45
+ Given a MegaDetector .json file, creates a separate category for bounding boxes
46
+ above one or more size thresholds, optionally writing results to [output_file].
47
+
48
+ Args:
49
+ input_file (str): file to process
50
+ output_file (str, optional): optional output file
51
+ options (SizeCategorizationOptions): categorization parameters
52
+
53
+ Returns:
54
+ dict: data loaded from [input_file], with the new size-based categories.
55
+ Identical to what's written to [output_file], if [output_file] is not None.
56
+ """
39
57
  if options is None:
40
58
  options = SizeCategorizationOptions()
41
59