megadetector 5.0.7__py3-none-any.whl → 5.0.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of megadetector might be problematic. Click here for more details.
- api/__init__.py +0 -0
- api/batch_processing/__init__.py +0 -0
- api/batch_processing/api_core/__init__.py +0 -0
- api/batch_processing/api_core/batch_service/__init__.py +0 -0
- api/batch_processing/api_core/batch_service/score.py +0 -1
- api/batch_processing/api_core/server_job_status_table.py +0 -1
- api/batch_processing/api_core_support/__init__.py +0 -0
- api/batch_processing/api_core_support/aggregate_results_manually.py +0 -1
- api/batch_processing/api_support/__init__.py +0 -0
- api/batch_processing/api_support/summarize_daily_activity.py +0 -1
- api/batch_processing/data_preparation/__init__.py +0 -0
- api/batch_processing/data_preparation/manage_local_batch.py +93 -79
- api/batch_processing/data_preparation/manage_video_batch.py +8 -8
- api/batch_processing/integration/digiKam/xmp_integration.py +0 -1
- api/batch_processing/integration/eMammal/test_scripts/push_annotations_to_emammal.py +0 -1
- api/batch_processing/postprocessing/__init__.py +0 -0
- api/batch_processing/postprocessing/add_max_conf.py +12 -12
- api/batch_processing/postprocessing/categorize_detections_by_size.py +32 -14
- api/batch_processing/postprocessing/combine_api_outputs.py +69 -55
- api/batch_processing/postprocessing/compare_batch_results.py +114 -44
- api/batch_processing/postprocessing/convert_output_format.py +62 -19
- api/batch_processing/postprocessing/load_api_results.py +17 -20
- api/batch_processing/postprocessing/md_to_coco.py +31 -21
- api/batch_processing/postprocessing/md_to_labelme.py +165 -68
- api/batch_processing/postprocessing/merge_detections.py +40 -15
- api/batch_processing/postprocessing/postprocess_batch_results.py +270 -186
- api/batch_processing/postprocessing/remap_detection_categories.py +170 -0
- api/batch_processing/postprocessing/render_detection_confusion_matrix.py +75 -39
- api/batch_processing/postprocessing/repeat_detection_elimination/find_repeat_detections.py +53 -44
- api/batch_processing/postprocessing/repeat_detection_elimination/remove_repeat_detections.py +25 -14
- api/batch_processing/postprocessing/repeat_detection_elimination/repeat_detections_core.py +244 -160
- api/batch_processing/postprocessing/separate_detections_into_folders.py +159 -114
- api/batch_processing/postprocessing/subset_json_detector_output.py +146 -169
- api/batch_processing/postprocessing/top_folders_to_bottom.py +77 -43
- api/synchronous/__init__.py +0 -0
- api/synchronous/api_core/animal_detection_api/__init__.py +0 -0
- api/synchronous/api_core/animal_detection_api/api_backend.py +0 -2
- api/synchronous/api_core/animal_detection_api/api_frontend.py +266 -268
- api/synchronous/api_core/animal_detection_api/config.py +35 -35
- api/synchronous/api_core/tests/__init__.py +0 -0
- api/synchronous/api_core/tests/load_test.py +109 -109
- classification/__init__.py +0 -0
- classification/aggregate_classifier_probs.py +21 -24
- classification/analyze_failed_images.py +11 -13
- classification/cache_batchapi_outputs.py +51 -51
- classification/create_classification_dataset.py +69 -68
- classification/crop_detections.py +54 -53
- classification/csv_to_json.py +97 -100
- classification/detect_and_crop.py +105 -105
- classification/evaluate_model.py +43 -42
- classification/identify_mislabeled_candidates.py +47 -46
- classification/json_to_azcopy_list.py +10 -10
- classification/json_validator.py +72 -71
- classification/map_classification_categories.py +44 -43
- classification/merge_classification_detection_output.py +68 -68
- classification/prepare_classification_script.py +157 -154
- classification/prepare_classification_script_mc.py +228 -228
- classification/run_classifier.py +27 -26
- classification/save_mislabeled.py +30 -30
- classification/train_classifier.py +20 -20
- classification/train_classifier_tf.py +21 -22
- classification/train_utils.py +10 -10
- data_management/__init__.py +0 -0
- data_management/annotations/__init__.py +0 -0
- data_management/annotations/annotation_constants.py +18 -31
- data_management/camtrap_dp_to_coco.py +238 -0
- data_management/cct_json_utils.py +107 -59
- data_management/cct_to_md.py +176 -158
- data_management/cct_to_wi.py +247 -219
- data_management/coco_to_labelme.py +272 -0
- data_management/coco_to_yolo.py +86 -62
- data_management/databases/__init__.py +0 -0
- data_management/databases/add_width_and_height_to_db.py +20 -16
- data_management/databases/combine_coco_camera_traps_files.py +35 -31
- data_management/databases/integrity_check_json_db.py +130 -83
- data_management/databases/subset_json_db.py +25 -16
- data_management/generate_crops_from_cct.py +27 -45
- data_management/get_image_sizes.py +188 -144
- data_management/importers/add_nacti_sizes.py +8 -8
- data_management/importers/add_timestamps_to_icct.py +78 -78
- data_management/importers/animl_results_to_md_results.py +158 -160
- data_management/importers/auckland_doc_test_to_json.py +9 -9
- data_management/importers/auckland_doc_to_json.py +8 -8
- data_management/importers/awc_to_json.py +7 -7
- data_management/importers/bellevue_to_json.py +15 -15
- data_management/importers/cacophony-thermal-importer.py +13 -13
- data_management/importers/carrizo_shrubfree_2018.py +8 -8
- data_management/importers/carrizo_trail_cam_2017.py +8 -8
- data_management/importers/cct_field_adjustments.py +9 -9
- data_management/importers/channel_islands_to_cct.py +10 -10
- data_management/importers/eMammal/copy_and_unzip_emammal.py +1 -0
- data_management/importers/ena24_to_json.py +7 -7
- data_management/importers/filenames_to_json.py +8 -8
- data_management/importers/helena_to_cct.py +7 -7
- data_management/importers/idaho-camera-traps.py +7 -7
- data_management/importers/idfg_iwildcam_lila_prep.py +10 -10
- data_management/importers/jb_csv_to_json.py +9 -9
- data_management/importers/mcgill_to_json.py +8 -8
- data_management/importers/missouri_to_json.py +18 -18
- data_management/importers/nacti_fieldname_adjustments.py +10 -10
- data_management/importers/noaa_seals_2019.py +8 -8
- data_management/importers/pc_to_json.py +7 -7
- data_management/importers/plot_wni_giraffes.py +7 -7
- data_management/importers/prepare-noaa-fish-data-for-lila.py +359 -359
- data_management/importers/prepare_zsl_imerit.py +7 -7
- data_management/importers/rspb_to_json.py +8 -8
- data_management/importers/save_the_elephants_survey_A.py +8 -8
- data_management/importers/save_the_elephants_survey_B.py +9 -9
- data_management/importers/snapshot_safari_importer.py +26 -26
- data_management/importers/snapshot_safari_importer_reprise.py +665 -665
- data_management/importers/snapshot_serengeti_lila.py +14 -14
- data_management/importers/sulross_get_exif.py +8 -9
- data_management/importers/timelapse_csv_set_to_json.py +11 -11
- data_management/importers/ubc_to_json.py +13 -13
- data_management/importers/umn_to_json.py +7 -7
- data_management/importers/wellington_to_json.py +8 -8
- data_management/importers/wi_to_json.py +9 -9
- data_management/importers/zamba_results_to_md_results.py +181 -181
- data_management/labelme_to_coco.py +309 -159
- data_management/labelme_to_yolo.py +103 -60
- data_management/lila/__init__.py +0 -0
- data_management/lila/add_locations_to_island_camera_traps.py +9 -9
- data_management/lila/add_locations_to_nacti.py +147 -147
- data_management/lila/create_lila_blank_set.py +114 -31
- data_management/lila/create_lila_test_set.py +8 -8
- data_management/lila/create_links_to_md_results_files.py +106 -106
- data_management/lila/download_lila_subset.py +92 -90
- data_management/lila/generate_lila_per_image_labels.py +56 -43
- data_management/lila/get_lila_annotation_counts.py +18 -15
- data_management/lila/get_lila_image_counts.py +11 -11
- data_management/lila/lila_common.py +103 -70
- data_management/lila/test_lila_metadata_urls.py +132 -116
- data_management/ocr_tools.py +173 -128
- data_management/read_exif.py +161 -99
- data_management/remap_coco_categories.py +84 -0
- data_management/remove_exif.py +58 -62
- data_management/resize_coco_dataset.py +32 -44
- data_management/wi_download_csv_to_coco.py +246 -0
- data_management/yolo_output_to_md_output.py +86 -73
- data_management/yolo_to_coco.py +535 -95
- detection/__init__.py +0 -0
- detection/detector_training/__init__.py +0 -0
- detection/process_video.py +85 -33
- detection/pytorch_detector.py +43 -25
- detection/run_detector.py +157 -72
- detection/run_detector_batch.py +189 -114
- detection/run_inference_with_yolov5_val.py +118 -51
- detection/run_tiled_inference.py +113 -42
- detection/tf_detector.py +51 -28
- detection/video_utils.py +606 -521
- docs/source/conf.py +43 -0
- md_utils/__init__.py +0 -0
- md_utils/azure_utils.py +9 -9
- md_utils/ct_utils.py +249 -70
- md_utils/directory_listing.py +59 -64
- md_utils/md_tests.py +968 -862
- md_utils/path_utils.py +655 -155
- md_utils/process_utils.py +157 -133
- md_utils/sas_blob_utils.py +20 -20
- md_utils/split_locations_into_train_val.py +45 -32
- md_utils/string_utils.py +33 -10
- md_utils/url_utils.py +208 -27
- md_utils/write_html_image_list.py +51 -35
- md_visualization/__init__.py +0 -0
- md_visualization/plot_utils.py +102 -109
- md_visualization/render_images_with_thumbnails.py +34 -34
- md_visualization/visualization_utils.py +908 -311
- md_visualization/visualize_db.py +109 -58
- md_visualization/visualize_detector_output.py +61 -42
- {megadetector-5.0.7.dist-info → megadetector-5.0.9.dist-info}/METADATA +21 -17
- megadetector-5.0.9.dist-info/RECORD +224 -0
- {megadetector-5.0.7.dist-info → megadetector-5.0.9.dist-info}/WHEEL +1 -1
- {megadetector-5.0.7.dist-info → megadetector-5.0.9.dist-info}/top_level.txt +1 -0
- taxonomy_mapping/__init__.py +0 -0
- taxonomy_mapping/map_lila_taxonomy_to_wi_taxonomy.py +342 -335
- taxonomy_mapping/map_new_lila_datasets.py +154 -154
- taxonomy_mapping/prepare_lila_taxonomy_release.py +142 -134
- taxonomy_mapping/preview_lila_taxonomy.py +591 -591
- taxonomy_mapping/retrieve_sample_image.py +12 -12
- taxonomy_mapping/simple_image_download.py +11 -11
- taxonomy_mapping/species_lookup.py +10 -10
- taxonomy_mapping/taxonomy_csv_checker.py +18 -18
- taxonomy_mapping/taxonomy_graph.py +47 -47
- taxonomy_mapping/validate_lila_category_mappings.py +83 -76
- data_management/cct_json_to_filename_json.py +0 -89
- data_management/cct_to_csv.py +0 -140
- data_management/databases/remove_corrupted_images_from_db.py +0 -191
- detection/detector_training/copy_checkpoints.py +0 -43
- md_visualization/visualize_megadb.py +0 -183
- megadetector-5.0.7.dist-info/RECORD +0 -202
- {megadetector-5.0.7.dist-info → megadetector-5.0.9.dist-info}/LICENSE +0 -0
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
########
|
|
2
|
-
#
|
|
3
|
-
# remove_corrupted_images_from_db.py
|
|
4
|
-
#
|
|
5
|
-
# Given a coco-camera-traps .json file, checks all images for corruption
|
|
6
|
-
# and generates a new .json file that only contains the non-corrupted images.
|
|
7
|
-
#
|
|
8
|
-
########
|
|
9
|
-
|
|
10
|
-
#%% Imports and constants
|
|
11
|
-
|
|
12
|
-
import argparse
|
|
13
|
-
import gc
|
|
14
|
-
import json
|
|
15
|
-
import sys
|
|
16
|
-
import os
|
|
17
|
-
import time
|
|
18
|
-
|
|
19
|
-
from multiprocessing.pool import ThreadPool
|
|
20
|
-
|
|
21
|
-
import humanfriendly
|
|
22
|
-
import numpy as np
|
|
23
|
-
import tensorflow as tf
|
|
24
|
-
|
|
25
|
-
N_THREADS = 16
|
|
26
|
-
DEBUG_MAX_IMAGES = -1
|
|
27
|
-
IMAGE_PRINT_FREQUENCY = 10
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
#%% Function definitions
|
|
31
|
-
|
|
32
|
-
def check_images(images, image_file_root):
|
|
33
|
-
"""
|
|
34
|
-
Checks all the images in [images] for corruption using TF.
|
|
35
|
-
|
|
36
|
-
[images] is a list of image dictionaries, as they would appear in COCO
|
|
37
|
-
files.
|
|
38
|
-
|
|
39
|
-
Returns a dictionary mapping image IDs to booleans.
|
|
40
|
-
"""
|
|
41
|
-
|
|
42
|
-
# I sometimes pass in a list of images, sometimes a dict with a single
|
|
43
|
-
# element mapping a job ID to the list of images
|
|
44
|
-
if isinstance(images,dict):
|
|
45
|
-
assert(len(images) == 1)
|
|
46
|
-
jobID = list(images.keys())[0]
|
|
47
|
-
images = images[jobID]
|
|
48
|
-
else:
|
|
49
|
-
jobID = 0
|
|
50
|
-
|
|
51
|
-
keep_im = {im['id']:True for im in images}
|
|
52
|
-
|
|
53
|
-
count = 0
|
|
54
|
-
nImages = len(images)
|
|
55
|
-
|
|
56
|
-
# We're about to start a lot of TF sessions, and we don't want gobs
|
|
57
|
-
# of debugging information printing out for every session.
|
|
58
|
-
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
|
|
59
|
-
config=tf.ConfigProto(log_device_placement=False)
|
|
60
|
-
|
|
61
|
-
# At some point we were creating a single session and looping over images
|
|
62
|
-
# within that session, but the only way I found to reliably not run out
|
|
63
|
-
# of GPU memory was to create a session per image and gc.collect() after
|
|
64
|
-
# each session.
|
|
65
|
-
for iImage,im in enumerate(images):
|
|
66
|
-
|
|
67
|
-
with tf.Session(config=config) as sess:
|
|
68
|
-
|
|
69
|
-
if ((DEBUG_MAX_IMAGES > 0) and (iImage >= DEBUG_MAX_IMAGES)):
|
|
70
|
-
print('Breaking after {} images'.format(DEBUG_MAX_IMAGES))
|
|
71
|
-
break
|
|
72
|
-
|
|
73
|
-
if (count % IMAGE_PRINT_FREQUENCY == 0):
|
|
74
|
-
print('Job {}: processed {} of {} images'.format(jobID,count,nImages))
|
|
75
|
-
|
|
76
|
-
count += 1
|
|
77
|
-
image_file = os.path.join(image_file_root,im['file_name'])
|
|
78
|
-
assert(os.path.isfile(image_file))
|
|
79
|
-
|
|
80
|
-
try:
|
|
81
|
-
image_data = tf.gfile.FastGFile(image_file,'rb').read()
|
|
82
|
-
image = tf.image.decode_jpeg(image_data)
|
|
83
|
-
sess.run(image)
|
|
84
|
-
except:
|
|
85
|
-
keep_im[im['id']] = False
|
|
86
|
-
|
|
87
|
-
gc.collect()
|
|
88
|
-
|
|
89
|
-
return keep_im
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
def remove_corrupted_images_from_database(data, image_file_root):
|
|
93
|
-
"""
|
|
94
|
-
Given the COCO database [data], checks all images for corruption using
|
|
95
|
-
TF, and returns a subset of [data] containing only non-corrupted images.
|
|
96
|
-
"""
|
|
97
|
-
|
|
98
|
-
# Map Image IDs to boolean (should I keep this image?)
|
|
99
|
-
images = data['images']
|
|
100
|
-
|
|
101
|
-
if (N_THREADS == 1):
|
|
102
|
-
|
|
103
|
-
keep_im = check_images(images,image_file_root)
|
|
104
|
-
|
|
105
|
-
else:
|
|
106
|
-
|
|
107
|
-
start = time.time()
|
|
108
|
-
imageChunks = np.array_split(images,N_THREADS)
|
|
109
|
-
# Convert to lists, append job numbers to the image lists
|
|
110
|
-
for iChunk in range(0,len(imageChunks)):
|
|
111
|
-
imageChunks[iChunk] = list(imageChunks[iChunk])
|
|
112
|
-
imageChunks[iChunk] = {iChunk:imageChunks[iChunk]}
|
|
113
|
-
pool = ThreadPool(N_THREADS)
|
|
114
|
-
# results = pool.imap_unordered(lambda x: fetch_url(x,nImages), indexedUrlList)
|
|
115
|
-
results = pool.map(lambda x: check_images(x,image_file_root), imageChunks)
|
|
116
|
-
processingTime = time.time() - start
|
|
117
|
-
|
|
118
|
-
# Merge results
|
|
119
|
-
keep_im = {}
|
|
120
|
-
for d in results:
|
|
121
|
-
keep_im.update(d)
|
|
122
|
-
bValid = keep_im.values()
|
|
123
|
-
|
|
124
|
-
print("Checked image corruption in {}, found {} invalid images (of {})".format(
|
|
125
|
-
humanfriendly.format_timespan(processingTime),
|
|
126
|
-
len(bValid)-sum(bValid),len(bValid)))
|
|
127
|
-
|
|
128
|
-
data['images'] = [im for im in data['images'] if keep_im[im['id']]]
|
|
129
|
-
data['annotations'] = [ann for ann in data['annotations'] if keep_im[ann['image_id']]]
|
|
130
|
-
|
|
131
|
-
return data
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
#%% Interactive driver
|
|
135
|
-
|
|
136
|
-
if False:
|
|
137
|
-
|
|
138
|
-
#%%
|
|
139
|
-
|
|
140
|
-
# base_dir = r'D:\temp\snapshot_serengeti_tfrecord_generation'
|
|
141
|
-
base_dir = r'/data/ss_corruption_check'
|
|
142
|
-
input_file = os.path.join(base_dir,'imerit_batch7_renamed.json')
|
|
143
|
-
output_file = os.path.join(base_dir,'imerit_batch7_renamed_uncorrupted.json')
|
|
144
|
-
image_file_root = os.path.join(base_dir,'imerit_batch7_images_renamed')
|
|
145
|
-
assert(os.path.isfile(input_file))
|
|
146
|
-
assert(os.path.isdir(image_file_root))
|
|
147
|
-
|
|
148
|
-
# Load annotations
|
|
149
|
-
with open(input_file,'r') as f:
|
|
150
|
-
data = json.load(f)
|
|
151
|
-
|
|
152
|
-
# Check for corruption
|
|
153
|
-
data_uncorrupted = remove_corrupted_images_from_database(data,image_file_root)
|
|
154
|
-
|
|
155
|
-
# Write out only the uncorrupted data
|
|
156
|
-
json.dump(data_uncorrupted, open(output_file,'w'))
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
#%% Command-line driver
|
|
160
|
-
|
|
161
|
-
def main():
|
|
162
|
-
|
|
163
|
-
parser = argparse.ArgumentParser(description = 'Remove images from a .json file that can''t be opened in TF')
|
|
164
|
-
|
|
165
|
-
parser.add_argument('--input_file', dest='input_file',
|
|
166
|
-
help='Path to .json database that includes corrupted jpegs',
|
|
167
|
-
type=str, required=True)
|
|
168
|
-
parser.add_argument('--image_file_root', dest='image_file_root',
|
|
169
|
-
help='Path to image files',
|
|
170
|
-
type=str, required=True)
|
|
171
|
-
parser.add_argument('--output_file', dest='output_file',
|
|
172
|
-
help='Path to store uncorrupted .json database',
|
|
173
|
-
type=str, required=True)
|
|
174
|
-
|
|
175
|
-
if len(sys.argv[1:]) == 0:
|
|
176
|
-
parser.print_help()
|
|
177
|
-
parser.exit()
|
|
178
|
-
|
|
179
|
-
args = parser.parse_args()
|
|
180
|
-
|
|
181
|
-
print('Reading input file')
|
|
182
|
-
with open(args.input_file,'r') as f:
|
|
183
|
-
data = json.load(f)
|
|
184
|
-
print('Removing corrupted images from database')
|
|
185
|
-
uncorrupted_data = remove_corrupted_images_from_database(data, args.image_file_root)
|
|
186
|
-
|
|
187
|
-
json.dump(uncorrupted_data, open(args.output_file,'w'))
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
if __name__ == '__main__':
|
|
191
|
-
main()
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
########
|
|
2
|
-
#
|
|
3
|
-
# copy_checkpoints.py
|
|
4
|
-
#
|
|
5
|
-
# Run this script with specified source_dir and target_dir while the model is training to make a copy
|
|
6
|
-
# of every checkpoint (checkpoints are kept once an hour by default and is difficult to adjust)
|
|
7
|
-
#
|
|
8
|
-
########
|
|
9
|
-
|
|
10
|
-
#%% Imports and constants
|
|
11
|
-
|
|
12
|
-
import time
|
|
13
|
-
import os
|
|
14
|
-
import shutil
|
|
15
|
-
|
|
16
|
-
check_every_n_minutes = 10
|
|
17
|
-
|
|
18
|
-
source_dir = '/datadrive/megadetectorv3/experiments/190425'
|
|
19
|
-
target_dir = '/datadrive/megadetectorv3/experiments/0425_checkpoints'
|
|
20
|
-
|
|
21
|
-
os.makedirs(target_dir, exist_ok=True)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
#%% Main loop
|
|
25
|
-
|
|
26
|
-
num_checks = 0
|
|
27
|
-
|
|
28
|
-
while True:
|
|
29
|
-
|
|
30
|
-
num_checks += 1
|
|
31
|
-
print('Checking round {}.'.format(num_checks))
|
|
32
|
-
|
|
33
|
-
for f in os.listdir(source_dir):
|
|
34
|
-
# do not copy event or evaluation results
|
|
35
|
-
if f.startswith('model') or f.startswith('graph'):
|
|
36
|
-
target_path = os.path.join(target_dir, f)
|
|
37
|
-
if not os.path.exists(target_path):
|
|
38
|
-
_ = shutil.copy(os.path.join(source_dir, f), target_path)
|
|
39
|
-
print('Copied {}.'.format(f))
|
|
40
|
-
|
|
41
|
-
print('End of round {}.'.format(num_checks))
|
|
42
|
-
|
|
43
|
-
time.sleep(check_every_n_minutes * 60)
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
########
|
|
2
|
-
#
|
|
3
|
-
# visualize_megadb.py
|
|
4
|
-
#
|
|
5
|
-
# Create visual previews of images/sequences in MegaDB.
|
|
6
|
-
#
|
|
7
|
-
########
|
|
8
|
-
|
|
9
|
-
#%% Imports
|
|
10
|
-
|
|
11
|
-
import argparse
|
|
12
|
-
import json
|
|
13
|
-
import os
|
|
14
|
-
import sys
|
|
15
|
-
from random import shuffle
|
|
16
|
-
from multiprocessing.pool import ThreadPool
|
|
17
|
-
from functools import partial
|
|
18
|
-
import io
|
|
19
|
-
|
|
20
|
-
from tqdm import tqdm
|
|
21
|
-
|
|
22
|
-
from data_management.megadb.megadb_utils import MegadbUtils
|
|
23
|
-
from md_utils.write_html_image_list import write_html_image_list
|
|
24
|
-
from md_visualization import visualization_utils as vis_utils
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
#%% Support functions
|
|
28
|
-
|
|
29
|
-
def render_image_info(rendering, args):
|
|
30
|
-
|
|
31
|
-
storage_client = rendering['storage_client']
|
|
32
|
-
image_obj = io.BytesIO()
|
|
33
|
-
|
|
34
|
-
try:
|
|
35
|
-
storage_client.download_blob(rendering['blob_path']).readinto(image_obj)
|
|
36
|
-
except Exception as e:
|
|
37
|
-
print(f'Image not found in blob storage: {rendering["blob_path"]}')
|
|
38
|
-
print(e)
|
|
39
|
-
return
|
|
40
|
-
|
|
41
|
-
# resize is for displaying them more quickly
|
|
42
|
-
image = vis_utils.resize_image(
|
|
43
|
-
vis_utils.open_image(image_obj), args.output_image_width)
|
|
44
|
-
vis_utils.render_megadb_bounding_boxes(rendering['bbox'], image)
|
|
45
|
-
|
|
46
|
-
annotated_img_name = rendering['annotated_img_name']
|
|
47
|
-
annotated_img_path = os.path.join(
|
|
48
|
-
args.output_dir, 'rendered_images', annotated_img_name)
|
|
49
|
-
image.save(annotated_img_path)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
def visualize_sequences(datasets_table, sequences, args):
|
|
53
|
-
|
|
54
|
-
num_images = 0
|
|
55
|
-
|
|
56
|
-
images_html = []
|
|
57
|
-
rendering_info = []
|
|
58
|
-
|
|
59
|
-
for seq in sequences:
|
|
60
|
-
if 'images' not in seq:
|
|
61
|
-
continue
|
|
62
|
-
|
|
63
|
-
# dataset and seq_id are required fields
|
|
64
|
-
dataset_name = seq['dataset']
|
|
65
|
-
seq_id = seq['seq_id']
|
|
66
|
-
|
|
67
|
-
# sort the images in the sequence
|
|
68
|
-
|
|
69
|
-
images_in_seq = sorted(seq['images'], key=lambda x: x['frame_num']) if len(seq['images']) > 1 else seq['images']
|
|
70
|
-
|
|
71
|
-
for im in images_in_seq:
|
|
72
|
-
if args.trim_to_images_bboxes_labeled and 'bbox' not in im:
|
|
73
|
-
continue
|
|
74
|
-
|
|
75
|
-
num_images += 1
|
|
76
|
-
|
|
77
|
-
blob_path = MegadbUtils.get_full_path(
|
|
78
|
-
datasets_table, dataset_name, im['file'])
|
|
79
|
-
frame_num = im.get('frame_num', -1)
|
|
80
|
-
|
|
81
|
-
# if no class label on the image, show class label on the sequence
|
|
82
|
-
im_class = im.get('class', None)
|
|
83
|
-
if im_class is None:
|
|
84
|
-
im_class = seq.get('class', [])
|
|
85
|
-
|
|
86
|
-
rendering = {}
|
|
87
|
-
rendering['storage_client'] = MegadbUtils.get_storage_client(
|
|
88
|
-
datasets_table, dataset_name)
|
|
89
|
-
rendering['blob_path'] = blob_path
|
|
90
|
-
rendering['bbox'] = im.get('bbox', [])
|
|
91
|
-
|
|
92
|
-
annotated_img_name = 'anno_' + blob_path.replace('/', args.pathsep_replacement).replace('\\', args.pathsep_replacement)
|
|
93
|
-
rendering['annotated_img_name'] = annotated_img_name
|
|
94
|
-
|
|
95
|
-
rendering_info.append(rendering)
|
|
96
|
-
|
|
97
|
-
images_html.append({
|
|
98
|
-
'filename': 'rendered_images/{}'.format(annotated_img_name),
|
|
99
|
-
'title': 'Seq ID: {}. Frame number: {}<br/> Image file: {}<br/> number of boxes: {}, image class labels: {}'.format(seq_id, frame_num, blob_path, len(rendering['bbox']), im_class),
|
|
100
|
-
'textStyle': 'font-family:verdana,arial,calibri;font-size:80%;text-align:left;margin-top:20;margin-bottom:5'
|
|
101
|
-
})
|
|
102
|
-
|
|
103
|
-
if num_images >= args.num_to_visualize:
|
|
104
|
-
print('num_images visualized is {}'.format(num_images))
|
|
105
|
-
break
|
|
106
|
-
|
|
107
|
-
# pool = ThreadPool()
|
|
108
|
-
render_image_info_partial = partial(render_image_info, args=args)
|
|
109
|
-
# print('len of rendering_info', len(rendering_info))
|
|
110
|
-
# tqdm(pool.imap_unordered(render_image_info_partial, rendering_info), total=len(rendering_info))
|
|
111
|
-
|
|
112
|
-
for rendering in tqdm(rendering_info):
|
|
113
|
-
render_image_info_partial(rendering)
|
|
114
|
-
|
|
115
|
-
print('Making HTML...')
|
|
116
|
-
|
|
117
|
-
html_path = os.path.join(args.output_dir, 'index.html')
|
|
118
|
-
# options = write_html_image_list()
|
|
119
|
-
# options['headerHtml']
|
|
120
|
-
write_html_image_list(
|
|
121
|
-
filename=html_path,
|
|
122
|
-
images=images_html
|
|
123
|
-
)
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
#%% Command-line driver
|
|
127
|
-
|
|
128
|
-
def main():
|
|
129
|
-
|
|
130
|
-
parser = argparse.ArgumentParser()
|
|
131
|
-
parser.add_argument(
|
|
132
|
-
'megadb_entries', type=str,
|
|
133
|
-
help='Path to a json list of MegaDB entries')
|
|
134
|
-
parser.add_argument(
|
|
135
|
-
'output_dir', action='store', type=str,
|
|
136
|
-
help='Output directory for html and rendered images')
|
|
137
|
-
parser.add_argument(
|
|
138
|
-
'--trim_to_images_bboxes_labeled', action='store_true',
|
|
139
|
-
help='Only include images that have been sent for bbox labeling (but '
|
|
140
|
-
'may be actually empty). Turn this on if QAing annotations.')
|
|
141
|
-
parser.add_argument(
|
|
142
|
-
'--num_to_visualize', action='store', type=int, default=200,
|
|
143
|
-
help='Number of images to visualize (all comformant images in a '
|
|
144
|
-
'sequence are shown, so may be a few more than specified). '
|
|
145
|
-
'Sequences are shuffled. Default: 200. Use -1 to visualize all.')
|
|
146
|
-
parser.add_argument(
|
|
147
|
-
'--pathsep_replacement', action='store', type=str, default='~',
|
|
148
|
-
help='Replace path separators in relative filenames with another '
|
|
149
|
-
'character (default ~)')
|
|
150
|
-
parser.add_argument(
|
|
151
|
-
'-w', '--output_image_width', type=int, default=700,
|
|
152
|
-
help='an integer indicating the desired width in pixels of the output '
|
|
153
|
-
'annotated images. Use -1 to not resize.')
|
|
154
|
-
|
|
155
|
-
if len(sys.argv[1:]) == 0:
|
|
156
|
-
parser.print_help()
|
|
157
|
-
parser.exit()
|
|
158
|
-
|
|
159
|
-
args = parser.parse_args()
|
|
160
|
-
|
|
161
|
-
assert 'COSMOS_ENDPOINT' in os.environ and 'COSMOS_KEY' in os.environ
|
|
162
|
-
|
|
163
|
-
os.makedirs(args.output_dir, exist_ok=True)
|
|
164
|
-
os.makedirs(os.path.join(args.output_dir, 'rendered_images'))
|
|
165
|
-
|
|
166
|
-
print('Connecting to MegaDB to get the datasets table...')
|
|
167
|
-
megadb_utils = MegadbUtils()
|
|
168
|
-
datasets_table = megadb_utils.get_datasets_table()
|
|
169
|
-
|
|
170
|
-
print('Loading the MegaDB entries...')
|
|
171
|
-
with open(args.megadb_entries) as f:
|
|
172
|
-
sequences = json.load(f)
|
|
173
|
-
print('Total number of sequences: {}'.format(len(sequences)))
|
|
174
|
-
|
|
175
|
-
# print('Checking that the MegaDB entries conform to the schema...')
|
|
176
|
-
# sequences_schema_check.sequences_schema_check(sequences)
|
|
177
|
-
|
|
178
|
-
shuffle(sequences)
|
|
179
|
-
visualize_sequences(datasets_table, sequences, args)
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
if __name__ == '__main__':
|
|
183
|
-
main()
|
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
api/batch_processing/api_core/server.py,sha256=BNqM5EK29B0haCW7rdeOzVqcCJDziZiD0Etc1mPs56c,11668
|
|
2
|
-
api/batch_processing/api_core/server_api_config.py,sha256=G8X5wgqEXPrWWQpgDI9ua-JktiUgy9mOpEltXSIazLQ,3318
|
|
3
|
-
api/batch_processing/api_core/server_app_config.py,sha256=tQCFsFv0wJCegHfnu-Za3okdXwEd4U522hiM0YGNkMY,1860
|
|
4
|
-
api/batch_processing/api_core/server_batch_job_manager.py,sha256=K7fMFBJA8Z1SkA4eBM-nymcq7VQjwZ6ZRaNnNKFlat8,10324
|
|
5
|
-
api/batch_processing/api_core/server_job_status_table.py,sha256=Wb8IGwft-_W9pi9ixSe81cCwuSocSP5FrzURzbAqdr4,6240
|
|
6
|
-
api/batch_processing/api_core/server_orchestration.py,sha256=LYHABzhOvP0NrM1VIjI6Vwb95YZ5xjQ52mUJW8oIOQ0,17003
|
|
7
|
-
api/batch_processing/api_core/server_utils.py,sha256=oFusP1E29op5DN1nEaR-jQZgRExqMDdzmRL6BHj8EDk,3314
|
|
8
|
-
api/batch_processing/api_core/batch_service/score.py,sha256=ZuPQV7O1u9QNPhWVSYxQqvYgXo9p15e-XhnUyuz0vLE,17347
|
|
9
|
-
api/batch_processing/api_core_support/aggregate_results_manually.py,sha256=8yDXbw12G8Y6SOv09tY-0hPXMNG_iRPv6mzxBiccsaU,2275
|
|
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=Nb9MxJyAJC2e4twWkoGfI-crSSgB9g8Ue28cbbeE5QA,88618
|
|
12
|
-
api/batch_processing/data_preparation/manage_video_batch.py,sha256=fobPIMmfvdqa1OzxsurEYCFVnUTHGrtrGBiCq3xnYHs,9668
|
|
13
|
-
api/batch_processing/integration/digiKam/setup.py,sha256=7P1X3JYrBDXmLUeLRrzxNfDkL5lo-pY8nXsp9Cz8rOI,203
|
|
14
|
-
api/batch_processing/integration/digiKam/xmp_integration.py,sha256=AbGPTe9RjjOkKdiZDSElai61QyfeiLQQqJR2fiJpymA,17775
|
|
15
|
-
api/batch_processing/integration/eMammal/test_scripts/config_template.py,sha256=UnvrgaFRBu59MuVUJa2WpG8ebcOJWcNeZEx6GWuYLzc,73
|
|
16
|
-
api/batch_processing/integration/eMammal/test_scripts/push_annotations_to_emammal.py,sha256=eIzEKiwzCfifCOCGf-jf8G4dMuzyxQMWlrFzt-Z-nVk,3608
|
|
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=y4Xr_OHRxcop3vsLWQJ56eYIemm2HHKqVfvKJonTcQA,1530
|
|
19
|
-
api/batch_processing/postprocessing/categorize_detections_by_size.py,sha256=b_O2OM44zIXewR4RjzeS2ue-32k5jE6KgjiPn8JRxAA,4877
|
|
20
|
-
api/batch_processing/postprocessing/combine_api_outputs.py,sha256=WsOV4EsK9JUCMka1_-u-vinmWc6Ko8B0PD5fmwoXHh0,8233
|
|
21
|
-
api/batch_processing/postprocessing/compare_batch_results.py,sha256=65Kq6mChsPElQfjhWgLDmnO9b6igatQvXiasB2YVHno,34652
|
|
22
|
-
api/batch_processing/postprocessing/convert_output_format.py,sha256=aLboVVZdlGUNYOZhme0w8LtYrd04i15oK0apOgZaYWk,12947
|
|
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
|
-
api/batch_processing/postprocessing/merge_detections.py,sha256=B4QnqW9nvcEJpXzAK20TVB0t6L8c7PR5OjPy8FX-5Z8,15930
|
|
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
|
|
29
|
-
api/batch_processing/postprocessing/separate_detections_into_folders.py,sha256=l5NKxDDxROc2EXt8EslrswXAZkQXgWTy5FSqCqa09Ug,28720
|
|
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
|
|
35
|
-
api/synchronous/api_core/animal_detection_api/api_backend.py,sha256=PJXV0RFb6FoPBmdRug5W_5nbFwY2C_8CvDpFHjDs9w4,4934
|
|
36
|
-
api/synchronous/api_core/animal_detection_api/api_frontend.py,sha256=_FGLf5C2tXQABFEGaA2Kzq05hj_D60BaIfWLCI-Os_4,10690
|
|
37
|
-
api/synchronous/api_core/animal_detection_api/config.py,sha256=yEf7JZwRJCtHEV80kYvnNnUFJNds_AYLhomffwfFQi0,1017
|
|
38
|
-
api/synchronous/api_core/animal_detection_api/data_management/annotations/annotation_constants.py,sha256=P2CZCbAE0ImLLfaNRb1SMlP3q1fULWAIjgrYOrF9L0g,1566
|
|
39
|
-
api/synchronous/api_core/animal_detection_api/detection/process_video.py,sha256=b2xcQThAdlgirumxynHULYLviCr_q5sCDfdkKEqVFyU,22089
|
|
40
|
-
api/synchronous/api_core/animal_detection_api/detection/pytorch_detector.py,sha256=nI2xctI6FSdbWjSFHYlMT0LTH6CCATOe9DF-I8MLEpc,11505
|
|
41
|
-
api/synchronous/api_core/animal_detection_api/detection/run_detector.py,sha256=LBveNOLE3AWSTcQ1MUbbWXaQIutr9e2vtz6RG2SjlWQ,23821
|
|
42
|
-
api/synchronous/api_core/animal_detection_api/detection/run_detector_batch.py,sha256=eivQu5yee5WtBmNQRQ2p636Gf8IB5slyrQL4QRZ2HeM,41849
|
|
43
|
-
api/synchronous/api_core/animal_detection_api/detection/run_inference_with_yolov5_val.py,sha256=yxMFxQQDvkydWVpM0ecopDXtPi89gaqMX0TKjyxNyjI,22118
|
|
44
|
-
api/synchronous/api_core/animal_detection_api/detection/run_tiled_inference.py,sha256=cs1IehE2DXj8Nr3CbnYMXqwcFM1vUBT1Rm5We5nlcSM,28785
|
|
45
|
-
api/synchronous/api_core/animal_detection_api/detection/tf_detector.py,sha256=xOO8kzd-Um2X_sAZyop524LM53nipv5pNx8YueGTJrc,6760
|
|
46
|
-
api/synchronous/api_core/animal_detection_api/detection/video_utils.py,sha256=E96hywSwA_jTUcJNFdkneKPcH0XH_e2qRT5ovV-5SFM,18317
|
|
47
|
-
api/synchronous/api_core/animal_detection_api/detection/detector_training/copy_checkpoints.py,sha256=t2c3Q4Pf82tAp_OjSG-veIjRPrX0tJYi-bSQmGL2m4c,1091
|
|
48
|
-
api/synchronous/api_core/animal_detection_api/detection/detector_training/model_main_tf2.py,sha256=YwNsZ7hkIFaEuwKU0rHG_VyqiR_0E01BbdlD0Yx4Smo,4936
|
|
49
|
-
api/synchronous/api_core/animal_detection_api/md_utils/azure_utils.py,sha256=SVoQNSknYlBcpZeGrH2v3Qgm5kXxBrqM5Sx2L_Lax-I,6243
|
|
50
|
-
api/synchronous/api_core/animal_detection_api/md_utils/ct_utils.py,sha256=3_8p5wNnopQZPCIbchQXYnJmhuUTcDw46I4SK3qb--g,7600
|
|
51
|
-
api/synchronous/api_core/animal_detection_api/md_utils/directory_listing.py,sha256=b3yUwZqK7LdvswXenDo4Y0ue4f4zjgpvncfZmzPGBpI,9598
|
|
52
|
-
api/synchronous/api_core/animal_detection_api/md_utils/matlab_porting_tools.py,sha256=9IFR_uWM1egCMZT3MgoUmdOP8mp7CcF7L9HEbN_A_1E,2005
|
|
53
|
-
api/synchronous/api_core/animal_detection_api/md_utils/path_utils.py,sha256=9ZMyzejC_kzAQlymXGghAAgp_WjCjLuOxWJrAC13TAk,12397
|
|
54
|
-
api/synchronous/api_core/animal_detection_api/md_utils/process_utils.py,sha256=_LMebsTQX2PFxERj0-LoC-XCua23RPw3heu-ckp0Tjo,3049
|
|
55
|
-
api/synchronous/api_core/animal_detection_api/md_utils/sas_blob_utils.py,sha256=GpjHn33N2b-XeBAtU3xhGbTIYcBs4YrXHtbQDmlGFvY,16955
|
|
56
|
-
api/synchronous/api_core/animal_detection_api/md_utils/string_utils.py,sha256=tFTC9TarPFGa7_UkKF0_t6Q2naH9IEsDVM2DOxwkFTQ,1277
|
|
57
|
-
api/synchronous/api_core/animal_detection_api/md_utils/url_utils.py,sha256=aFN7_WvzMJqYHL9t-SGCP2A0-mlYu1-P0HkZwgzUsKg,4598
|
|
58
|
-
api/synchronous/api_core/animal_detection_api/md_utils/write_html_image_list.py,sha256=myXMdOwUERZWp9p2RPu8TcStCsu2X7aJNtcomlhoeqA,7573
|
|
59
|
-
api/synchronous/api_core/animal_detection_api/md_visualization/visualization_utils.py,sha256=Up8hfM_KYyToIUhTv3sSrXGoYl8Hm57NO5t5AHMW3tk,31680
|
|
60
|
-
api/synchronous/api_core/tests/load_test.py,sha256=Xiq2JFv9mnSHehwrm-grZ1Flv9qtkW-zUrTu1cYPry8,3386
|
|
61
|
-
classification/aggregate_classifier_probs.py,sha256=1X5hpC2JRj790jyFEWES2RI1UbcjzhGcslhMJpvMpDM,3488
|
|
62
|
-
classification/analyze_failed_images.py,sha256=WG2ubdkClRo6-v3JqD6dQ7X0aah1L_rYry2BHzirOYE,8463
|
|
63
|
-
classification/cache_batchapi_outputs.py,sha256=EyVG8ynGSX3R7aiz6cN7mDhX7miyMg7FnMXnO2OzScQ,6400
|
|
64
|
-
classification/create_classification_dataset.py,sha256=cBsuL_1KRZXIxBBnPI3xZmgDVMsfBv1_i1ZHR4W6oqE,25578
|
|
65
|
-
classification/crop_detections.py,sha256=Xs_jnwgbfyUPGyOAi_AkYGstQyHzelw1avNcdfV8K2s,20510
|
|
66
|
-
classification/csv_to_json.py,sha256=Di3kl8CRMlM63MqsBauAr0Jn42uTmrTs3eRA4RFkHq8,6088
|
|
67
|
-
classification/detect_and_crop.py,sha256=LHKismSArVy23JeeGOKFGK2JdgcCwSOlsnwACiRCFxk,37158
|
|
68
|
-
classification/evaluate_model.py,sha256=pyKY7ABcuCe4h0yfAquFVDNtnyV45yun-ttAa0etM-E,19378
|
|
69
|
-
classification/identify_mislabeled_candidates.py,sha256=pHB9U_7LFBeLyY1AngIAtbrnma4luJVpwe7BWh9Qhhw,5111
|
|
70
|
-
classification/json_to_azcopy_list.py,sha256=o57wLHJPDrP9OPSY-3x81WI3mmcH1DyIOUh3VQmMwxg,1670
|
|
71
|
-
classification/json_validator.py,sha256=ZizcEPpW1J26p-oGyfvcffBy2voNRKCNXKF8NtxIt5A,26618
|
|
72
|
-
classification/map_classification_categories.py,sha256=2B4K-TdE77VNw8XG1h8X7CuUvw0JSIrALdy6a1FvkXw,10738
|
|
73
|
-
classification/merge_classification_detection_output.py,sha256=2FDTauvkbMZ3putJH837Ux67HTGsCAnGCOXhnnqjt6g,20123
|
|
74
|
-
classification/prepare_classification_script.py,sha256=7xwqws57Fkn0rmH5sADlem9trOJkiriSRwPredeIXho,5952
|
|
75
|
-
classification/prepare_classification_script_mc.py,sha256=IMCsLyGL70cViVTH0eow0sYDM9E81AsBGrctNveXP10,7440
|
|
76
|
-
classification/run_classifier.py,sha256=eBpkZzP7TtrnwOIlc99fTpe1QocmDuERaIw9mXqwAWI,9363
|
|
77
|
-
classification/save_mislabeled.py,sha256=WmOKNXgrvvIkUdehiiWHNiKc5M7q0UM2If0vea0_7K8,3466
|
|
78
|
-
classification/train_classifier.py,sha256=M5hsPP-xdx94t6S5AhjzRrmNYcQAUMnUBL6Tkts6-F0,32329
|
|
79
|
-
classification/train_classifier_tf.py,sha256=LhTteMic5CP5Zp3Q4tdh--ySa2rGwPB2Lg-IlrO04eI,28096
|
|
80
|
-
classification/train_utils.py,sha256=o12OxP8ozli3e9DmOvzrjRDX278S3Ik5oz5EKD9mkIg,11355
|
|
81
|
-
classification/efficientnet/__init__.py,sha256=e-jfknjzCc5a0CSW-TaZ2vi0SPU1OMIsayoz2s94QAo,182
|
|
82
|
-
classification/efficientnet/model.py,sha256=qJHWV9-rYKa4E_TIee5N_OjRhqDdM-icPpoMap3Q5HM,17040
|
|
83
|
-
classification/efficientnet/utils.py,sha256=TF5S2cn2lvlCO2dFhdFPdzjbBBs-SyZGZmEx_dsJMbo,24846
|
|
84
|
-
data_management/cct_json_to_filename_json.py,sha256=AxYeOzZHkHF1UxHCUBtofXNKVdUK-5xTfZp3_iE7hFc,2416
|
|
85
|
-
data_management/cct_json_utils.py,sha256=JX5pJh5QLyKDhcXheUYgbRSd99uB9Ui-EfsRZ_Fhw_I,12570
|
|
86
|
-
data_management/cct_to_csv.py,sha256=urIL8IUByhKZ4FLLa9TKlzT6mu8upLzAPN1WNnDZdIY,3859
|
|
87
|
-
data_management/cct_to_md.py,sha256=0QtqUdUkrema2BSNTeJqHYkDuwOLc7tOQwq1KxTbtPE,4485
|
|
88
|
-
data_management/cct_to_wi.py,sha256=nJKUhLXcZXKE5tAR9UxbqCjeikfaABfB746wpv-1BmI,8336
|
|
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
|
|
95
|
-
data_management/read_exif.py,sha256=HGCp5gvD8MHQ0xGGTX2_PD5JHFTdMtqjZ8ql2pt5Fn0,19036
|
|
96
|
-
data_management/remove_exif.py,sha256=_WDrKfRwK0UWCkj4SiLutGCd7-WRaKYoTgLfBWPDhGU,1555
|
|
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
|
|
100
|
-
data_management/annotations/annotation_constants.py,sha256=P2CZCbAE0ImLLfaNRb1SMlP3q1fULWAIjgrYOrF9L0g,1566
|
|
101
|
-
data_management/databases/add_width_and_height_to_db.py,sha256=71mOEK3xo9gbxK1TVZzBA9nNi-1ElmBZbIPKrUm9XG0,619
|
|
102
|
-
data_management/databases/combine_coco_camera_traps_files.py,sha256=cwu_REQXdHWfVLtCvTvFEIvM7z8GwHVoawVuHcWv2aw,6888
|
|
103
|
-
data_management/databases/integrity_check_json_db.py,sha256=aQe36eEnhxHFpm9XGmFXCf4jsTvfXuBWMfKdIKKN4tU,14535
|
|
104
|
-
data_management/databases/remove_corrupted_images_from_db.py,sha256=Dod8UQDFveAUJlrH9Svcp_HezdILRHp74TbAl3YGf84,6138
|
|
105
|
-
data_management/databases/subset_json_db.py,sha256=UeVn3jlcpEw-K9E-QyRwxdzl7zaV80iv_u4v6kHUd_E,2749
|
|
106
|
-
data_management/importers/add_nacti_sizes.py,sha256=qsBHPyJ7MPzl0vgJX5iErZxWkTJ6QRcyLJ8GM2YBu2U,1172
|
|
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
|
|
113
|
-
data_management/importers/cacophony-thermal-importer.py,sha256=0Y21Hx8Y4dMvpUpbKKMDYb0r-AqFD2k8N0Bf9q75geY,28621
|
|
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
|
|
119
|
-
data_management/importers/filenames_to_json.py,sha256=wzleV-02pwNHKAVvqhkAwahIJ6La_-OCPEXTOg64ezM,10526
|
|
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
|
|
124
|
-
data_management/importers/mcgill_to_json.py,sha256=ZxsNW9qFi6Kyu8SJ0BB5uK7AMuBW92QOOKXHPbIgPwY,6718
|
|
125
|
-
data_management/importers/missouri_to_json.py,sha256=y9lbLaD8bGM4m9iqGHIicyZOByeJGfZOF51RikHMSFU,14840
|
|
126
|
-
data_management/importers/nacti_fieldname_adjustments.py,sha256=57PyfOft2Ws-1AcG4_9mzOcB3uW4IFxaZ3z0LsItUUU,2045
|
|
127
|
-
data_management/importers/noaa_seals_2019.py,sha256=wYcjhARv4IUJgawXcAnwIAOGZq5GORG8ElE_7JZSVCk,5145
|
|
128
|
-
data_management/importers/pc_to_json.py,sha256=9Nin7R47aaE5bjXjvq7A2trv2vFdJVYzhLHwLFji5Tg,10718
|
|
129
|
-
data_management/importers/plot_wni_giraffes.py,sha256=V_kAzbYjtXEBUCdSwSGsEEemLN9aVyZuKhoSZQEvkCI,3787
|
|
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
|
|
136
|
-
data_management/importers/snapshot_safari_importer_reprise.py,sha256=yRzgIYvcvMnlNL0sWv3ZUCNzo2e5_sy3k4DC18xh0Mc,22996
|
|
137
|
-
data_management/importers/snapshot_serengeti_lila.py,sha256=mZ_hR7yHfeZFkLtuAO1U7kWRq3_wDtBE28-qXUZmBzo,33854
|
|
138
|
-
data_management/importers/sulross_get_exif.py,sha256=nc9MwF_5_Nlsv7f0W74G71G-MF5EZDZIvLqDeKvcwWc,2088
|
|
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
|
|
145
|
-
data_management/importers/eMammal/copy_and_unzip_emammal.py,sha256=gVB0drYUeCghWXFDpaJkCL0qdmFjMW75YAEEhFe38js,6080
|
|
146
|
-
data_management/importers/eMammal/eMammal_helpers.py,sha256=Sv6PBAMDdlgwiek6Q3R6Rjio2RjtA-JpfgBr_Fmr9kA,6838
|
|
147
|
-
data_management/importers/eMammal/make_eMammal_json.py,sha256=6C_-6Qk-Xhz_87DEPHA-txw90AvXrybJy1PbQXQbqwo,6987
|
|
148
|
-
data_management/importers/snapshotserengeti/make_full_SS_json.py,sha256=khE3W0pO3Uq-UCfrLW_rpzWqjLll2JoBc360XeAuUGc,4126
|
|
149
|
-
data_management/importers/snapshotserengeti/make_per_season_SS_json.py,sha256=sAwvcR2siwblgY3LfTsbH4mXOXvJZCA246QIsQWuQBA,4316
|
|
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
|
|
158
|
-
data_management/lila/get_lila_image_counts.py,sha256=r5p2wPL5vuKKO8DWia3Tll-EZZWFNUvax6ljaYtrKsk,3625
|
|
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
|
|
167
|
-
detection/tf_detector.py,sha256=xOO8kzd-Um2X_sAZyop524LM53nipv5pNx8YueGTJrc,6760
|
|
168
|
-
detection/video_utils.py,sha256=70dx6_D9zQhAHatzHA0Bo3LreOJe98A859O243dFIvs,19425
|
|
169
|
-
detection/detector_training/copy_checkpoints.py,sha256=t2c3Q4Pf82tAp_OjSG-veIjRPrX0tJYi-bSQmGL2m4c,1091
|
|
170
|
-
detection/detector_training/model_main_tf2.py,sha256=YwNsZ7hkIFaEuwKU0rHG_VyqiR_0E01BbdlD0Yx4Smo,4936
|
|
171
|
-
md_utils/azure_utils.py,sha256=SVoQNSknYlBcpZeGrH2v3Qgm5kXxBrqM5Sx2L_Lax-I,6243
|
|
172
|
-
md_utils/ct_utils.py,sha256=CbuSL-XqI5jU9ShxEgnvIKqQF_BzbDPSTULPBmEVAnU,12908
|
|
173
|
-
md_utils/directory_listing.py,sha256=dgxMczSOEH352YXdWRuNo_ujsonRrPJXFeuS7ocpe9k,9615
|
|
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
|
|
177
|
-
md_utils/sas_blob_utils.py,sha256=GpjHn33N2b-XeBAtU3xhGbTIYcBs4YrXHtbQDmlGFvY,16955
|
|
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
|
|
183
|
-
md_visualization/render_images_with_thumbnails.py,sha256=XJcL5qxu5pe2LQ4MqnD-O6dM_cPxGGNoqk5U_rZzFUQ,10391
|
|
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
|
|
187
|
-
md_visualization/visualize_megadb.py,sha256=ZHFMgQv-zjXwvyT6gEfLe2BzodvBNfQYEh0b6P_59TE,6188
|
|
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
|
|
192
|
-
taxonomy_mapping/retrieve_sample_image.py,sha256=BySUy69DeGwPiIs9Ws5vIILJCTXeVImE5AVoawOiECM,1992
|
|
193
|
-
taxonomy_mapping/simple_image_download.py,sha256=dXXVhhaR_bI-Elmk4Tmjt2ftdYzHbkuJCTzIMOJfLKs,6874
|
|
194
|
-
taxonomy_mapping/species_lookup.py,sha256=oRqaUbiH_xULH7z5mkrtaFhacxlyM8KT-V-c4FnNq4w,28303
|
|
195
|
-
taxonomy_mapping/taxonomy_csv_checker.py,sha256=xmV2SBOfQEuZBMGmXyUzbuNxvd_oXKysXkxU6-IhKJg,4874
|
|
196
|
-
taxonomy_mapping/taxonomy_graph.py,sha256=ZDm2enGanBlm8KXWvCndqmeerOp9LREaetSl-Lxy07s,12361
|
|
197
|
-
taxonomy_mapping/validate_lila_category_mappings.py,sha256=CApYVWIZ8TTJ3vvQTgfjIvWDGHpPo-Zn9jqJFaw3DNw,2314
|
|
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,,
|
|
File without changes
|