megadetector 5.0.5__py3-none-any.whl → 5.0.7__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 (132) hide show
  1. api/batch_processing/data_preparation/manage_local_batch.py +302 -263
  2. api/batch_processing/data_preparation/manage_video_batch.py +81 -2
  3. api/batch_processing/postprocessing/add_max_conf.py +1 -0
  4. api/batch_processing/postprocessing/categorize_detections_by_size.py +50 -19
  5. api/batch_processing/postprocessing/compare_batch_results.py +110 -60
  6. api/batch_processing/postprocessing/load_api_results.py +56 -70
  7. api/batch_processing/postprocessing/md_to_coco.py +1 -1
  8. api/batch_processing/postprocessing/md_to_labelme.py +2 -1
  9. api/batch_processing/postprocessing/postprocess_batch_results.py +240 -81
  10. api/batch_processing/postprocessing/render_detection_confusion_matrix.py +625 -0
  11. api/batch_processing/postprocessing/repeat_detection_elimination/find_repeat_detections.py +71 -23
  12. api/batch_processing/postprocessing/repeat_detection_elimination/remove_repeat_detections.py +1 -1
  13. api/batch_processing/postprocessing/repeat_detection_elimination/repeat_detections_core.py +227 -75
  14. api/batch_processing/postprocessing/subset_json_detector_output.py +132 -5
  15. api/batch_processing/postprocessing/top_folders_to_bottom.py +1 -1
  16. api/synchronous/api_core/animal_detection_api/detection/run_detector_batch.py +2 -2
  17. classification/prepare_classification_script.py +191 -191
  18. data_management/coco_to_yolo.py +68 -45
  19. data_management/databases/integrity_check_json_db.py +7 -5
  20. data_management/generate_crops_from_cct.py +3 -3
  21. data_management/get_image_sizes.py +8 -6
  22. data_management/importers/add_timestamps_to_icct.py +79 -0
  23. data_management/importers/animl_results_to_md_results.py +160 -0
  24. data_management/importers/auckland_doc_test_to_json.py +4 -4
  25. data_management/importers/auckland_doc_to_json.py +1 -1
  26. data_management/importers/awc_to_json.py +5 -5
  27. data_management/importers/bellevue_to_json.py +5 -5
  28. data_management/importers/carrizo_shrubfree_2018.py +5 -5
  29. data_management/importers/carrizo_trail_cam_2017.py +5 -5
  30. data_management/importers/cct_field_adjustments.py +2 -3
  31. data_management/importers/channel_islands_to_cct.py +4 -4
  32. data_management/importers/ena24_to_json.py +5 -5
  33. data_management/importers/helena_to_cct.py +10 -10
  34. data_management/importers/idaho-camera-traps.py +12 -12
  35. data_management/importers/idfg_iwildcam_lila_prep.py +8 -8
  36. data_management/importers/jb_csv_to_json.py +4 -4
  37. data_management/importers/missouri_to_json.py +1 -1
  38. data_management/importers/noaa_seals_2019.py +1 -1
  39. data_management/importers/pc_to_json.py +5 -5
  40. data_management/importers/prepare-noaa-fish-data-for-lila.py +4 -4
  41. data_management/importers/prepare_zsl_imerit.py +5 -5
  42. data_management/importers/rspb_to_json.py +4 -4
  43. data_management/importers/save_the_elephants_survey_A.py +5 -5
  44. data_management/importers/save_the_elephants_survey_B.py +6 -6
  45. data_management/importers/snapshot_safari_importer.py +9 -9
  46. data_management/importers/snapshot_serengeti_lila.py +9 -9
  47. data_management/importers/timelapse_csv_set_to_json.py +5 -7
  48. data_management/importers/ubc_to_json.py +4 -4
  49. data_management/importers/umn_to_json.py +4 -4
  50. data_management/importers/wellington_to_json.py +1 -1
  51. data_management/importers/wi_to_json.py +2 -2
  52. data_management/importers/zamba_results_to_md_results.py +181 -0
  53. data_management/labelme_to_coco.py +35 -7
  54. data_management/labelme_to_yolo.py +229 -0
  55. data_management/lila/add_locations_to_island_camera_traps.py +1 -1
  56. data_management/lila/add_locations_to_nacti.py +147 -0
  57. data_management/lila/create_lila_blank_set.py +474 -0
  58. data_management/lila/create_lila_test_set.py +2 -1
  59. data_management/lila/create_links_to_md_results_files.py +106 -0
  60. data_management/lila/download_lila_subset.py +46 -21
  61. data_management/lila/generate_lila_per_image_labels.py +23 -14
  62. data_management/lila/get_lila_annotation_counts.py +17 -11
  63. data_management/lila/lila_common.py +14 -11
  64. data_management/lila/test_lila_metadata_urls.py +116 -0
  65. data_management/ocr_tools.py +829 -0
  66. data_management/resize_coco_dataset.py +13 -11
  67. data_management/yolo_output_to_md_output.py +84 -12
  68. data_management/yolo_to_coco.py +38 -20
  69. detection/process_video.py +36 -14
  70. detection/pytorch_detector.py +23 -8
  71. detection/run_detector.py +76 -19
  72. detection/run_detector_batch.py +178 -63
  73. detection/run_inference_with_yolov5_val.py +326 -57
  74. detection/run_tiled_inference.py +153 -43
  75. detection/video_utils.py +34 -8
  76. md_utils/ct_utils.py +172 -1
  77. md_utils/md_tests.py +372 -51
  78. md_utils/path_utils.py +167 -39
  79. md_utils/process_utils.py +26 -7
  80. md_utils/split_locations_into_train_val.py +215 -0
  81. md_utils/string_utils.py +10 -0
  82. md_utils/url_utils.py +0 -2
  83. md_utils/write_html_image_list.py +9 -26
  84. md_visualization/plot_utils.py +12 -8
  85. md_visualization/visualization_utils.py +106 -7
  86. md_visualization/visualize_db.py +16 -8
  87. md_visualization/visualize_detector_output.py +208 -97
  88. {megadetector-5.0.5.dist-info → megadetector-5.0.7.dist-info}/METADATA +3 -6
  89. {megadetector-5.0.5.dist-info → megadetector-5.0.7.dist-info}/RECORD +98 -121
  90. {megadetector-5.0.5.dist-info → megadetector-5.0.7.dist-info}/WHEEL +1 -1
  91. taxonomy_mapping/map_lila_taxonomy_to_wi_taxonomy.py +1 -1
  92. taxonomy_mapping/map_new_lila_datasets.py +43 -39
  93. taxonomy_mapping/prepare_lila_taxonomy_release.py +5 -2
  94. taxonomy_mapping/preview_lila_taxonomy.py +27 -27
  95. taxonomy_mapping/species_lookup.py +33 -13
  96. taxonomy_mapping/taxonomy_csv_checker.py +7 -5
  97. api/synchronous/api_core/yolov5/detect.py +0 -252
  98. api/synchronous/api_core/yolov5/export.py +0 -607
  99. api/synchronous/api_core/yolov5/hubconf.py +0 -146
  100. api/synchronous/api_core/yolov5/models/__init__.py +0 -0
  101. api/synchronous/api_core/yolov5/models/common.py +0 -738
  102. api/synchronous/api_core/yolov5/models/experimental.py +0 -104
  103. api/synchronous/api_core/yolov5/models/tf.py +0 -574
  104. api/synchronous/api_core/yolov5/models/yolo.py +0 -338
  105. api/synchronous/api_core/yolov5/train.py +0 -670
  106. api/synchronous/api_core/yolov5/utils/__init__.py +0 -36
  107. api/synchronous/api_core/yolov5/utils/activations.py +0 -103
  108. api/synchronous/api_core/yolov5/utils/augmentations.py +0 -284
  109. api/synchronous/api_core/yolov5/utils/autoanchor.py +0 -170
  110. api/synchronous/api_core/yolov5/utils/autobatch.py +0 -66
  111. api/synchronous/api_core/yolov5/utils/aws/__init__.py +0 -0
  112. api/synchronous/api_core/yolov5/utils/aws/resume.py +0 -40
  113. api/synchronous/api_core/yolov5/utils/benchmarks.py +0 -148
  114. api/synchronous/api_core/yolov5/utils/callbacks.py +0 -71
  115. api/synchronous/api_core/yolov5/utils/dataloaders.py +0 -1087
  116. api/synchronous/api_core/yolov5/utils/downloads.py +0 -178
  117. api/synchronous/api_core/yolov5/utils/flask_rest_api/example_request.py +0 -19
  118. api/synchronous/api_core/yolov5/utils/flask_rest_api/restapi.py +0 -46
  119. api/synchronous/api_core/yolov5/utils/general.py +0 -1018
  120. api/synchronous/api_core/yolov5/utils/loggers/__init__.py +0 -187
  121. api/synchronous/api_core/yolov5/utils/loggers/wandb/__init__.py +0 -0
  122. api/synchronous/api_core/yolov5/utils/loggers/wandb/log_dataset.py +0 -27
  123. api/synchronous/api_core/yolov5/utils/loggers/wandb/sweep.py +0 -41
  124. api/synchronous/api_core/yolov5/utils/loggers/wandb/wandb_utils.py +0 -577
  125. api/synchronous/api_core/yolov5/utils/loss.py +0 -234
  126. api/synchronous/api_core/yolov5/utils/metrics.py +0 -355
  127. api/synchronous/api_core/yolov5/utils/plots.py +0 -489
  128. api/synchronous/api_core/yolov5/utils/torch_utils.py +0 -314
  129. api/synchronous/api_core/yolov5/val.py +0 -394
  130. md_utils/matlab_porting_tools.py +0 -97
  131. {megadetector-5.0.5.dist-info → megadetector-5.0.7.dist-info}/LICENSE +0 -0
  132. {megadetector-5.0.5.dist-info → megadetector-5.0.7.dist-info}/top_level.txt +0 -0
@@ -8,29 +8,30 @@ api/batch_processing/api_core/server_utils.py,sha256=oFusP1E29op5DN1nEaR-jQZgREx
8
8
  api/batch_processing/api_core/batch_service/score.py,sha256=ZuPQV7O1u9QNPhWVSYxQqvYgXo9p15e-XhnUyuz0vLE,17347
9
9
  api/batch_processing/api_core_support/aggregate_results_manually.py,sha256=8yDXbw12G8Y6SOv09tY-0hPXMNG_iRPv6mzxBiccsaU,2275
10
10
  api/batch_processing/api_support/summarize_daily_activity.py,sha256=SmRGAMWTKXf9bDXUPsTySMiIg8K1LDkAC8KVBVH_mPg,5383
11
- api/batch_processing/data_preparation/manage_local_batch.py,sha256=8vzWcHLqnoCIsqj4XhuTIEuamz6zzS0YgruUfi2OMRY,86533
12
- api/batch_processing/data_preparation/manage_video_batch.py,sha256=WP3YV29xwseRVLBOIHjYbw8gPcbwg3aJM7Mx7uMlAPI,7075
11
+ api/batch_processing/data_preparation/manage_local_batch.py,sha256=Nb9MxJyAJC2e4twWkoGfI-crSSgB9g8Ue28cbbeE5QA,88618
12
+ api/batch_processing/data_preparation/manage_video_batch.py,sha256=fobPIMmfvdqa1OzxsurEYCFVnUTHGrtrGBiCq3xnYHs,9668
13
13
  api/batch_processing/integration/digiKam/setup.py,sha256=7P1X3JYrBDXmLUeLRrzxNfDkL5lo-pY8nXsp9Cz8rOI,203
14
14
  api/batch_processing/integration/digiKam/xmp_integration.py,sha256=AbGPTe9RjjOkKdiZDSElai61QyfeiLQQqJR2fiJpymA,17775
15
15
  api/batch_processing/integration/eMammal/test_scripts/config_template.py,sha256=UnvrgaFRBu59MuVUJa2WpG8ebcOJWcNeZEx6GWuYLzc,73
16
16
  api/batch_processing/integration/eMammal/test_scripts/push_annotations_to_emammal.py,sha256=eIzEKiwzCfifCOCGf-jf8G4dMuzyxQMWlrFzt-Z-nVk,3608
17
17
  api/batch_processing/integration/eMammal/test_scripts/select_images_for_testing.py,sha256=OYMu97p8vprSv03QcnS6aSxPBocn9sgaozfUqq_JpyM,1369
18
- api/batch_processing/postprocessing/add_max_conf.py,sha256=pqD-I-e0vqtf49Jm-SNhh9u7jhnVlyi4Lf5prNksldU,1529
19
- api/batch_processing/postprocessing/categorize_detections_by_size.py,sha256=RtoAh2oPDwkOaxkDmD6CZyZXByvPdscMmui5d3lt27o,3338
18
+ api/batch_processing/postprocessing/add_max_conf.py,sha256=y4Xr_OHRxcop3vsLWQJ56eYIemm2HHKqVfvKJonTcQA,1530
19
+ api/batch_processing/postprocessing/categorize_detections_by_size.py,sha256=b_O2OM44zIXewR4RjzeS2ue-32k5jE6KgjiPn8JRxAA,4877
20
20
  api/batch_processing/postprocessing/combine_api_outputs.py,sha256=WsOV4EsK9JUCMka1_-u-vinmWc6Ko8B0PD5fmwoXHh0,8233
21
- api/batch_processing/postprocessing/compare_batch_results.py,sha256=puzEA02yrCjtfjdhur0RSnqyIjG09hvxJQdEMS-srgU,32705
21
+ api/batch_processing/postprocessing/compare_batch_results.py,sha256=65Kq6mChsPElQfjhWgLDmnO9b6igatQvXiasB2YVHno,34652
22
22
  api/batch_processing/postprocessing/convert_output_format.py,sha256=aLboVVZdlGUNYOZhme0w8LtYrd04i15oK0apOgZaYWk,12947
23
- api/batch_processing/postprocessing/load_api_results.py,sha256=oLgUbQg_i3THmlMVKP9_F3yBeqVK_i_9H6b_8e9z64Y,7421
24
- api/batch_processing/postprocessing/md_to_coco.py,sha256=kvFTBbk4QnosOqot7vnsr8nxIMeA_2ekeyCiyCsnppo,10141
25
- api/batch_processing/postprocessing/md_to_labelme.py,sha256=kEpI8utZSsTXLtqf7Oned6EHDt5CPVjBVpzvNqjf8oo,7020
23
+ api/batch_processing/postprocessing/load_api_results.py,sha256=1BwpXUUQiGJeOUDfQTiA9thNd5jbSbOU3siTO1_Dw5s,6997
24
+ api/batch_processing/postprocessing/md_to_coco.py,sha256=dRAkCGWtcNy_vsSTkX1h_0DZAsW6zNO7F-8XSkR8wAo,10139
25
+ api/batch_processing/postprocessing/md_to_labelme.py,sha256=lfheIrXqzjq6lInmlYgYq354PrVvH2SPNXKr8e3S_DQ,7075
26
26
  api/batch_processing/postprocessing/merge_detections.py,sha256=B4QnqW9nvcEJpXzAK20TVB0t6L8c7PR5OjPy8FX-5Z8,15930
27
- api/batch_processing/postprocessing/postprocess_batch_results.py,sha256=WkXiFuFAFRaKETGIxk0Vv9lDtHANNHHN6lBz2l5Lw40,66033
27
+ api/batch_processing/postprocessing/postprocess_batch_results.py,sha256=l_uyOTTINq9GBZlHsAnPteEvA-rWmKZH-eWVcqbMPUM,73653
28
+ api/batch_processing/postprocessing/render_detection_confusion_matrix.py,sha256=h-a7tWNBSe3VRUg-Z4aX-ySUzrF8NfiEYWA1lHbZrmo,25040
28
29
  api/batch_processing/postprocessing/separate_detections_into_folders.py,sha256=l5NKxDDxROc2EXt8EslrswXAZkQXgWTy5FSqCqa09Ug,28720
29
- api/batch_processing/postprocessing/subset_json_detector_output.py,sha256=Q4V7RWSjrBCt7VEsakx0c_haHlRdrLSzy0uqD5ELjp4,20809
30
- api/batch_processing/postprocessing/top_folders_to_bottom.py,sha256=crm_UX8jE6JurUHmS2yI-awYn3_MXqvo2xOlFZ_qig8,5475
31
- api/batch_processing/postprocessing/repeat_detection_elimination/find_repeat_detections.py,sha256=-XQ5IKY33y4CR1ELj-DOFbvtH51d-CtB6Dc-wiDOXoE,6899
32
- api/batch_processing/postprocessing/repeat_detection_elimination/remove_repeat_detections.py,sha256=Q0dRNGRO6l83pTbqkfiF0qOFsy2wfbpher3fd23Y_TU,2184
33
- api/batch_processing/postprocessing/repeat_detection_elimination/repeat_detections_core.py,sha256=-n7PcULN5hmxy6gU98frgXwDUeTJWZDOnjMVVBkC6YM,54584
30
+ api/batch_processing/postprocessing/subset_json_detector_output.py,sha256=EROwcj4K-abAwzyZjPCQocuayIVma85lV-D6WvvRMuc,26368
31
+ api/batch_processing/postprocessing/top_folders_to_bottom.py,sha256=etJK9DmHppMe3WqGXypuilW-n-7hOjOO9w_k1khlaVU,5476
32
+ api/batch_processing/postprocessing/repeat_detection_elimination/find_repeat_detections.py,sha256=fYqPZhaL-6cbpKHz96O3Ch65Y8xux2LQ2-ZlMGhOlM0,9053
33
+ api/batch_processing/postprocessing/repeat_detection_elimination/remove_repeat_detections.py,sha256=YdMvM814TX0ZRTnP7BfowE62PoMoCOYcJOFl69DlKhQ,2189
34
+ api/batch_processing/postprocessing/repeat_detection_elimination/repeat_detections_core.py,sha256=D-q20g9kLXCNB8IMyeLYxdMSvipzmgu2buEh--HJrC0,62882
34
35
  api/synchronous/api_core/animal_detection_api/api_backend.py,sha256=PJXV0RFb6FoPBmdRug5W_5nbFwY2C_8CvDpFHjDs9w4,4934
35
36
  api/synchronous/api_core/animal_detection_api/api_frontend.py,sha256=_FGLf5C2tXQABFEGaA2Kzq05hj_D60BaIfWLCI-Os_4,10690
36
37
  api/synchronous/api_core/animal_detection_api/config.py,sha256=yEf7JZwRJCtHEV80kYvnNnUFJNds_AYLhomffwfFQi0,1017
@@ -38,7 +39,7 @@ api/synchronous/api_core/animal_detection_api/data_management/annotations/annota
38
39
  api/synchronous/api_core/animal_detection_api/detection/process_video.py,sha256=b2xcQThAdlgirumxynHULYLviCr_q5sCDfdkKEqVFyU,22089
39
40
  api/synchronous/api_core/animal_detection_api/detection/pytorch_detector.py,sha256=nI2xctI6FSdbWjSFHYlMT0LTH6CCATOe9DF-I8MLEpc,11505
40
41
  api/synchronous/api_core/animal_detection_api/detection/run_detector.py,sha256=LBveNOLE3AWSTcQ1MUbbWXaQIutr9e2vtz6RG2SjlWQ,23821
41
- api/synchronous/api_core/animal_detection_api/detection/run_detector_batch.py,sha256=ZntMoo1Gb8rRUvFA4RJ9A7SGEZAlHInAIjxeMiGrdGU,41829
42
+ api/synchronous/api_core/animal_detection_api/detection/run_detector_batch.py,sha256=eivQu5yee5WtBmNQRQ2p636Gf8IB5slyrQL4QRZ2HeM,41849
42
43
  api/synchronous/api_core/animal_detection_api/detection/run_inference_with_yolov5_val.py,sha256=yxMFxQQDvkydWVpM0ecopDXtPi89gaqMX0TKjyxNyjI,22118
43
44
  api/synchronous/api_core/animal_detection_api/detection/run_tiled_inference.py,sha256=cs1IehE2DXj8Nr3CbnYMXqwcFM1vUBT1Rm5We5nlcSM,28785
44
45
  api/synchronous/api_core/animal_detection_api/detection/tf_detector.py,sha256=xOO8kzd-Um2X_sAZyop524LM53nipv5pNx8YueGTJrc,6760
@@ -57,39 +58,6 @@ api/synchronous/api_core/animal_detection_api/md_utils/url_utils.py,sha256=aFN7_
57
58
  api/synchronous/api_core/animal_detection_api/md_utils/write_html_image_list.py,sha256=myXMdOwUERZWp9p2RPu8TcStCsu2X7aJNtcomlhoeqA,7573
58
59
  api/synchronous/api_core/animal_detection_api/md_visualization/visualization_utils.py,sha256=Up8hfM_KYyToIUhTv3sSrXGoYl8Hm57NO5t5AHMW3tk,31680
59
60
  api/synchronous/api_core/tests/load_test.py,sha256=Xiq2JFv9mnSHehwrm-grZ1Flv9qtkW-zUrTu1cYPry8,3386
60
- api/synchronous/api_core/yolov5/detect.py,sha256=qCNxiyz23NscQ9PiK9SfyvsYP4ciHNSydmC1pUwbzgY,13296
61
- api/synchronous/api_core/yolov5/export.py,sha256=zhGuz5JEkN7wOrwt7TNZby2MQKXaSDD5eGVyV0x4UU4,29941
62
- api/synchronous/api_core/yolov5/hubconf.py,sha256=lja94O2fNPugd766NWLohGGKe8uYL3CcoCQWqU9NRow,6465
63
- api/synchronous/api_core/yolov5/train.py,sha256=xvV9cem0nnRkD74GL5b12OT1_zYfjHu_VXzGsfVkKo8,34919
64
- api/synchronous/api_core/yolov5/val.py,sha256=L1W5ev0MkNpAkC1pHn6PIT_zUEzoNtGtHsk8reyJX-8,19434
65
- api/synchronous/api_core/yolov5/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
- api/synchronous/api_core/yolov5/models/common.py,sha256=3HlH4myzir6ayBakq7afJ8mFjTtefzdm85dTManKvrU,35329
67
- api/synchronous/api_core/yolov5/models/experimental.py,sha256=mgAH6xBRO9KDK2wUi04NnDTBbH7BG79a601SgVuvneA,4146
68
- api/synchronous/api_core/yolov5/models/tf.py,sha256=q6E1ihkzvNFO_HevsTUPpGjV5khvVxsOVgD44JEAJXg,25502
69
- api/synchronous/api_core/yolov5/models/yolo.py,sha256=wCOZqYJ6rTGDDTM7e9KBWIQkzmFz4msSBjyswbtZ3FI,15354
70
- api/synchronous/api_core/yolov5/utils/__init__.py,sha256=EzJ0SYWEjKTqO81GwH-CaGOHFj2U74_SzPsEfAl4-D4,1093
71
- api/synchronous/api_core/yolov5/utils/activations.py,sha256=jMA9XaVgjAoRTAZqf5EYzm3Vl-5eAryuHAzDUR6NFJk,3449
72
- api/synchronous/api_core/yolov5/utils/augmentations.py,sha256=OEpzoz2LsxSze3TV4MqnDTESIRSjRA2GS4zRzWKdDns,11910
73
- api/synchronous/api_core/yolov5/utils/autoanchor.py,sha256=ED5gl4HWF1ECwoMQ0DIMraFXYkRrbET5oFsigfF8mM0,7443
74
- api/synchronous/api_core/yolov5/utils/autobatch.py,sha256=l1h-OF7bMrrdkjBY4iINdNfXByv_X9FbLIdEA2peZMA,2600
75
- api/synchronous/api_core/yolov5/utils/benchmarks.py,sha256=Gja7nJludYFVHLpB6gEn1jOrDphORI4yiYGV7IubQ3w,6325
76
- api/synchronous/api_core/yolov5/utils/callbacks.py,sha256=A-pteFVbql5vPtMCfQ7GT6HL25lisTMicicLmVfPgAs,2402
77
- api/synchronous/api_core/yolov5/utils/dataloaders.py,sha256=XFnQcXRCiHnFVNVy0Cas8AVwCGuZK_Bt8AuxyuffHVI,47301
78
- api/synchronous/api_core/yolov5/utils/downloads.py,sha256=7yrhzoQs9pqperi9TQMXC7B1tqJMBRKtr_PR6USSiWM,7111
79
- api/synchronous/api_core/yolov5/utils/general.py,sha256=bwXU8Z1S_E1VBKvTBX6XUzL16-j3SmO_ZmgseEyQdr4,41842
80
- api/synchronous/api_core/yolov5/utils/loss.py,sha256=Yagud7Hc5GUbM2VRD6ghAqwPi8M7LlJjKfFw9nOz8d4,9919
81
- api/synchronous/api_core/yolov5/utils/metrics.py,sha256=7A2nBrxUDH5lynMRZePALx-tTvBp6pj0I0uRsy8m8ZY,14361
82
- api/synchronous/api_core/yolov5/utils/plots.py,sha256=LQ_ZuJA1xIZznRDNvglx4qjPu36QOVSrq6p9baCKafg,21021
83
- api/synchronous/api_core/yolov5/utils/torch_utils.py,sha256=H5PFUbO_hCuH-BFNiLkQPeK9708ggHu1r8sDaA6LLuc,13562
84
- api/synchronous/api_core/yolov5/utils/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
- api/synchronous/api_core/yolov5/utils/aws/resume.py,sha256=GeIf_rNsmIEpmvOPQ7bZp8pF9OPy6287VjbegHlRR0g,1198
86
- api/synchronous/api_core/yolov5/utils/flask_rest_api/example_request.py,sha256=t2NqIw3dksG9XZCz3-QjwtFCHBbFFIW2TKpXEZr_5bg,368
87
- api/synchronous/api_core/yolov5/utils/flask_rest_api/restapi.py,sha256=lPY_R2_n1KMcT1R3G7y8d83idT2GmJ6dj5SnZYxtX-M,1410
88
- api/synchronous/api_core/yolov5/utils/loggers/__init__.py,sha256=GIS8lmdizxGlqhRGgoVROnJxxQNcQhYw08dCQbtkvlQ,8095
89
- api/synchronous/api_core/yolov5/utils/loggers/wandb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
- api/synchronous/api_core/yolov5/utils/loggers/wandb/log_dataset.py,sha256=C0hoUQUinn56QBkLgCWZpNYZu6xpTKy0tTY0tC_8z44,1032
91
- api/synchronous/api_core/yolov5/utils/loggers/wandb/sweep.py,sha256=psU3WRTwnzbq7P_lcdT0pyl6rI5DwR6_ALx_ECPAJj8,1213
92
- api/synchronous/api_core/yolov5/utils/loggers/wandb/wandb_utils.py,sha256=BgWPOU6dFsiG-gTpyFPzsttpoui_eCAMtOklrFquuRc,27586
93
61
  classification/aggregate_classifier_probs.py,sha256=1X5hpC2JRj790jyFEWES2RI1UbcjzhGcslhMJpvMpDM,3488
94
62
  classification/analyze_failed_images.py,sha256=WG2ubdkClRo6-v3JqD6dQ7X0aah1L_rYry2BHzirOYE,8463
95
63
  classification/cache_batchapi_outputs.py,sha256=EyVG8ynGSX3R7aiz6cN7mDhX7miyMg7FnMXnO2OzScQ,6400
@@ -103,7 +71,7 @@ classification/json_to_azcopy_list.py,sha256=o57wLHJPDrP9OPSY-3x81WI3mmcH1DyIOUh
103
71
  classification/json_validator.py,sha256=ZizcEPpW1J26p-oGyfvcffBy2voNRKCNXKF8NtxIt5A,26618
104
72
  classification/map_classification_categories.py,sha256=2B4K-TdE77VNw8XG1h8X7CuUvw0JSIrALdy6a1FvkXw,10738
105
73
  classification/merge_classification_detection_output.py,sha256=2FDTauvkbMZ3putJH837Ux67HTGsCAnGCOXhnnqjt6g,20123
106
- classification/prepare_classification_script.py,sha256=6BRxiEPSIl3nTVrZHE5qqUGDe_AxAEqnUg7sxMZSFMg,6141
74
+ classification/prepare_classification_script.py,sha256=7xwqws57Fkn0rmH5sADlem9trOJkiriSRwPredeIXho,5952
107
75
  classification/prepare_classification_script_mc.py,sha256=IMCsLyGL70cViVTH0eow0sYDM9E81AsBGrctNveXP10,7440
108
76
  classification/run_classifier.py,sha256=eBpkZzP7TtrnwOIlc99fTpe1QocmDuERaIw9mXqwAWI,9363
109
77
  classification/save_mislabeled.py,sha256=WmOKNXgrvvIkUdehiiWHNiKc5M7q0UM2If0vea0_7K8,3466
@@ -118,108 +86,117 @@ data_management/cct_json_utils.py,sha256=JX5pJh5QLyKDhcXheUYgbRSd99uB9Ui-EfsRZ_F
118
86
  data_management/cct_to_csv.py,sha256=urIL8IUByhKZ4FLLa9TKlzT6mu8upLzAPN1WNnDZdIY,3859
119
87
  data_management/cct_to_md.py,sha256=0QtqUdUkrema2BSNTeJqHYkDuwOLc7tOQwq1KxTbtPE,4485
120
88
  data_management/cct_to_wi.py,sha256=nJKUhLXcZXKE5tAR9UxbqCjeikfaABfB746wpv-1BmI,8336
121
- data_management/coco_to_yolo.py,sha256=TBg2vfjvSZz1_B06cKRLze6yQJaluwKHdVfoRW1AN_0,24969
122
- data_management/generate_crops_from_cct.py,sha256=bkNLgYjTIiI8PcLS23VnmGPOUqYMPWmFM3DQjXWDT2A,4286
123
- data_management/get_image_sizes.py,sha256=lxNvpAHnFvuibRRqjJ_VO1XrfDxwGFTHibG8bkMmHJA,4118
124
- data_management/labelme_to_coco.py,sha256=F7WZ9-7rnzPgUsrtn9KRXBMElviziiWjLehSd8E6v8A,12925
89
+ data_management/coco_to_yolo.py,sha256=8c-9cCjelKTwMOL6gQc9oAWum7UPxIr0FP_tiK8NyLc,25880
90
+ data_management/generate_crops_from_cct.py,sha256=m6HJ8bB4N50HYV4SXAUV43k1XJl71QZmmWZ4L-9T45Y,4283
91
+ data_management/get_image_sizes.py,sha256=yUCI5zQmA9G_GDaQiApwoafmO37cUi97dw-Ekh5leOE,4220
92
+ data_management/labelme_to_coco.py,sha256=9RpOp-IV5miJag4KInLijR7koH8eZSztKdAmArhoMx4,14204
93
+ data_management/labelme_to_yolo.py,sha256=XjhrmoGxyo1N-N8kueGzmy_m6FWR4SO8sNHFppoH-GQ,8480
94
+ data_management/ocr_tools.py,sha256=8cVJMQvzvv_6HXV8zMR4nJH72-L_f3Dy9IjIb3E32Js,29920
125
95
  data_management/read_exif.py,sha256=HGCp5gvD8MHQ0xGGTX2_PD5JHFTdMtqjZ8ql2pt5Fn0,19036
126
96
  data_management/remove_exif.py,sha256=_WDrKfRwK0UWCkj4SiLutGCd7-WRaKYoTgLfBWPDhGU,1555
127
- data_management/resize_coco_dataset.py,sha256=WFlLHOhNVEZrUtzk8-zeVL32-FKlOiMHX3xoQce75k0,7416
128
- data_management/yolo_output_to_md_output.py,sha256=QsW0iAlnJiOYxdMbDEq9K63DyajFB4YWlcpL4rV9jYc,13487
129
- data_management/yolo_to_coco.py,sha256=qY-B8PxFtG4vNlwocRXDK-wUeOEbVZnIF6hbxLFe-J4,7226
97
+ data_management/resize_coco_dataset.py,sha256=pG1yVktPSp6Vc3DThrJO7lmo67_KvOdqEtFpwM6QjOA,7398
98
+ data_management/yolo_output_to_md_output.py,sha256=vxUdn4bqg0S67ozvxtnlX77X6S7nCvyZbKAyvCh_Suc,16313
99
+ data_management/yolo_to_coco.py,sha256=Xb9UVO-HHYrkJyxbASWJDZrZCyW3JwBPI_WN5SQHys4,8078
130
100
  data_management/annotations/annotation_constants.py,sha256=P2CZCbAE0ImLLfaNRb1SMlP3q1fULWAIjgrYOrF9L0g,1566
131
101
  data_management/databases/add_width_and_height_to_db.py,sha256=71mOEK3xo9gbxK1TVZzBA9nNi-1ElmBZbIPKrUm9XG0,619
132
102
  data_management/databases/combine_coco_camera_traps_files.py,sha256=cwu_REQXdHWfVLtCvTvFEIvM7z8GwHVoawVuHcWv2aw,6888
133
- data_management/databases/integrity_check_json_db.py,sha256=x9BO7fDXCfdyHc-oiwVoeesIp_M9Q2bUOdh9DsohTbc,14377
103
+ data_management/databases/integrity_check_json_db.py,sha256=aQe36eEnhxHFpm9XGmFXCf4jsTvfXuBWMfKdIKKN4tU,14535
134
104
  data_management/databases/remove_corrupted_images_from_db.py,sha256=Dod8UQDFveAUJlrH9Svcp_HezdILRHp74TbAl3YGf84,6138
135
105
  data_management/databases/subset_json_db.py,sha256=UeVn3jlcpEw-K9E-QyRwxdzl7zaV80iv_u4v6kHUd_E,2749
136
106
  data_management/importers/add_nacti_sizes.py,sha256=qsBHPyJ7MPzl0vgJX5iErZxWkTJ6QRcyLJ8GM2YBu2U,1172
137
- data_management/importers/auckland_doc_test_to_json.py,sha256=09MS1_8ZLytlRC5MAcpbrbKxfH6CDLhTOQ9F-10CFTA,12897
138
- data_management/importers/auckland_doc_to_json.py,sha256=Gcon1XAeNwDfubqCXBUI6BgMLMmchgyv8u9OUxF7mwI,5954
139
- data_management/importers/awc_to_json.py,sha256=7L0Q1bRwnCtEvdvOizVah3MDfFtmnYMHKxBeWMDgelI,5298
140
- data_management/importers/bellevue_to_json.py,sha256=RLEiZ-k7wrkIXfS4CpEfnHiilPwOmE6A9hfu7faXiY8,7900
107
+ data_management/importers/add_timestamps_to_icct.py,sha256=8XhQAIt_qw63qTMPobCKGl4O9RQZvZmhbmiSetOyNvA,2459
108
+ data_management/importers/animl_results_to_md_results.py,sha256=tzYaPpiUte5A1VHulAbYO9-hzUIpE1xI5lJp6hS_JoI,4899
109
+ data_management/importers/auckland_doc_test_to_json.py,sha256=9Fg-n_Kj2jK5iZVaPrioNkhlLNxGnrU5GS_44lsadKo,12910
110
+ data_management/importers/auckland_doc_to_json.py,sha256=qSjBcR7FTd5_J2LO6WOoIFxSnE2IiIIqRkhbydULV7s,5952
111
+ data_management/importers/awc_to_json.py,sha256=jLXmwGaq81wgH7HcpbAJoNMQP2CqkdfI1mvShdTGeqw,5307
112
+ data_management/importers/bellevue_to_json.py,sha256=d5QhZMrOY4hRC9vghojCulX6G8qnVrymnKDx_mUlsRE,7909
141
113
  data_management/importers/cacophony-thermal-importer.py,sha256=0Y21Hx8Y4dMvpUpbKKMDYb0r-AqFD2k8N0Bf9q75geY,28621
142
- data_management/importers/carrizo_shrubfree_2018.py,sha256=giJuSMeTSerjvLjh8l_VzNwe_BCZNt92OdX8yNmRBUU,7811
143
- data_management/importers/carrizo_trail_cam_2017.py,sha256=ChDV7sU2Dqx9x4-ZuId74HBijsPvUP5cEkQ5bu8AQIU,8814
144
- data_management/importers/cct_field_adjustments.py,sha256=_T5pSy-7tKUml8lGFR8oW5T9fyUQvvt1aqZ3-0w_26s,1343
145
- data_management/importers/channel_islands_to_cct.py,sha256=4Kv3mufHREXTvOcBx43WWTDEgd14KflUXiVjOLfoX78,29470
146
- data_management/importers/ena24_to_json.py,sha256=0PWaMXZ_4q44aUrfOKh_fmt21z5kOPXRYwAB4f5_p_g,8232
114
+ data_management/importers/carrizo_shrubfree_2018.py,sha256=pEdCh3z458dOnGIM_nXJIKlSb8Yv5yjr7Jjp32AwhaI,7827
115
+ data_management/importers/carrizo_trail_cam_2017.py,sha256=Kw0SnOMt7DwIhnSEz5wjLpJ4pMjEx5n5PNPW36vrskk,8830
116
+ data_management/importers/cct_field_adjustments.py,sha256=Kw1_gIxqXLovGa65jCRm9MIms6qfpqwTiOdM5unw9K8,1351
117
+ data_management/importers/channel_islands_to_cct.py,sha256=DmEhjm7iG11yuJUVkXhqWuAXOLYQvV3AXY8nkwyf2oY,29483
118
+ data_management/importers/ena24_to_json.py,sha256=XkJX0clvJREilzDByuoP6cuaOXvXnQoFkG25XoA8opU,8248
147
119
  data_management/importers/filenames_to_json.py,sha256=wzleV-02pwNHKAVvqhkAwahIJ6La_-OCPEXTOg64ezM,10526
148
- data_management/importers/helena_to_cct.py,sha256=nzJPx1fRHPkfpB-ldtZqRISSFP45e6MtRDi4w7SSTs8,8694
149
- data_management/importers/idaho-camera-traps.py,sha256=LxB1uuV5mZGWuBW__oQVK232-P-BhuHMucdUBPhTn64,54019
150
- data_management/importers/idfg_iwildcam_lila_prep.py,sha256=A-hHSqnirQd3slJLoUhaUB89pMosMAuhVkp6JiOvb5E,8140
151
- data_management/importers/jb_csv_to_json.py,sha256=qP_XmCQkacn65OAH9JDX13VZgEF3vL6ewAKi9lwBRN4,3719
120
+ data_management/importers/helena_to_cct.py,sha256=imo-SRsib7c7NIM0vSE_6zbb3X7jA5XiIJrM6RbAoQA,8701
121
+ data_management/importers/idaho-camera-traps.py,sha256=xKXfrwTpdMWJM1U92eWXxKhtW57iIjB9YyS4b_nA4e0,54058
122
+ data_management/importers/idfg_iwildcam_lila_prep.py,sha256=emnKiw1TckZFsCI1uMgFIZUw1CERAVqufr9Tay94YAc,8166
123
+ data_management/importers/jb_csv_to_json.py,sha256=u3IZwDboObYlxtUSa35G8P3t_L48m2Ak5v7Fl8hCnGM,3730
152
124
  data_management/importers/mcgill_to_json.py,sha256=ZxsNW9qFi6Kyu8SJ0BB5uK7AMuBW92QOOKXHPbIgPwY,6718
153
- data_management/importers/missouri_to_json.py,sha256=j9zfcfBg6Ur3-jqRiSpFrDhInBtfAjCpl8HFjL-H9xU,14842
125
+ data_management/importers/missouri_to_json.py,sha256=y9lbLaD8bGM4m9iqGHIicyZOByeJGfZOF51RikHMSFU,14840
154
126
  data_management/importers/nacti_fieldname_adjustments.py,sha256=57PyfOft2Ws-1AcG4_9mzOcB3uW4IFxaZ3z0LsItUUU,2045
155
- data_management/importers/noaa_seals_2019.py,sha256=WHXqDmOetJYcrBkyNww4ZFQbh4VpCjQ7V4U3RpbBt94,5144
156
- data_management/importers/pc_to_json.py,sha256=ySCZvprhCHK6EsC5NYTv49kO-uypZnuxsRdlmAwKuLU,10709
127
+ data_management/importers/noaa_seals_2019.py,sha256=wYcjhARv4IUJgawXcAnwIAOGZq5GORG8ElE_7JZSVCk,5145
128
+ data_management/importers/pc_to_json.py,sha256=9Nin7R47aaE5bjXjvq7A2trv2vFdJVYzhLHwLFji5Tg,10718
157
129
  data_management/importers/plot_wni_giraffes.py,sha256=V_kAzbYjtXEBUCdSwSGsEEemLN9aVyZuKhoSZQEvkCI,3787
158
- data_management/importers/prepare-noaa-fish-data-for-lila.py,sha256=k5SB-HXtV0mXAatfZHvBdrkthNLUi71A3Kab9m4OzaY,12803
159
- data_management/importers/prepare_zsl_imerit.py,sha256=Stuau2IBa1iLOfyR6hN8suQhk07yPRZQSABpeekw_j4,3745
160
- data_management/importers/rspb_to_json.py,sha256=H3n4mq5xCNVbyE73v0UwFhg4nVoG5y4F-bFlynPLegk,9821
161
- data_management/importers/save_the_elephants_survey_A.py,sha256=HjzfIqgBmg67mhA2uoKnGlMYCOvj4i2OMzvIkQaeS4A,10623
162
- data_management/importers/save_the_elephants_survey_B.py,sha256=2HV_a028O-6flu0pLVIt5PkYXfT-dABZqY7HFA5UzZI,11148
163
- data_management/importers/snapshot_safari_importer.py,sha256=yuBXTC91Ak_a3TdQSn5TF-dFCqLUA-iShclYSSQ3yyw,23624
130
+ data_management/importers/prepare-noaa-fish-data-for-lila.py,sha256=WIkuR4ozEeHwzQPs54jIDIbAgKf1I4taZNgpHHzh-Rc,12774
131
+ data_management/importers/prepare_zsl_imerit.py,sha256=9wTh9w6kyQXJoA2h0kuzzcoCF1lFNfO9eRlSTnV6unY,3754
132
+ data_management/importers/rspb_to_json.py,sha256=L-E4IcwvnwZ_I142dQ6BbQpAqZmNoAcVIuiwtuYGDXw,9834
133
+ data_management/importers/save_the_elephants_survey_A.py,sha256=OpGLHXLj1VGZQefZ1R59_mSiQ2KkKN11PyvKWWJnVbY,10639
134
+ data_management/importers/save_the_elephants_survey_B.py,sha256=qex23iOkUBttfDvoCeBw3NLVSbkf1xQtS8VhrvN4SgM,11167
135
+ data_management/importers/snapshot_safari_importer.py,sha256=h5xSAlFgxckBXmKLKrIIs9Hegq5StgGMaG5pTCPSpc8,23591
164
136
  data_management/importers/snapshot_safari_importer_reprise.py,sha256=yRzgIYvcvMnlNL0sWv3ZUCNzo2e5_sy3k4DC18xh0Mc,22996
165
- data_management/importers/snapshot_serengeti_lila.py,sha256=Vfx-7T7x3QwNREa_ieS0nOr_OTsHFcgMBFEznrOEIc4,33897
137
+ data_management/importers/snapshot_serengeti_lila.py,sha256=mZ_hR7yHfeZFkLtuAO1U7kWRq3_wDtBE28-qXUZmBzo,33854
166
138
  data_management/importers/sulross_get_exif.py,sha256=nc9MwF_5_Nlsv7f0W74G71G-MF5EZDZIvLqDeKvcwWc,2088
167
- data_management/importers/timelapse_csv_set_to_json.py,sha256=GXDzMmNptvke3szhHWVMrtdHTSIKPPtphlPcOAEjFhk,15895
168
- data_management/importers/ubc_to_json.py,sha256=MC_R3bLZ0bf1v9ajR8s1bsHlJSMqVAf2tJkmvIf8lAU,14856
169
- data_management/importers/umn_to_json.py,sha256=lfmpxcz1XGMzuDAQwX24iI6HfWv6j1AcxW6Dx-OBlaA,16164
170
- data_management/importers/wellington_to_json.py,sha256=CGrLEGQPPajGNOEJU-V5D7Ag6uLw_Ab7BoP_q2Dzfhc,7673
171
- data_management/importers/wi_to_json.py,sha256=WJ22PsNo-8g-q1sAOMcF-53IaPN-h6HHrDhxc-LqnGQ,13660
139
+ data_management/importers/timelapse_csv_set_to_json.py,sha256=7g1senO7SWUavktI9n214M2SwApN84TPuNTJPxHhZ3A,15902
140
+ data_management/importers/ubc_to_json.py,sha256=MP_whIR-CVhNPCE3vQF_tk-6_EpmxWwR40E7pOA10mI,14869
141
+ data_management/importers/umn_to_json.py,sha256=emUVCtNfbJmgHS22fBL8GaAMiblaJen52-IuqiFiWyI,16177
142
+ data_management/importers/wellington_to_json.py,sha256=QFcVfAxflUVHTMuGhXGxe3z3iMKJ0B8Nziwpx6XcoLE,7671
143
+ data_management/importers/wi_to_json.py,sha256=xuHFXE6tuaUnZmiFik18_3UCSCQx9abaG_2TnaRn0Xg,13656
144
+ data_management/importers/zamba_results_to_md_results.py,sha256=UV0Iczxf_ghR3yL8D8KUAEg1j81_BavdzWhAFtg6wHQ,5594
172
145
  data_management/importers/eMammal/copy_and_unzip_emammal.py,sha256=gVB0drYUeCghWXFDpaJkCL0qdmFjMW75YAEEhFe38js,6080
173
146
  data_management/importers/eMammal/eMammal_helpers.py,sha256=Sv6PBAMDdlgwiek6Q3R6Rjio2RjtA-JpfgBr_Fmr9kA,6838
174
147
  data_management/importers/eMammal/make_eMammal_json.py,sha256=6C_-6Qk-Xhz_87DEPHA-txw90AvXrybJy1PbQXQbqwo,6987
175
148
  data_management/importers/snapshotserengeti/make_full_SS_json.py,sha256=khE3W0pO3Uq-UCfrLW_rpzWqjLll2JoBc360XeAuUGc,4126
176
149
  data_management/importers/snapshotserengeti/make_per_season_SS_json.py,sha256=sAwvcR2siwblgY3LfTsbH4mXOXvJZCA246QIsQWuQBA,4316
177
- data_management/lila/add_locations_to_island_camera_traps.py,sha256=2l9gPh_AdPcb_GuHlbFmHTQO0Kb0_RilE2qMbVGbmms,2563
178
- data_management/lila/create_lila_test_set.py,sha256=oYgOsUJjjbpfCs2Gx1CM6l2UK4xXmJPgRlwW4DOs1yY,4791
179
- data_management/lila/download_lila_subset.py,sha256=b25Pnql93Gtn-ZZmxQ0y30LiJMqxv9rB14z6Hn5T1TA,4382
180
- data_management/lila/generate_lila_per_image_labels.py,sha256=2dIQaVYTnyb5X_zfqQj1DpSqUh8XU0I8SgZkBAHQJiA,16856
181
- data_management/lila/get_lila_annotation_counts.py,sha256=YgLNLsdlCYFaY2hmdeD_fjBXflWskP1-oL5Z3Ew3kKo,5326
150
+ data_management/lila/add_locations_to_island_camera_traps.py,sha256=nsIJXyw2IhOwwM9A0SCn108Fg297fRUdADXGUAN8Y34,2561
151
+ data_management/lila/add_locations_to_nacti.py,sha256=KVMWwSJx-gYI_J6J8y-AqsWnOTgidtebotJjYPfsj00,5017
152
+ data_management/lila/create_lila_blank_set.py,sha256=ScGlqalOySsmZEvYtEn4pGNxGOj0qHyxGs-F5URTmk8,16359
153
+ data_management/lila/create_lila_test_set.py,sha256=WxM-LuhtNiee3CLeVPxUEWsfbybgZd7oluZu6epl69A,4825
154
+ data_management/lila/create_links_to_md_results_files.py,sha256=f0pXY2Lyj9DtRlgFpmLqNBs2qWd--B8N6UAt8E26tcM,3916
155
+ data_management/lila/download_lila_subset.py,sha256=nJjzKuMOYJa2lBJcXOEZloWjbFlQW_USke49DJdNruM,5283
156
+ data_management/lila/generate_lila_per_image_labels.py,sha256=b0FDiYbs5BI8wdk221ysr-p1PsprfRFwMIgv65BYS6Y,17351
157
+ data_management/lila/get_lila_annotation_counts.py,sha256=QVSKCmeLzliFZimjzi8AClS0Gz94pDMYckjw2cOm-7E,5490
182
158
  data_management/lila/get_lila_image_counts.py,sha256=r5p2wPL5vuKKO8DWia3Tll-EZZWFNUvax6ljaYtrKsk,3625
183
- data_management/lila/lila_common.py,sha256=olg_eR6Ul2kUQ7tIsndzVIJpils5oXNANYSGBmS455E,8667
184
- detection/process_video.py,sha256=tV7MTaS5mlSaWhAdDP4tvaMN_VCG27s-qr9yzf9Cwow,25915
185
- detection/pytorch_detector.py,sha256=nI2xctI6FSdbWjSFHYlMT0LTH6CCATOe9DF-I8MLEpc,11505
186
- detection/run_detector.py,sha256=5crETPn9Ud3za3HiuBsalMVVmOuQFuOm0x901XDfxVs,24125
187
- detection/run_detector_batch.py,sha256=ALQT7R3podcY6KYODJrb53D6OX0fn9oh4waebK-_pUM,41857
188
- detection/run_inference_with_yolov5_val.py,sha256=yxMFxQQDvkydWVpM0ecopDXtPi89gaqMX0TKjyxNyjI,22118
189
- detection/run_tiled_inference.py,sha256=cs1IehE2DXj8Nr3CbnYMXqwcFM1vUBT1Rm5We5nlcSM,28785
159
+ data_management/lila/lila_common.py,sha256=vzazQR3UzvRxbxdBvRBcCbQ9pw0DUD3iWjUscV-nUvo,8785
160
+ data_management/lila/test_lila_metadata_urls.py,sha256=jDInoM5WD_EoahR_b5yTjrj6pkiitvj_Kz_1U0uSDzE,3966
161
+ detection/process_video.py,sha256=wuMoV-DJde_QlTiNAxsRjlDttiLl2e2BiJuyTQBINIE,26825
162
+ detection/pytorch_detector.py,sha256=WG6Q4KueBoA8lCZCdR2PrgbQAHs3HCO6MF01Ful4tfc,11992
163
+ detection/run_detector.py,sha256=XmQ4s-B7IlkxJye56y6uvx2vx6Ml3IBTo3Wx0SalO1Q,26036
164
+ detection/run_detector_batch.py,sha256=dgPwvEAOTutpuEKE6TCopjj5w9J1Eb9jOvT3lyEmoNc,46937
165
+ detection/run_inference_with_yolov5_val.py,sha256=tjHovM8I2YWvDsBcWV0h6hJaAjckTEN7foJ_X6IetIo,33755
166
+ detection/run_tiled_inference.py,sha256=mL1WxA4bWEf2TaT3xK-hXjA4_5ABBwfXx9zVbmhaWB4,33930
190
167
  detection/tf_detector.py,sha256=xOO8kzd-Um2X_sAZyop524LM53nipv5pNx8YueGTJrc,6760
191
- detection/video_utils.py,sha256=E96hywSwA_jTUcJNFdkneKPcH0XH_e2qRT5ovV-5SFM,18317
168
+ detection/video_utils.py,sha256=70dx6_D9zQhAHatzHA0Bo3LreOJe98A859O243dFIvs,19425
192
169
  detection/detector_training/copy_checkpoints.py,sha256=t2c3Q4Pf82tAp_OjSG-veIjRPrX0tJYi-bSQmGL2m4c,1091
193
170
  detection/detector_training/model_main_tf2.py,sha256=YwNsZ7hkIFaEuwKU0rHG_VyqiR_0E01BbdlD0Yx4Smo,4936
194
171
  md_utils/azure_utils.py,sha256=SVoQNSknYlBcpZeGrH2v3Qgm5kXxBrqM5Sx2L_Lax-I,6243
195
- md_utils/ct_utils.py,sha256=Vmg17h8X-yBaqtrGKESx3gtI2-Rz7nOZp2e1Lps92P8,7604
172
+ md_utils/ct_utils.py,sha256=CbuSL-XqI5jU9ShxEgnvIKqQF_BzbDPSTULPBmEVAnU,12908
196
173
  md_utils/directory_listing.py,sha256=dgxMczSOEH352YXdWRuNo_ujsonRrPJXFeuS7ocpe9k,9615
197
- md_utils/matlab_porting_tools.py,sha256=9IFR_uWM1egCMZT3MgoUmdOP8mp7CcF7L9HEbN_A_1E,2005
198
- md_utils/md_tests.py,sha256=4sxnohbCt_exqLD6PJv_1JRNtfoqUlg_kQ3vMstD4qM,18573
199
- md_utils/path_utils.py,sha256=9ZMyzejC_kzAQlymXGghAAgp_WjCjLuOxWJrAC13TAk,12397
200
- md_utils/process_utils.py,sha256=ullaq8AIZNbUjG9ftB1kK3q8zJmfgbZdUNo1v3oXmvA,3191
174
+ md_utils/md_tests.py,sha256=FWqv74nBmN5772cSgRxnFZX8zZ3tikwMFr_rhvdV24Y,33316
175
+ md_utils/path_utils.py,sha256=g_ASvwJCeN6eGtypuwrSfCxNM7Gx15oeC6TXwJ6yYJc,16573
176
+ md_utils/process_utils.py,sha256=YkD38KLgceuqvMvDXIcVyzY51npUuUT3tOAjjF5Mvf8,4316
201
177
  md_utils/sas_blob_utils.py,sha256=GpjHn33N2b-XeBAtU3xhGbTIYcBs4YrXHtbQDmlGFvY,16955
202
- md_utils/string_utils.py,sha256=tFTC9TarPFGa7_UkKF0_t6Q2naH9IEsDVM2DOxwkFTQ,1277
203
- md_utils/url_utils.py,sha256=aFN7_WvzMJqYHL9t-SGCP2A0-mlYu1-P0HkZwgzUsKg,4598
204
- md_utils/write_html_image_list.py,sha256=myXMdOwUERZWp9p2RPu8TcStCsu2X7aJNtcomlhoeqA,7573
205
- md_visualization/plot_utils.py,sha256=Kb2tMAQICwBdDSgaOIZsZCGVs5MvYyDGjjI41S4okWc,10586
178
+ md_utils/split_locations_into_train_val.py,sha256=psiWoXkYYLLOfjVHUyOhaa3fh9mmlm7HGFthklWbMaA,9241
179
+ md_utils/string_utils.py,sha256=Edwa07IWu7-QTNoMmvQYNnYgpwxxNh9VhXQ8AXMX3Qg,1600
180
+ md_utils/url_utils.py,sha256=2Ee459ZRQ4Ms-52WRhyiEBICHACKmigrRnYRi6JtCdQ,4593
181
+ md_utils/write_html_image_list.py,sha256=VLbeJnrRPm-D-_KFDVAnrU3alrXUr6eOr4WOv4-ugwk,7036
182
+ md_visualization/plot_utils.py,sha256=eppaGgI0k73jhvOCruNrNO-VLH3EEFpFP2la_rZo57E,10712
206
183
  md_visualization/render_images_with_thumbnails.py,sha256=XJcL5qxu5pe2LQ4MqnD-O6dM_cPxGGNoqk5U_rZzFUQ,10391
207
- md_visualization/visualization_utils.py,sha256=Up8hfM_KYyToIUhTv3sSrXGoYl8Hm57NO5t5AHMW3tk,31680
208
- md_visualization/visualize_db.py,sha256=tUe41cl2cGHKwwtdqsay9vWBKCBSHCYwJTNK3Khlzho,18640
209
- md_visualization/visualize_detector_output.py,sha256=EAi3-iqgNoxbwXh9GlBpzIcAIF-S4Lk-_tA-4_L4wXI,10741
184
+ md_visualization/visualization_utils.py,sha256=2OJKG_L70XYCCdhLGmQ5-HD9nCaHisqIJoRGIYb0L1g,35297
185
+ md_visualization/visualize_db.py,sha256=x6Y--RazaPvUayEch_Dr10NV0P0C7l0ZB29-vjW5WjI,18931
186
+ md_visualization/visualize_detector_output.py,sha256=aeg8DbwfddW5CDe84V2dt07eWMyxr4QdFcwTYbC_Lnk,15814
210
187
  md_visualization/visualize_megadb.py,sha256=ZHFMgQv-zjXwvyT6gEfLe2BzodvBNfQYEh0b6P_59TE,6188
211
- taxonomy_mapping/map_lila_taxonomy_to_wi_taxonomy.py,sha256=zDercLXW2tdAdLSsyO7mJYzQD93Ie3hRvW8zHPz_N0k,16516
212
- taxonomy_mapping/map_new_lila_datasets.py,sha256=tPM-uv5nDhCtUaCLV4UtHwN3AS-4GggxLOKfuPVR7iY,4032
213
- taxonomy_mapping/prepare_lila_taxonomy_release.py,sha256=1bZ7QkRjDLkRapytQsWbLvt21_sgDPQAr5Juj2fvde0,4266
214
- taxonomy_mapping/preview_lila_taxonomy.py,sha256=OfiQeVUWBesWE52ZuAMsd53Iv_ZOzqqZhS2Emxs-bac,20079
188
+ taxonomy_mapping/map_lila_taxonomy_to_wi_taxonomy.py,sha256=kFDp6r25LhYVkyrm-35TgBc2vgXXh6SmoARqO4aE9PU,16517
189
+ taxonomy_mapping/map_new_lila_datasets.py,sha256=rJlj-HuP9wNN2RvIlcWfqnW5N7cyiGLWglbe3FsFG0Q,4324
190
+ taxonomy_mapping/prepare_lila_taxonomy_release.py,sha256=Ser_lwpbYR75fMMcE49uT90t7o02dRZ7wY0GUyhzK9c,4357
191
+ taxonomy_mapping/preview_lila_taxonomy.py,sha256=iCcvf8dDsh1WZIZWq2ppua5wloAst6F6lphsS9vRTKQ,20144
215
192
  taxonomy_mapping/retrieve_sample_image.py,sha256=BySUy69DeGwPiIs9Ws5vIILJCTXeVImE5AVoawOiECM,1992
216
193
  taxonomy_mapping/simple_image_download.py,sha256=dXXVhhaR_bI-Elmk4Tmjt2ftdYzHbkuJCTzIMOJfLKs,6874
217
- taxonomy_mapping/species_lookup.py,sha256=wuyrZdFjIGmMdOoRgbON1AHcGEVZ1LjyOhfPE1jTJjY,27402
218
- taxonomy_mapping/taxonomy_csv_checker.py,sha256=db6Biubc0vLxIYe8fhkEW-GqYulT6tfPe8HOyDf3ksc,4795
194
+ taxonomy_mapping/species_lookup.py,sha256=oRqaUbiH_xULH7z5mkrtaFhacxlyM8KT-V-c4FnNq4w,28303
195
+ taxonomy_mapping/taxonomy_csv_checker.py,sha256=xmV2SBOfQEuZBMGmXyUzbuNxvd_oXKysXkxU6-IhKJg,4874
219
196
  taxonomy_mapping/taxonomy_graph.py,sha256=ZDm2enGanBlm8KXWvCndqmeerOp9LREaetSl-Lxy07s,12361
220
197
  taxonomy_mapping/validate_lila_category_mappings.py,sha256=CApYVWIZ8TTJ3vvQTgfjIvWDGHpPo-Zn9jqJFaw3DNw,2314
221
- megadetector-5.0.5.dist-info/LICENSE,sha256=RMa3qq-7Cyk7DdtqRj_bP1oInGFgjyHn9-PZ3PcrqIs,1100
222
- megadetector-5.0.5.dist-info/METADATA,sha256=uxNQ7tegoX833G258AU6HbYlLywar56IDKrHrIiBmqI,7603
223
- megadetector-5.0.5.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
224
- megadetector-5.0.5.dist-info/top_level.txt,sha256=-mFGpqnmviVz0Vyr2GxZ_kTo_PBPNoK6h4JtqIMjZGQ,88
225
- megadetector-5.0.5.dist-info/RECORD,,
198
+ megadetector-5.0.7.dist-info/LICENSE,sha256=RMa3qq-7Cyk7DdtqRj_bP1oInGFgjyHn9-PZ3PcrqIs,1100
199
+ megadetector-5.0.7.dist-info/METADATA,sha256=xgK96jYJkxj6kXvCzY3y8HlYb0-Oa44nmfETb2Ba7xI,7513
200
+ megadetector-5.0.7.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
201
+ megadetector-5.0.7.dist-info/top_level.txt,sha256=-mFGpqnmviVz0Vyr2GxZ_kTo_PBPNoK6h4JtqIMjZGQ,88
202
+ megadetector-5.0.7.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.2)
2
+ Generator: bdist_wheel (0.42.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -481,4 +481,4 @@ with open(wi_mapping_table_file,'w') as f:
481
481
 
482
482
  # ...for each dataset
483
483
 
484
- # ...with open()
484
+ # ...with open()
@@ -15,15 +15,25 @@ 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_2022.08.22.csv')
18
+ output_file = os.path.expanduser('~/lila/lila_additions_2023.12.29.csv')
19
19
 
20
20
  datasets_to_map = [
21
- # 'NACTI'
22
- # 'Channel Islands Camera Traps'
23
- 'ENA24'
21
+ 'Trail Camera Images of New Zealand Animals'
24
22
  ]
25
23
 
26
24
 
25
+ #%% Initialize taxonomic lookup
26
+
27
+ from taxonomy_mapping.species_lookup import (
28
+ initialize_taxonomy_lookup,
29
+ get_preferred_taxonomic_match)
30
+
31
+ # from taxonomy_mapping.species_lookup import (
32
+ # get_taxonomic_info, print_taxonomy_matche)
33
+
34
+ initialize_taxonomy_lookup(force_init=False)
35
+
36
+
27
37
  #%% Read the list of datasets
28
38
 
29
39
  with open(input_lila_category_list_file,'r') as f:
@@ -57,46 +67,14 @@ for dataset_name in datasets_to_map:
57
67
  print('Need to create {} mappings'.format(len(category_mappings)))
58
68
 
59
69
 
60
- #%% Initialize taxonomic lookup
61
-
62
- from taxonomy_mapping.species_lookup import (
63
- initialize_taxonomy_lookup,
64
- get_preferred_taxonomic_match)
65
-
66
- # from taxonomy_mapping.species_lookup import (
67
- # get_taxonomic_info, print_taxonomy_matche)
68
-
69
- initialize_taxonomy_lookup()
70
-
71
-
72
- #%% Manual lookup
73
-
74
- if False:
75
-
76
- #%%
77
-
78
- # q = 'white-throated monkey'
79
- q = 'cingulata'
80
- taxonomy_preference = 'inat'
81
- m = get_preferred_taxonomic_match(q,taxonomy_preference)
82
-
83
- if m is None:
84
- print('No match')
85
- else:
86
- if m.source != taxonomy_preference:
87
- print('\n*** non-preferred match ***\n')
88
- # raise ValueError('')
89
- print(m.source)
90
- print(m.taxonomy_string)
91
- import clipboard; clipboard.copy(m.taxonomy_string)
92
-
93
-
94
70
  #%% Match every query against our taxonomies
95
71
 
96
72
  output_rows = []
97
73
 
98
74
  taxonomy_preference = 'inat'
99
75
 
76
+ allow_non_preferred_matches = True
77
+
100
78
  # mapping_string = category_mappings[1]; print(mapping_string)
101
79
  for mapping_string in category_mappings:
102
80
 
@@ -108,7 +86,7 @@ for mapping_string in category_mappings:
108
86
 
109
87
  taxonomic_match = get_preferred_taxonomic_match(query,taxonomy_preference=taxonomy_preference)
110
88
 
111
- if taxonomic_match.source == taxonomy_preference:
89
+ if (taxonomic_match.source == taxonomy_preference) or allow_non_preferred_matches:
112
90
 
113
91
  output_row = {
114
92
  'dataset_name': dataset_name,
@@ -148,3 +126,29 @@ output_df = pd.DataFrame(data=output_rows, columns=[
148
126
  'dataset_name', 'query', 'source', 'taxonomy_level',
149
127
  'scientific_name', 'common_name', 'taxonomy_string'])
150
128
  output_df.to_csv(output_file, index=None, header=True)
129
+
130
+
131
+ #%% Manual lookup
132
+
133
+ if False:
134
+
135
+ #%%
136
+
137
+ # q = 'white-throated monkey'
138
+ # q = 'cingulata'
139
+ # q = 'notamacropus'
140
+ q = 'porzana'
141
+ taxonomy_preference = 'inat'
142
+ m = get_preferred_taxonomic_match(q,taxonomy_preference)
143
+ # print(m.scientific_name); import clipboard; clipboard.copy(m.scientific_name)
144
+
145
+ if m is None:
146
+ print('No match')
147
+ else:
148
+ if m.source != taxonomy_preference:
149
+ print('\n*** non-preferred match ***\n')
150
+ # raise ValueError('')
151
+ print(m.source)
152
+ print(m.taxonomy_string)
153
+ # print(m.scientific_name); import clipboard; clipboard.copy(m.scientific_name)
154
+ import clipboard; clipboard.copy(m.taxonomy_string)
@@ -13,8 +13,9 @@ import os
13
13
  import json
14
14
  import pandas as pd
15
15
 
16
- lila_taxonomy_file = os.path.expanduser('~/git/agentmorrisprivate/lila-taxonomy/lila-taxonomy-mapping.csv')
17
- release_taxonomy_file = os.path.expanduser('~/lila/lila-taxonomy-mapping_release.22.08.22.0000.csv')
16
+ lila_taxonomy_file = 'c:/git/agentmorrisprivate/lila-taxonomy/lila-taxonomy-mapping.csv'
17
+ release_taxonomy_file = os.path.expanduser('~/lila/lila-taxonomy-mapping_release.csv')
18
+ # import clipboard; clipboard.copy(release_taxonomy_file)
18
19
 
19
20
  # Created by get_lila_category_list.py... contains counts for each category
20
21
  lila_dataset_to_categories_file = os.path.expanduser('~/lila/lila_categories_list/lila_dataset_to_categories.json')
@@ -129,3 +130,5 @@ for i_row,row in df.iterrows():
129
130
 
130
131
  df = df.drop('source',axis=1)
131
132
  df.to_csv(release_taxonomy_file,header=True,index=False)
133
+
134
+ print('Wrote final output to {}'.format(release_taxonomy_file))
@@ -15,11 +15,10 @@ from tqdm import tqdm
15
15
  import os
16
16
  import pandas as pd
17
17
 
18
- # lila_taxonomy_file = r"G:\git\agentmorrisprivate\lila-taxonomy\lila-taxonomy-mapping.csv"
19
- lila_taxonomy_file = r"G:\temp\lila\lila-taxonomy-mapping_release.22.07.03.1608.csv"
20
- # lila_taxonomy_file = r"G:\temp\lila\lila_additions_2022.06.29.csv"
18
+ # lila_taxonomy_file = r"c:\git\agentmorrisprivate\lila-taxonomy\lila-taxonomy-mapping.csv"
19
+ lila_taxonomy_file = os.path.expanduser('~/lila/lila_additions_2023.12.29.csv')
21
20
 
22
- preview_base = r'g:\temp\lila\lila_taxonomy_preview'
21
+ preview_base = os.path.expanduser('~/lila/lila_taxonomy_preview')
23
22
  os.makedirs(preview_base,exist_ok=True)
24
23
  html_output_file = os.path.join(preview_base,'index.html')
25
24
 
@@ -172,15 +171,14 @@ for i_row,row in tqdm(df.iterrows(),total=len(df)):
172
171
 
173
172
  print('\nMade {} taxonomy changes'.format(n_taxonomy_changes))
174
173
 
174
+ # Optionally re-write
175
175
  if False:
176
176
  df.to_csv(lila_taxonomy_file,header=True,index=False)
177
177
 
178
178
 
179
179
  #%% List null mappings
180
180
 
181
- #
182
- # These should all be things like "unidentified" and "fire"
183
- #
181
+ # These should all be things like "empty", "unidentified", "fire", "car", etc.
184
182
 
185
183
  # i_row = 0; row = df.iloc[i_row]
186
184
  for i_row,row in df.iterrows():
@@ -393,20 +391,20 @@ remapped_queries = {'papio':'papio+baboon',
393
391
 
394
392
  import os
395
393
  from taxonomy_mapping import retrieve_sample_image
394
+
396
395
  scientific_name_to_paths = {}
397
396
  image_base = os.path.join(preview_base,'images')
398
397
  images_per_query = 15
399
398
  min_valid_images_per_query = 3
400
399
  min_valid_image_size = 3000
401
400
 
401
+ # TODO: trivially prallelizable
402
+ #
402
403
  # i_row = 0; row = df.iloc[i_row]
403
404
  for i_row,row in df.iterrows():
404
405
 
405
406
  s = row['scientific_name']
406
407
 
407
- # if s != 'mirafra':
408
- # continue
409
-
410
408
  if (not isinstance(s,str)) or (len(s)==0):
411
409
  continue
412
410
 
@@ -416,17 +414,17 @@ for i_row,row in df.iterrows():
416
414
  query = remapped_queries[query]
417
415
 
418
416
  query_folder = os.path.join(image_base,query)
417
+ os.makedirs(query_folder,exist_ok=True)
419
418
 
420
419
  # Check whether we already have enough images for this query
421
- if os.path.isdir(query_folder):
422
- image_files = os.listdir(query_folder)
423
- image_fullpaths = [os.path.join(query_folder,fn) for fn in image_files]
424
- sizes = [os.path.getsize(p) for p in image_fullpaths]
425
- sizes_above_threshold = [x for x in sizes if x > min_valid_image_size]
426
- if len(sizes_above_threshold) > min_valid_images_per_query:
427
- # print('Skipping query {}, already have {} images'.format(s,len(sizes_above_threshold)))
428
- continue
429
-
420
+ image_files = os.listdir(query_folder)
421
+ image_fullpaths = [os.path.join(query_folder,fn) for fn in image_files]
422
+ sizes = [os.path.getsize(p) for p in image_fullpaths]
423
+ sizes_above_threshold = [x for x in sizes if x > min_valid_image_size]
424
+ if len(sizes_above_threshold) > min_valid_images_per_query:
425
+ print('Skipping query {}, already have {} images'.format(s,len(sizes_above_threshold)))
426
+ continue
427
+
430
428
  # Check whether we've already run this query for a previous row
431
429
  if query in scientific_name_to_paths:
432
430
  continue
@@ -448,14 +446,16 @@ from md_utils import path_utils
448
446
  all_images = path_utils.recursive_file_list(image_base,False)
449
447
 
450
448
  for fn in tqdm(all_images):
451
- if fn.endswith('.jpeg'):
449
+ if fn.lower().endswith('.jpeg'):
452
450
  new_fn = fn[0:-5] + '.jpg'
453
- # print('Renaming {} to {}'.format(fn,new_fn))
454
451
  os.rename(fn, new_fn)
455
452
 
456
453
 
457
454
  #%% Choose representative images for each scientific name
458
455
 
456
+ # Specifically, sort by size, and take the largest unique sizes. Very small files tend
457
+ # to be bogus thumbnails, etc.
458
+
459
459
  max_images_per_query = 4
460
460
  scientific_name_to_preferred_images = {}
461
461
 
@@ -506,7 +506,7 @@ for images in scientific_name_to_preferred_images.values():
506
506
  print('Using a total of {} images'.format(len(used_images)))
507
507
  used_images_set = set(used_images)
508
508
 
509
- import path_utils
509
+ from md_utils import path_utils
510
510
  all_images = path_utils.recursive_file_list(image_base,False)
511
511
 
512
512
  unused_images = []
@@ -523,7 +523,7 @@ for fn in tqdm(unused_images):
523
523
 
524
524
  #%% Produce HTML preview
525
525
 
526
- with open(html_output_file, 'w') as f:
526
+ with open(html_output_file, 'w', encoding='utf-8') as f:
527
527
 
528
528
  f.write('<html><head></head><body>\n')
529
529
 
@@ -555,10 +555,11 @@ with open(html_output_file, 'w') as f:
555
555
  f.write('<p class="speciesinfo_p" style="font-weight:bold;font-size:130%">')
556
556
 
557
557
  if isinstance(row.scientific_name,str):
558
- f.write('{}: <b><u>{}</u></b> mapped to {} {} ({}) ({})</p>\n'.format(
558
+ output_string = '{}: <b><u>{}</u></b> mapped to {} {} ({}) ({})</p>\n'.format(
559
559
  row.dataset_name, row.query,
560
560
  row.taxonomy_level, row.scientific_name, common_name_string,
561
- row.common_name))
561
+ row.common_name)
562
+ f.write(output_string)
562
563
  else:
563
564
  f.write('{}: <b><u>{}</u></b> unmapped'.format(row.dataset_name,row.query))
564
565
 
@@ -586,6 +587,5 @@ with open(html_output_file, 'w') as f:
586
587
 
587
588
  #%% Open HTML preview
588
589
 
589
- from md_utils.path_utils import open_file # from ai4eutils
590
+ from md_utils.path_utils import open_file
590
591
  open_file(html_output_file)
591
-