megadetector 5.0.20__py3-none-any.whl → 5.0.22__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 (41) hide show
  1. megadetector/data_management/cct_json_utils.py +143 -7
  2. megadetector/data_management/cct_to_md.py +12 -5
  3. megadetector/data_management/databases/integrity_check_json_db.py +83 -77
  4. megadetector/data_management/importers/osu-small-animals-to-json.py +4 -4
  5. megadetector/data_management/importers/raic_csv_to_md_results.py +416 -0
  6. megadetector/data_management/importers/zamba_results_to_md_results.py +1 -2
  7. megadetector/data_management/lila/create_lila_test_set.py +25 -11
  8. megadetector/data_management/lila/download_lila_subset.py +9 -2
  9. megadetector/data_management/lila/generate_lila_per_image_labels.py +3 -2
  10. megadetector/data_management/lila/test_lila_metadata_urls.py +5 -1
  11. megadetector/data_management/read_exif.py +10 -14
  12. megadetector/data_management/rename_images.py +1 -1
  13. megadetector/data_management/yolo_output_to_md_output.py +18 -5
  14. megadetector/detection/process_video.py +14 -3
  15. megadetector/detection/pytorch_detector.py +15 -3
  16. megadetector/detection/run_detector.py +4 -3
  17. megadetector/detection/run_inference_with_yolov5_val.py +121 -13
  18. megadetector/detection/video_utils.py +40 -17
  19. megadetector/postprocessing/classification_postprocessing.py +1 -1
  20. megadetector/postprocessing/combine_api_outputs.py +1 -1
  21. megadetector/postprocessing/compare_batch_results.py +931 -142
  22. megadetector/postprocessing/detector_calibration.py +565 -0
  23. megadetector/postprocessing/md_to_coco.py +85 -19
  24. megadetector/postprocessing/postprocess_batch_results.py +32 -21
  25. megadetector/postprocessing/validate_batch_results.py +174 -64
  26. megadetector/taxonomy_mapping/map_new_lila_datasets.py +15 -12
  27. megadetector/taxonomy_mapping/prepare_lila_taxonomy_release.py +1 -1
  28. megadetector/taxonomy_mapping/preview_lila_taxonomy.py +3 -1
  29. megadetector/utils/ct_utils.py +64 -2
  30. megadetector/utils/md_tests.py +15 -13
  31. megadetector/utils/path_utils.py +153 -37
  32. megadetector/utils/process_utils.py +9 -3
  33. megadetector/utils/write_html_image_list.py +21 -6
  34. megadetector/visualization/visualization_utils.py +329 -102
  35. megadetector/visualization/visualize_db.py +104 -63
  36. {megadetector-5.0.20.dist-info → megadetector-5.0.22.dist-info}/LICENSE +0 -0
  37. {megadetector-5.0.20.dist-info → megadetector-5.0.22.dist-info}/METADATA +143 -142
  38. {megadetector-5.0.20.dist-info → megadetector-5.0.22.dist-info}/RECORD +40 -39
  39. {megadetector-5.0.20.dist-info → megadetector-5.0.22.dist-info}/WHEEL +1 -1
  40. {megadetector-5.0.20.dist-info → megadetector-5.0.22.dist-info}/top_level.txt +0 -0
  41. megadetector/data_management/importers/prepare-noaa-fish-data-for-lila.py +0 -359
@@ -53,8 +53,8 @@ megadetector/classification/efficientnet/model.py,sha256=qJHWV9-rYKa4E_TIee5N_Oj
53
53
  megadetector/classification/efficientnet/utils.py,sha256=dzrDrQQcvINdJFbODmrHQMUaM0RaUbct52zcSprseAg,24693
54
54
  megadetector/data_management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
55
  megadetector/data_management/camtrap_dp_to_coco.py,sha256=WC5u5nK5BwXpV26_pGy6CppQryJMgsJ9NtDbGIRQqLg,8629
56
- megadetector/data_management/cct_json_utils.py,sha256=LuNbxU5EAslWanC08PTKzwzCUmesGnbbJhZ1e2dCgnI,15140
57
- megadetector/data_management/cct_to_md.py,sha256=zgMU2_NjPs5nPGDKf0n1ouJdyiAsgR4Q9wj-Q9Y-c88,5070
56
+ megadetector/data_management/cct_json_utils.py,sha256=d1jDmL5wioypt4Ny6BRBNg6iUBaqpq2E2xf162n6zGo,19520
57
+ megadetector/data_management/cct_to_md.py,sha256=Q6ika31wwHLdRcdH_0QFs2o5elu44rhF4UEJ-u3edpk,5441
58
58
  megadetector/data_management/cct_to_wi.py,sha256=hnFErIlBDmhZtBv21kDW14MSdHlUjwtCGn2vnG-cN34,9771
59
59
  megadetector/data_management/coco_to_labelme.py,sha256=Uql6f1TaMmKIZClCcqUB1bPxokdXgyAKsQm5pk5foKk,8986
60
60
  megadetector/data_management/coco_to_yolo.py,sha256=rTDOh3XdoOoo7HCSH7obT3xpQgiSykf71ba8uOXfnxc,28121
@@ -63,20 +63,20 @@ megadetector/data_management/get_image_sizes.py,sha256=2b6arj4gvoN-9f61lC3t1zAFF
63
63
  megadetector/data_management/labelme_to_coco.py,sha256=8RUXALXbLpmS7UYUet4BAe9JVSDW7ojwDDpxYs072ZI,21231
64
64
  megadetector/data_management/labelme_to_yolo.py,sha256=dRePSOwU_jiCr0EakDQCz1Ct-ZHDxDglUk4HbM1LfWc,10034
65
65
  megadetector/data_management/ocr_tools.py,sha256=T9ClY3B-blnK3-UF1vpVdageknYsykm_6FAfqn0kliU,32529
66
- megadetector/data_management/read_exif.py,sha256=iW3oQz4vKHnSe1nY38Pp-bXlQ5EUO49ttnhvO-0Pcqk,30508
66
+ megadetector/data_management/read_exif.py,sha256=TIPf1OHFhuDq7M2H9MxcEEvN17G0dpJTriRTtiqIvxA,30474
67
67
  megadetector/data_management/remap_coco_categories.py,sha256=xXWv0QhTjkUfc9RKtAZanK77HMSq_21mFg_34KFD6hw,2903
68
68
  megadetector/data_management/remove_exif.py,sha256=vIWnJfw1i9JgyQKUDGEzzqkHro4ndykIPFWhtkm6RAU,2502
69
- megadetector/data_management/rename_images.py,sha256=AG3YIxXEYdGmK4G-rv0_XZIylPqOZpS6gfEkydF6oDg,6918
69
+ megadetector/data_management/rename_images.py,sha256=ikIj_b5DY1rgaAn9n_IbwsnugAolczFNivh4xzfLPy8,6915
70
70
  megadetector/data_management/resize_coco_dataset.py,sha256=AaiV7efIcNnqsXsnQckmHq2G__7ZQHBV_jN6rhZfMjo,6810
71
71
  megadetector/data_management/wi_download_csv_to_coco.py,sha256=ilnJZhNZK-FGUR-AfUSWjIDUk9Gytgxw7IOK_N8WKLE,8350
72
- megadetector/data_management/yolo_output_to_md_output.py,sha256=1RUJSWiVa7CVVQ_CresOVXAD3Eb7oHjdgPg7fTX_Vwg,17563
72
+ megadetector/data_management/yolo_output_to_md_output.py,sha256=VuU9G6QOeAXOa7JsuHjSYhE3Y7MjEd2bPtceugOOILY,17920
73
73
  megadetector/data_management/yolo_to_coco.py,sha256=TzAagQ2ATbB_tn1oZxrHCWsrFGO_OhfZmi-3X45WdDU,26180
74
74
  megadetector/data_management/annotations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
75
  megadetector/data_management/annotations/annotation_constants.py,sha256=1597MpAr_HdidIHoDFj4RgUO3K5e2Xm2bGafGeonR2k,953
76
76
  megadetector/data_management/databases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
77
  megadetector/data_management/databases/add_width_and_height_to_db.py,sha256=X7A_iniGwlkhZ0jUNm564GT_mH2_RJGLD0aGP9cBhY0,749
78
78
  megadetector/data_management/databases/combine_coco_camera_traps_files.py,sha256=oeELrMgxhsJ6aNBxPQyu4CmsdtYnzS5GKZEV8U-XUdk,6693
79
- megadetector/data_management/databases/integrity_check_json_db.py,sha256=A8AAlpfAbbthUH3ZOQrvRjzliMl2RS8g764Nk7Ypuqk,17109
79
+ megadetector/data_management/databases/integrity_check_json_db.py,sha256=h1jPDx9EuWLN1mMzedLMhDuLGqAcNA4rvFqjXE0_1vg,17602
80
80
  megadetector/data_management/databases/subset_json_db.py,sha256=JK71qSUpUZe7cJquyt2xEzirDoZq1Lrr2X0cgtHKBpA,3219
81
81
  megadetector/data_management/importers/add_nacti_sizes.py,sha256=jjGTpd36g5w7nLIeOatXRwu1Uti2GiGgP3-61QSg8oA,1156
82
82
  megadetector/data_management/importers/add_timestamps_to_icct.py,sha256=5l1TkWq3X4Mxed7zlZ07U1RQcjbzBnwcoftNiaruigM,2364
@@ -101,11 +101,11 @@ megadetector/data_management/importers/mcgill_to_json.py,sha256=dfSxU1hHimyGT6Zt
101
101
  megadetector/data_management/importers/missouri_to_json.py,sha256=C0ia3eCEZujVUKE2gmQc6ScsK8kXWM7m0ibeKgHfXNo,14848
102
102
  megadetector/data_management/importers/nacti_fieldname_adjustments.py,sha256=1oDCSuFXhc2b7JPIzkSb3DkusacdAjMM2GQZnhfFQCg,2027
103
103
  megadetector/data_management/importers/noaa_seals_2019.py,sha256=oar378j46fm27ygcbjrgN1rbq6h1SC8utAdSPNqiQt4,5152
104
- megadetector/data_management/importers/osu-small-animals-to-json.py,sha256=Xr6vZ_WMNZQoTQw4qoYJqkYwBwqYf3FywCLX4hKFFPs,10096
104
+ megadetector/data_management/importers/osu-small-animals-to-json.py,sha256=wBbnY8kqZrzRiujrNK750DB3mq14EyIz4Zlx9JHRTkw,10096
105
105
  megadetector/data_management/importers/pc_to_json.py,sha256=VmVvY5Fr8jMLmRkDZI9CuyLvrNuLrspJA9Q8Auxbw1A,10762
106
106
  megadetector/data_management/importers/plot_wni_giraffes.py,sha256=KdEjbItDOXbXj0fr0celfMp7z31Rr3S29SLWBCMY-4M,3772
107
- megadetector/data_management/importers/prepare-noaa-fish-data-for-lila.py,sha256=Pq5tSKWTIGEAGxBiGaO5Tz0QvKZ6QgJTIQ3raDAhjkk,12435
108
107
  megadetector/data_management/importers/prepare_zsl_imerit.py,sha256=ohrUaTXIGg1M4_liptWaPa-4g3yNvc1E4o_knfHSE-8,3775
108
+ megadetector/data_management/importers/raic_csv_to_md_results.py,sha256=37ycjxUcLPannopea5shCIpFnsUcROOx_0BpuQ0Pu6Q,15921
109
109
  megadetector/data_management/importers/rspb_to_json.py,sha256=y03v1d1un9mI3HZRCZinMB1pEkNvTb70S7Qkr3F76qg,9841
110
110
  megadetector/data_management/importers/save_the_elephants_survey_A.py,sha256=lugw8m5Nh2Fhs-FYo9L0mDL3_29nAweLxEul6GekdkI,10669
111
111
  megadetector/data_management/importers/save_the_elephants_survey_B.py,sha256=SWClXENsIePwifP8eJeRsj3kh3Bztl6Kzc_BdqNZvFw,11172
@@ -117,7 +117,7 @@ megadetector/data_management/importers/ubc_to_json.py,sha256=UhZ2P6WlLioLEPkfo7N
117
117
  megadetector/data_management/importers/umn_to_json.py,sha256=wCVgvz1x7gL67s1Avyx0NwBvwSjhNMcAwOnDHR0O5G0,16185
118
118
  megadetector/data_management/importers/wellington_to_json.py,sha256=TQivUZSgD-PeudGRAsgmsYznxDVaOPbbV4V9scnmZFg,7688
119
119
  megadetector/data_management/importers/wi_to_json.py,sha256=tdscGc8SQdRbtjsUVQyCBcxR7_TjPNb_A6OLLUhOe9I,13663
120
- megadetector/data_management/importers/zamba_results_to_md_results.py,sha256=L0E_zwPyN8Lvn1ukOw95TQ-APM7fBki_2_eKJhC3HkE,5381
120
+ megadetector/data_management/importers/zamba_results_to_md_results.py,sha256=DD13mDXAscQQekNSoTOFYROBfNdrLPVJnb_B32esesI,5300
121
121
  megadetector/data_management/importers/eMammal/copy_and_unzip_emammal.py,sha256=CoP8rZOuLDIIL5jajB4WLnMhum19Ol-UT4W25FiF3zE,6085
122
122
  megadetector/data_management/importers/eMammal/eMammal_helpers.py,sha256=Sv6PBAMDdlgwiek6Q3R6Rjio2RjtA-JpfgBr_Fmr9kA,6838
123
123
  megadetector/data_management/importers/eMammal/make_eMammal_json.py,sha256=6C_-6Qk-Xhz_87DEPHA-txw90AvXrybJy1PbQXQbqwo,6987
@@ -127,51 +127,52 @@ megadetector/data_management/lila/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
127
127
  megadetector/data_management/lila/add_locations_to_island_camera_traps.py,sha256=OQ-wn2YX0V96aw1EJxUAMYRnkv9G-dvHBU8ULQF-Tus,2583
128
128
  megadetector/data_management/lila/add_locations_to_nacti.py,sha256=S4ty7lARf2O13_GWTX1pFYyixPCNecqUj6jpO3hOV2w,4849
129
129
  megadetector/data_management/lila/create_lila_blank_set.py,sha256=SBwpM0-pycW37TESXaJlc2oo_qIxYJoOzHhmmnBHWWI,19826
130
- megadetector/data_management/lila/create_lila_test_set.py,sha256=DjivKgsFJlO1IHezXrwAGpiCAhLVmvPnv2nJYpv1ABU,4835
130
+ megadetector/data_management/lila/create_lila_test_set.py,sha256=nnjaxbK-5uIP7hUT8rqlnWepKXauGEQsRS5-H8rOVrA,5184
131
131
  megadetector/data_management/lila/create_links_to_md_results_files.py,sha256=MvaPBAgdwoxaNrRaKZ8mGaOCky1BYXlrT08tPG9BrpM,3803
132
- megadetector/data_management/lila/download_lila_subset.py,sha256=rh09kphSCVPlUGuYY-CkSyd8dy0pBUdth6uHkZ84sEo,5345
133
- megadetector/data_management/lila/generate_lila_per_image_labels.py,sha256=WRfqYW0cyan_-2OHy4YudoUC8ojjslfBHS_iA8JLaPo,18150
132
+ megadetector/data_management/lila/download_lila_subset.py,sha256=0tzz43-uBA6fEPoxH7xy1yDXmwgwYcb5Wm11F6zZQtw,5477
133
+ megadetector/data_management/lila/generate_lila_per_image_labels.py,sha256=JZH_u5ckYODAO4yHWQ_dkI-Sq5hgj5rO82iisG7e-Lg,18239
134
134
  megadetector/data_management/lila/get_lila_annotation_counts.py,sha256=DWysGF5y7E_RYEoAyvR5RUPTOZVbauTxfAwFcIbn5sc,5622
135
135
  megadetector/data_management/lila/get_lila_image_counts.py,sha256=UxXS5RDnSA_WbxE92qN-N7p-qR-jbyTsTZ7duLo06us,3620
136
136
  megadetector/data_management/lila/lila_common.py,sha256=74ecaGItH4AtCYeY1WSejLIcylhJPCJ1y97gYYL34PM,11080
137
- megadetector/data_management/lila/test_lila_metadata_urls.py,sha256=iMpoz9Y6fcVz9whTJpo2f6EuTCiptUix2UV6khyKn9I,4688
137
+ megadetector/data_management/lila/test_lila_metadata_urls.py,sha256=qKyZAb17Va9rfLdNwiOBER02yhUwquOSR9VURtxzugY,4784
138
138
  megadetector/detection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
- megadetector/detection/process_video.py,sha256=4Fwt9utPjctSUMe8YnJzgoEsu_WHehe7MKIR3s81hC8,53242
140
- megadetector/detection/pytorch_detector.py,sha256=StOnaspDBkMeePiTyq5ZEcFUDBEddq36nigHXbF-zAQ,14029
141
- megadetector/detection/run_detector.py,sha256=r_RKrrz6ppKe9cLvuN9Q3OUhv032wC7uESQ_vxJZ1iw,32029
139
+ megadetector/detection/process_video.py,sha256=EizrKUuLZdtJdr9DE5oeqwk6Kst1RdvFxlwBneOEnU8,53569
140
+ megadetector/detection/pytorch_detector.py,sha256=Tm1o03PhI7oVBZ1_BINBKTWVHp2EdT42vF7h0gI_hJ0,14566
141
+ megadetector/detection/run_detector.py,sha256=fq5WLOAGJ0mSGfVL4-uLj2VUH-Tp1h1-zo_MW27MW4g,32077
142
142
  megadetector/detection/run_detector_batch.py,sha256=a98fzorcGtQaOYa5AGW2XPoJpbHeJWO5prqwzxVoPaI,62055
143
- megadetector/detection/run_inference_with_yolov5_val.py,sha256=2miU2QZG_zp3rEPyoKf2XozuMpW6zAW4bAoyg6hSe-k,48691
143
+ megadetector/detection/run_inference_with_yolov5_val.py,sha256=wMDkSm24L8-XIFb1Mi3jpr4mX5H0h39uYWJYsgPd8Q8,53436
144
144
  megadetector/detection/run_tiled_inference.py,sha256=vw0713eNuMiEOjHfweQl58zPHNxPOMdFWZ8bTDLhlMY,37883
145
145
  megadetector/detection/tf_detector.py,sha256=5V94a0gR6WmGPacKm59hl1eYEZI8cG04frF4EvHrmzU,8285
146
- megadetector/detection/video_utils.py,sha256=1u5DKMcHikKPi0OYmJUCyPdjEomGEXfayIkVD_VX3_0,42622
146
+ megadetector/detection/video_utils.py,sha256=XqaaF8YQX-goSzHEoHasmkuNF7DrbFDil0Xd9KjHb5Q,43821
147
147
  megadetector/detection/detector_training/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
148
148
  megadetector/detection/detector_training/model_main_tf2.py,sha256=YwNsZ7hkIFaEuwKU0rHG_VyqiR_0E01BbdlD0Yx4Smo,4936
149
149
  megadetector/postprocessing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
150
  megadetector/postprocessing/add_max_conf.py,sha256=qTE1_0RwGAy6jLDkHrIo2pS84yNbUV11s4IZuAYGdIU,1514
151
151
  megadetector/postprocessing/categorize_detections_by_size.py,sha256=YdapcvjA6Dz2dPa2AFf1Dwyl7C-OmmP4G4OjhTOuaF4,5797
152
- megadetector/postprocessing/classification_postprocessing.py,sha256=8uvlA0Gc8nakM5IE5Pud7WZfmF5kEhcYvxgQXcI9kl0,30429
153
- megadetector/postprocessing/combine_api_outputs.py,sha256=xCJHEKca8YW-mupEr0yNNwwSBeL9NvcV1w3VtEzN4lk,8535
154
- megadetector/postprocessing/compare_batch_results.py,sha256=7O5c6-JsIDpuIGobks_R9j8MPuiZQRnEtNnJQsJqICM,38918
152
+ megadetector/postprocessing/classification_postprocessing.py,sha256=SJah7xrVN06W_jmKdEF_-ykcaKE6fDTGHFhOz4rYi8g,30430
153
+ megadetector/postprocessing/combine_api_outputs.py,sha256=zBGpSLbcQUiLYxgJrjZXjBwc2dOwAytV30UFnroP2Fg,8536
154
+ megadetector/postprocessing/compare_batch_results.py,sha256=DJk0mkhgHM9AVLDLCrAhHggfW3IimlziU80SNN0xi84,75179
155
155
  megadetector/postprocessing/convert_output_format.py,sha256=HwThfK76UPEAGa3KQbJ_tMKIrUvJ3JhKoQVWJt9dPBk,15447
156
+ megadetector/postprocessing/detector_calibration.py,sha256=rzAsiUJhw8Y4RxSK1SMnsdjI3MYkFA9NP5vJ7CNsX0I,21820
156
157
  megadetector/postprocessing/load_api_results.py,sha256=FqcaiPMuqTojZOV3Jn14pJESpuwjWGbZtcvJuVXUaDM,6861
157
- megadetector/postprocessing/md_to_coco.py,sha256=x3sUnOLd2lVfdG2zRN7k-oUvx6rvRD7DWmWJymPc108,12359
158
+ megadetector/postprocessing/md_to_coco.py,sha256=wleD9Fq2zvQ5ubwfV3KUsDmgpiLnBXh5XvjjYk7YIH8,15971
158
159
  megadetector/postprocessing/md_to_labelme.py,sha256=hejMKVxaz_xdtsGDPTQkeWuis7gzT-VOrL2Qf8ym1x0,11703
159
160
  megadetector/postprocessing/merge_detections.py,sha256=AEMgMivhph1vph_t_Qv85d9iHynT2nvq7otN4KGrDLU,17776
160
- megadetector/postprocessing/postprocess_batch_results.py,sha256=xa1FCQnzo1B6Inq8EWqS_In5xDu3qNzES_YdZ0INKr0,78978
161
+ megadetector/postprocessing/postprocess_batch_results.py,sha256=Ln1fCqdc2_sFpxeKN_DuoyuaOd8okABMtiYbcxi33AU,79878
161
162
  megadetector/postprocessing/remap_detection_categories.py,sha256=d9IYTa0i_KbbrarJc_mczABmdwypscl5-KpK8Hx_z8o,6640
162
163
  megadetector/postprocessing/render_detection_confusion_matrix.py,sha256=_wsk4W0PbNiqmFuHy-EA0Z07B1tQLMsdCTPatnHAdZw,27382
163
164
  megadetector/postprocessing/separate_detections_into_folders.py,sha256=k42gxnL8hbBiV0e2T-jmFrhxzIxnhi57Nx9cDSSL5s0,31218
164
165
  megadetector/postprocessing/subset_json_detector_output.py,sha256=PDgb6cnsFm9d4E7_sMVIguLIU7s79uFQa2CRCxAO0F4,27064
165
166
  megadetector/postprocessing/top_folders_to_bottom.py,sha256=Dqk-KZXiRlIYlmLZmk6aUapmaaLJUKOf8wK1kxt9W6A,6283
166
- megadetector/postprocessing/validate_batch_results.py,sha256=uFS-Iag7tZYMWJeDuIYwDhEdc8F_5BGKhV4V7y3SGVw,5551
167
+ megadetector/postprocessing/validate_batch_results.py,sha256=JGkefSpiXy1SEfJ6cjW1Wg7ABsIcz4VMojTqdpY6PpE,11224
167
168
  megadetector/postprocessing/repeat_detection_elimination/find_repeat_detections.py,sha256=e4Y9CyMyd-bLN3il8tu76vI0nVYHZlhZr6vcL0J4zQ0,9832
168
169
  megadetector/postprocessing/repeat_detection_elimination/remove_repeat_detections.py,sha256=tARPxuY0OyQgpKU2XqiQPko3f-hHnWuISB8ZlZgXwxI,2819
169
170
  megadetector/postprocessing/repeat_detection_elimination/repeat_detections_core.py,sha256=vEmWLSSv0_rxDwhjz_S9YaKZ_LM2tADTz2JYb_zUCnc,67923
170
171
  megadetector/taxonomy_mapping/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
171
172
  megadetector/taxonomy_mapping/map_lila_taxonomy_to_wi_taxonomy.py,sha256=6D_YHTeWTs6O8S9ABog2t9-wfQSh9dW2k9XTqXUZKfo,17927
172
- megadetector/taxonomy_mapping/map_new_lila_datasets.py,sha256=g--BMaLkFvkXyBs48od1fEX0T9BgpxlJicGeSHKeNUU,4150
173
- megadetector/taxonomy_mapping/prepare_lila_taxonomy_release.py,sha256=-BpstFpmO_HcyEKaQt8bGsX5bcdPSPpR7S5ZQyhXwwo,4800
174
- megadetector/taxonomy_mapping/preview_lila_taxonomy.py,sha256=SpZzL5Ibsz34bc6gPQ2vrgD8EHBmHxrr7b4PFAT9_IE,19580
173
+ megadetector/taxonomy_mapping/map_new_lila_datasets.py,sha256=ELv_3KYUQBWDQH1ikhXenyPm-tYmKn8fARbNECqLgJs,4242
174
+ megadetector/taxonomy_mapping/prepare_lila_taxonomy_release.py,sha256=kemgxFTriz92Z4fJL0FSimmhhLtC3nBZuZ-Cy9cl1kM,4812
175
+ megadetector/taxonomy_mapping/preview_lila_taxonomy.py,sha256=eL5nax3zEtNtfX5urk55A4iR_5S-oH0Bwn_qwBMl3tA,19612
175
176
  megadetector/taxonomy_mapping/retrieve_sample_image.py,sha256=4cfWsLRwS_EwAmQr2p5tA_W6glBK71tSjPfaHxUZQWs,1979
176
177
  megadetector/taxonomy_mapping/simple_image_download.py,sha256=wLhyMSocX_JhDGA6yLbEfpysz8MMI8YFJWaxyA-GZ9c,6932
177
178
  megadetector/taxonomy_mapping/species_lookup.py,sha256=HZ7fyhap9CNdhdmq-id8dMnIa9TPMA3557rsamAkWkU,28329
@@ -180,25 +181,25 @@ megadetector/taxonomy_mapping/taxonomy_graph.py,sha256=ayrTFseVaIMbtMXhnjWCkZdxI
180
181
  megadetector/taxonomy_mapping/validate_lila_category_mappings.py,sha256=1qyZr23bvZSVUYLQnO1XAtIZ4jdpARA5dxt8euKVyOA,2527
181
182
  megadetector/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
182
183
  megadetector/utils/azure_utils.py,sha256=0BdnkG2hW-X0yFpsJqmBhOd2wysz_LvhuyImPJMVPJs,6271
183
- megadetector/utils/ct_utils.py,sha256=Ecac5CLEIrEi89JFuoqdOMxiOdmbno106a1MT2SVdJY,19956
184
+ megadetector/utils/ct_utils.py,sha256=Sv4vUwDou9-fr2hRZu2EmOhj4EBZwrGEbV0QEYQs53o,21526
184
185
  megadetector/utils/directory_listing.py,sha256=r4rg2xA4O9ZVxVtzPZzXIXa0DOEukAJMTTNcNSiQcuM,9668
185
- megadetector/utils/md_tests.py,sha256=6aufzNsFi_7cQGuMd4BLfjEosO3-iLAqmP5_PkE_SOs,61001
186
- megadetector/utils/path_utils.py,sha256=o68jfPDaLj3NizipVCQEnmB5GfPHpMOLUmQWamYM4w0,37165
187
- megadetector/utils/process_utils.py,sha256=2SdFVxqob-YUW2BTjUEavNuRH3jA4V05fbKMtrVSd3c,5635
186
+ megadetector/utils/md_tests.py,sha256=gQXUlcXbCgtAafqeXAmSsueUneEEMqEVCoWUH4c_k4s,61190
187
+ megadetector/utils/path_utils.py,sha256=W5Md6VM2v6UDGdmyR9fHMN6bTIVT-2FECfmUMZd1BAY,40877
188
+ megadetector/utils/process_utils.py,sha256=K7-ZW_bJbMgeDBLDhYHMV84urM8H7L6IddQS5z3UgBw,5824
188
189
  megadetector/utils/sas_blob_utils.py,sha256=k76EcMmJc_otrEHcfV2fxAC6fNhxU88FxM3ddSYrsKU,16917
189
190
  megadetector/utils/split_locations_into_train_val.py,sha256=jvaDu1xKB51L3Xq2nXQo0XtXRjNRf8RglBApl1g6gHo,10101
190
191
  megadetector/utils/string_utils.py,sha256=ZQapJodzvTDyQhjZgMoMl3-9bqnKAUlORpws8Db9AkA,2050
191
192
  megadetector/utils/torch_test.py,sha256=aEYE-1vGt5PujD0bHAVRTJiLrKFlGWpS8zeYhqEYZLY,853
192
193
  megadetector/utils/url_utils.py,sha256=yybWwJ-vl2A6Fci66i-xt_dl3Uqh72Ylnb8XOT2Grog,14835
193
- megadetector/utils/write_html_image_list.py,sha256=apzoWkgZWG-ybCT4k92PlS4-guN_sNBSMMMbj7Cfm1k,8638
194
+ megadetector/utils/write_html_image_list.py,sha256=MhVAAv6th9Q2fldtE8hp_hHWFgJ_pcKJEk3YiK6dWY4,9415
194
195
  megadetector/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
195
196
  megadetector/visualization/plot_utils.py,sha256=lOfU3uPrcuHZagV_1SN8erT8PujIepocgw6KZ17Ej6c,10671
196
197
  megadetector/visualization/render_images_with_thumbnails.py,sha256=kgJYW8BsqRO4C7T3sqItdBuSkZ64I1vOtIWAsVG4XBI,10589
197
- megadetector/visualization/visualization_utils.py,sha256=J53VsI8aQmzzBBeu-msm8c-qC6pm_HCMkMKYvnylqjo,63083
198
- megadetector/visualization/visualize_db.py,sha256=x9jScwG-3V-mZGy5cB1s85KWbiAIfvgVUcLqUplHxGA,22110
198
+ megadetector/visualization/visualization_utils.py,sha256=KsQKxANzCqLoLrI5b-5U5LEGhJIKH0YNNJQOym9DE3M,72779
199
+ megadetector/visualization/visualize_db.py,sha256=tswoWqyAo_S5RW76yvPEEWkUVEzn2NJrX1lfDl2jqY4,24392
199
200
  megadetector/visualization/visualize_detector_output.py,sha256=LY8QgDWpWlXVLZJUskvT29CdkNvIlEsFTk4DC_lS6pk,17052
200
- megadetector-5.0.20.dist-info/LICENSE,sha256=RMa3qq-7Cyk7DdtqRj_bP1oInGFgjyHn9-PZ3PcrqIs,1100
201
- megadetector-5.0.20.dist-info/METADATA,sha256=mpalvNnG04pMLXU6BD8IZ7YTumaa8uS9KPOFdS87KGk,7468
202
- megadetector-5.0.20.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
203
- megadetector-5.0.20.dist-info/top_level.txt,sha256=wf9DXa8EwiOSZ4G5IPjakSxBPxTDjhYYnqWRfR-zS4M,13
204
- megadetector-5.0.20.dist-info/RECORD,,
201
+ megadetector-5.0.22.dist-info/LICENSE,sha256=RMa3qq-7Cyk7DdtqRj_bP1oInGFgjyHn9-PZ3PcrqIs,1100
202
+ megadetector-5.0.22.dist-info/METADATA,sha256=f8OKhVhNxpXvY_i9sshe9Og8Z7pPA4m5e_MOmIzp-Rs,7632
203
+ megadetector-5.0.22.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
204
+ megadetector-5.0.22.dist-info/top_level.txt,sha256=wf9DXa8EwiOSZ4G5IPjakSxBPxTDjhYYnqWRfR-zS4M,13
205
+ megadetector-5.0.22.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,359 +0,0 @@
1
- """
2
-
3
- Prepare a LILA-ready .json file for the NOAA Puget Sound Nearshore Fish dataset.
4
-
5
- """
6
-
7
- #%% Constants and imports
8
-
9
- import os
10
- import json
11
- import uuid
12
- import pandas as pd
13
-
14
- from megadetector.utils.path_utils import open_file
15
-
16
- base_folder = r'G:\temp\noaa'
17
- output_json_fn = os.path.join(base_folder,'noaa_estuary_fish.json')
18
- edited_image_folders = ['edited_clip_2017','edited_clip_2018']
19
- jpeg_image_folder = 'JPEGImages'
20
- metadata_file = 'MasterDataForMicrosoft.xlsx'
21
-
22
-
23
- #%% Enumerate files
24
-
25
- edited_image_files = []
26
-
27
- # edited_image_folder = edited_image_folders[0]
28
- for edited_image_folder in edited_image_folders:
29
- folder_path = os.path.join(base_folder,edited_image_folder)
30
- image_files = os.listdir(folder_path)
31
- assert all([fn.endswith('.jpg') for fn in image_files])
32
- edited_image_files.extend([os.path.join(folder_path,fn) for fn in image_files])
33
-
34
- jpeg_image_folder_files = os.listdir(os.path.join(base_folder,jpeg_image_folder))
35
- assert all([fn.endswith('.jpg') for fn in jpeg_image_folder_files])
36
-
37
- relative_edited_image_files_set = set()
38
-
39
- # fn = edited_image_files[0]
40
- for fn in edited_image_files:
41
- bn = os.path.basename(fn)
42
- assert bn not in relative_edited_image_files_set
43
- relative_edited_image_files_set.add(bn)
44
-
45
- jpeg_image_folder_files_set = set(jpeg_image_folder_files)
46
-
47
- assert len(jpeg_image_folder_files_set) == len(relative_edited_image_files_set)
48
-
49
- assert jpeg_image_folder_files_set == relative_edited_image_files_set
50
-
51
-
52
- #%% Read metadata and capture location information
53
-
54
- df = pd.read_excel(os.path.join(base_folder,metadata_file))
55
-
56
- print('Read {} rows from metadata file'.format(len(df)))
57
-
58
- id_string_to_site = {}
59
-
60
- # i_row = 0; row = df.iloc[i_row]
61
- for i_row,row in df.iterrows():
62
-
63
- assert row['sd'].lower().startswith('sd')
64
- assert isinstance(row['id'],int) and row['id'] > 0 and row['id'] < 10000
65
- date_string = row['date']
66
- date_tokens = date_string.split('_')
67
-
68
- # Sometimes '2017' was just '17' in the date column
69
- if len(date_tokens[2]) != 4:
70
- assert len(date_tokens[2]) == 2
71
- date_tokens[2] = '20' + date_tokens[2]
72
- date_string = '_'.join(date_tokens)
73
- else:
74
- assert date_tokens[2].startswith('201')
75
-
76
- id_string = row['sd'].upper() + '_' + str(row['id']) + '_' + date_string
77
- id_string_to_site[id_string] = row['site']
78
-
79
- print('Found {} unique locations'.format(len(pd.unique(df['site']))))
80
-
81
-
82
- #%% Read the .json files and build output dictionaries
83
-
84
- json_files = [fn for fn in os.listdir(base_folder) if (fn.endswith('.json') and (fn != os.path.basename(output_json_fn)))]
85
- json_files = [os.path.join(base_folder,fn) for fn in json_files]
86
-
87
- fn_to_image = {}
88
- annotations = []
89
-
90
- CATEGORY_ID_EMPTY = 0
91
- CATEGORY_ID_FISH = 1
92
-
93
- categories = [{'id':CATEGORY_ID_EMPTY,'name':'empty'},{'id':CATEGORY_ID_FISH,'name':'animal'}]
94
-
95
- empty_images = set()
96
- non_empty_images = set()
97
-
98
- n_matched_locations = 0
99
- images_with_unmatched_locations = []
100
-
101
- import random
102
- random.seed(1)
103
-
104
- site_to_location_id = {}
105
-
106
- # json_fn = json_files[0]
107
- for json_fn in json_files:
108
-
109
- # if 'partial' in json_fn:
110
- # continue
111
-
112
- with open(json_fn,'r') as f:
113
-
114
- lines = f.readlines()
115
-
116
- # line = lines[0]
117
- for line in lines:
118
-
119
- d = json.loads(line)
120
- image_fn = d['image']
121
-
122
- # if image_fn == 'SD1_238_6_26_17_16_76.73.jpg':
123
- # asdfad
124
-
125
- # SD29_079_5_14_2018_17_52.85.jpg
126
-
127
- tokens = image_fn.split('_')
128
- assert len(tokens) == 7
129
- assert tokens[0].startswith('SD')
130
-
131
- # Re-write two-digit years as four-digit years
132
- if len(tokens[4]) != 4:
133
- assert len(tokens[4]) == 2
134
- tokens[4] = '20' + tokens[4]
135
- else:
136
- assert tokens[4].startswith('201')
137
-
138
- # Sometimes the year was written with two digits instead of 4
139
- # assert len(tokens[4]) == 4 and tokens[4].startswith('20')
140
-
141
- while tokens[1].startswith('0'):
142
- tokens[1] = tokens[1][1:]
143
- assert not tokens[1].startswith('0')
144
- assert len(tokens[1]) > 0
145
-
146
- id_string = '_'.join(tokens[0:5])
147
-
148
- location_id = 'unknown'
149
-
150
- if id_string in id_string_to_site:
151
-
152
- site_id = id_string_to_site[id_string]
153
-
154
- # Have we seen this location already?
155
- if site_id in site_to_location_id:
156
- location_id = site_to_location_id[site_id]
157
- else:
158
- location_id = 'loc_' + str(uuid.uuid1())
159
- site_to_location_id[site_id] = location_id
160
- print('Adding new location ID {} for site {}'.format(
161
- location_id,site_id))
162
- n_matched_locations += 1
163
-
164
- else:
165
- raise ValueError('Could not match location ID')
166
- images_with_unmatched_locations.append(image_fn)
167
-
168
- assert image_fn in jpeg_image_folder_files_set
169
- assert d['type'] == 'image/jpg'
170
- input_ann = d['annotations']
171
- assert len(input_ann) == 1 and len(input_ann.keys()) == 1 and 'object' in input_ann
172
- input_ann = input_ann['object']
173
- assert input_ann['metainfo']['image']['height'] == 1080
174
- assert input_ann['metainfo']['image']['width'] == 1920
175
-
176
- im = {}
177
-
178
- img_h = input_ann['metainfo']['image']['height']
179
- img_w = input_ann['metainfo']['image']['width']
180
-
181
- im['width'] = img_w
182
- im['height'] = img_h
183
- im['file_name'] = image_fn
184
-
185
- if image_fn in fn_to_image:
186
- assert fn_to_image[image_fn]['file_name'] == image_fn
187
- assert fn_to_image[image_fn]['width'] == img_w
188
- assert fn_to_image[image_fn]['height'] == img_h
189
- im = fn_to_image[image_fn]
190
- else:
191
- fn_to_image[image_fn] = im
192
- im['location'] = location_id
193
- im['id'] = image_fn # str(uuid.uuid1())
194
-
195
- # Not a typo, it's actually "formateddata"
196
- formatted_data = input_ann['formateddata']
197
- if len(formatted_data) == 0:
198
-
199
- # An image shouldn't be annotated as both empty and non-empty
200
- assert image_fn not in non_empty_images
201
- empty_images.add(image_fn)
202
- ann = {}
203
- ann['id'] = str(uuid.uuid1())
204
- ann['image_id'] = im['id']
205
- ann['category_id'] = CATEGORY_ID_EMPTY
206
- ann['sequence_level_annotation'] = False
207
- annotations.append(ann)
208
-
209
- else:
210
-
211
- # An image shouldn't be annotated as both empty and non-empty
212
- assert image_fn not in empty_images
213
- non_empty_images.add(image_fn)
214
-
215
- n_boxes = len(formatted_data)
216
-
217
- # box = formatteddata[0]
218
- for box in formatted_data:
219
-
220
- attributes = box['attribute']
221
- assert len(attributes) == 2 and 'occluded' in attributes and 'truncated' in attributes
222
- coordinates = box['coordinates']
223
- assert box['object_type'] == 'bbox'
224
- assert box['class']['type'] == 'Fish'
225
- assert len(coordinates) == 4
226
- for coord in coordinates:
227
- assert len(coord) == 2 and 'x' in coord and 'y' in coord
228
- assert coordinates[0]['y'] == coordinates[1]['y']
229
- assert coordinates[2]['y'] == coordinates[3]['y']
230
- assert coordinates[0]['x'] == coordinates[3]['x']
231
- assert coordinates[1]['x'] == coordinates[2]['x']
232
-
233
- assert coordinates[0]['x'] < coordinates[1]['x']
234
- assert coordinates[0]['y'] < coordinates[3]['y']
235
-
236
- if False:
237
- x = coordinates[0]['x'] / img_w
238
- y = coordinates[0]['y'] / img_h
239
- box_w = (coordinates[1]['x'] - coordinates[0]['x']) / img_w
240
- box_h = (coordinates[3]['y'] - coordinates[0]['y']) / img_h
241
- else:
242
- x = coordinates[0]['x']
243
- y = coordinates[0]['y']
244
- box_w = (coordinates[1]['x'] - coordinates[0]['x'])
245
- box_h = (coordinates[3]['y'] - coordinates[0]['y'])
246
-
247
- bbox = [x,y,box_w,box_h]
248
-
249
- ann = {}
250
- ann['id'] = str(uuid.uuid1())
251
- ann['image_id'] = im['id']
252
- ann['category_id'] = CATEGORY_ID_FISH
253
- ann['sequence_level_annotation'] = False
254
- ann['bbox'] = bbox
255
-
256
- annotations.append(ann)
257
-
258
- # open_file(os.path.join(base_folder,jpeg_image_folder,image_fn))
259
-
260
- # ...for each box
261
-
262
- # ...if there are boxes on this image
263
-
264
- # ...for each line
265
-
266
- # ...with open()
267
-
268
- # ...for each json file
269
-
270
- print('Found annotations for {} images (of {})'.format(len(fn_to_image),
271
- len(jpeg_image_folder_files_set)))
272
-
273
-
274
- print('Matched locations for {} images (failed to match {})'.format(
275
- n_matched_locations,len(images_with_unmatched_locations)))
276
-
277
- images = list(fn_to_image.values())
278
-
279
-
280
- #%% Prepare the output .json
281
-
282
- info = {}
283
- info['version'] = '2022.07.31.00'
284
- info['description'] = 'NOAA Estuary Fish 2022'
285
- info['year'] = 2022
286
- info['contributor'] = 'NOAA Fisheries'
287
-
288
- d = {}
289
- d['info'] = info
290
- d['annotations'] = annotations
291
- d['images'] = images
292
- d['categories'] = categories
293
-
294
- with open(output_json_fn,'w') as f:
295
- json.dump(d,f,indent=1)
296
-
297
-
298
- #%% Check DB integrity
299
-
300
- from megadetector.data_management.databases import integrity_check_json_db
301
-
302
- options = integrity_check_json_db.IntegrityCheckOptions()
303
- options.baseDir = os.path.join(base_folder,jpeg_image_folder)
304
- options.bCheckImageSizes = False
305
- options.bCheckImageExistence = True
306
- options.bFindUnusedImages = True
307
-
308
- _, _, _ = integrity_check_json_db.integrity_check_json_db(output_json_fn, options)
309
-
310
-
311
- #%% Print unique locations
312
-
313
- from collections import defaultdict
314
- location_to_count = defaultdict(int)
315
- for im in d['images']:
316
- location_to_count[im['location']] += 1
317
- for loc in location_to_count.keys():
318
- print(loc + ': ' + str(location_to_count[loc]))
319
-
320
- print('{} unique locations'.format(len(location_to_count)))
321
- assert 'unknown' not in location_to_count.keys()
322
-
323
- # SD12_202_6_23_2017_1_31.85.jpg
324
-
325
-
326
- #%% Preview some images
327
-
328
- from megadetector.visualization import visualize_db
329
-
330
- viz_options = visualize_db.DbVizOptions()
331
- viz_options.num_to_visualize = 10000
332
- viz_options.trim_to_images_with_bboxes = False
333
- viz_options.add_search_links = False
334
- viz_options.sort_by_filename = False
335
- viz_options.parallelize_rendering = True
336
- viz_options.include_filename_links = True
337
-
338
- html_output_file, _ = visualize_db.visualize_db(db_path=output_json_fn,
339
- output_dir=os.path.join(base_folder,'preview'),
340
- image_base_dir=os.path.join(base_folder,jpeg_image_folder),
341
- options=viz_options)
342
- open_file(html_output_file)
343
-
344
-
345
- #%% Statistics
346
-
347
- print('Empty: {}'.format(len(empty_images)))
348
- print('Non-empty: {}'.format(len(non_empty_images)))
349
-
350
- images_with_no_boxes = 0
351
- n_boxes = 0
352
- for ann in annotations:
353
- if 'bbox' not in ann:
354
- images_with_no_boxes += 1
355
- else:
356
- assert len(bbox) == 4
357
- n_boxes += 1
358
-
359
- print('N boxes: {}'.format(n_boxes))