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.
- megadetector/data_management/cct_json_utils.py +143 -7
- megadetector/data_management/cct_to_md.py +12 -5
- megadetector/data_management/databases/integrity_check_json_db.py +83 -77
- megadetector/data_management/importers/osu-small-animals-to-json.py +4 -4
- megadetector/data_management/importers/raic_csv_to_md_results.py +416 -0
- megadetector/data_management/importers/zamba_results_to_md_results.py +1 -2
- megadetector/data_management/lila/create_lila_test_set.py +25 -11
- megadetector/data_management/lila/download_lila_subset.py +9 -2
- megadetector/data_management/lila/generate_lila_per_image_labels.py +3 -2
- megadetector/data_management/lila/test_lila_metadata_urls.py +5 -1
- megadetector/data_management/read_exif.py +10 -14
- megadetector/data_management/rename_images.py +1 -1
- megadetector/data_management/yolo_output_to_md_output.py +18 -5
- megadetector/detection/process_video.py +14 -3
- megadetector/detection/pytorch_detector.py +15 -3
- megadetector/detection/run_detector.py +4 -3
- megadetector/detection/run_inference_with_yolov5_val.py +121 -13
- megadetector/detection/video_utils.py +40 -17
- megadetector/postprocessing/classification_postprocessing.py +1 -1
- megadetector/postprocessing/combine_api_outputs.py +1 -1
- megadetector/postprocessing/compare_batch_results.py +931 -142
- megadetector/postprocessing/detector_calibration.py +565 -0
- megadetector/postprocessing/md_to_coco.py +85 -19
- megadetector/postprocessing/postprocess_batch_results.py +32 -21
- megadetector/postprocessing/validate_batch_results.py +174 -64
- megadetector/taxonomy_mapping/map_new_lila_datasets.py +15 -12
- megadetector/taxonomy_mapping/prepare_lila_taxonomy_release.py +1 -1
- megadetector/taxonomy_mapping/preview_lila_taxonomy.py +3 -1
- megadetector/utils/ct_utils.py +64 -2
- megadetector/utils/md_tests.py +15 -13
- megadetector/utils/path_utils.py +153 -37
- megadetector/utils/process_utils.py +9 -3
- megadetector/utils/write_html_image_list.py +21 -6
- megadetector/visualization/visualization_utils.py +329 -102
- megadetector/visualization/visualize_db.py +104 -63
- {megadetector-5.0.20.dist-info → megadetector-5.0.22.dist-info}/LICENSE +0 -0
- {megadetector-5.0.20.dist-info → megadetector-5.0.22.dist-info}/METADATA +143 -142
- {megadetector-5.0.20.dist-info → megadetector-5.0.22.dist-info}/RECORD +40 -39
- {megadetector-5.0.20.dist-info → megadetector-5.0.22.dist-info}/WHEEL +1 -1
- {megadetector-5.0.20.dist-info → megadetector-5.0.22.dist-info}/top_level.txt +0 -0
- 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=
|
|
57
|
-
megadetector/data_management/cct_to_md.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
133
|
-
megadetector/data_management/lila/generate_lila_per_image_labels.py,sha256=
|
|
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=
|
|
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=
|
|
140
|
-
megadetector/detection/pytorch_detector.py,sha256=
|
|
141
|
-
megadetector/detection/run_detector.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
153
|
-
megadetector/postprocessing/combine_api_outputs.py,sha256=
|
|
154
|
-
megadetector/postprocessing/compare_batch_results.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
173
|
-
megadetector/taxonomy_mapping/prepare_lila_taxonomy_release.py,sha256
|
|
174
|
-
megadetector/taxonomy_mapping/preview_lila_taxonomy.py,sha256=
|
|
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=
|
|
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=
|
|
186
|
-
megadetector/utils/path_utils.py,sha256=
|
|
187
|
-
megadetector/utils/process_utils.py,sha256=
|
|
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=
|
|
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=
|
|
198
|
-
megadetector/visualization/visualize_db.py,sha256=
|
|
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.
|
|
201
|
-
megadetector-5.0.
|
|
202
|
-
megadetector-5.0.
|
|
203
|
-
megadetector-5.0.
|
|
204
|
-
megadetector-5.0.
|
|
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,,
|
|
File without changes
|
|
@@ -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))
|