megadetector 5.0.29__py3-none-any.whl → 10.0.1__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 (95) hide show
  1. megadetector/classification/efficientnet/model.py +8 -8
  2. megadetector/classification/efficientnet/utils.py +6 -5
  3. megadetector/classification/prepare_classification_script_mc.py +3 -3
  4. megadetector/data_management/annotations/annotation_constants.py +0 -1
  5. megadetector/data_management/camtrap_dp_to_coco.py +34 -1
  6. megadetector/data_management/cct_json_utils.py +2 -2
  7. megadetector/data_management/coco_to_yolo.py +22 -5
  8. megadetector/data_management/databases/add_width_and_height_to_db.py +85 -12
  9. megadetector/data_management/databases/combine_coco_camera_traps_files.py +2 -2
  10. megadetector/data_management/databases/integrity_check_json_db.py +29 -15
  11. megadetector/data_management/generate_crops_from_cct.py +50 -1
  12. megadetector/data_management/labelme_to_coco.py +4 -2
  13. megadetector/data_management/labelme_to_yolo.py +82 -2
  14. megadetector/data_management/lila/generate_lila_per_image_labels.py +276 -18
  15. megadetector/data_management/lila/get_lila_annotation_counts.py +5 -3
  16. megadetector/data_management/lila/lila_common.py +3 -0
  17. megadetector/data_management/lila/test_lila_metadata_urls.py +15 -5
  18. megadetector/data_management/mewc_to_md.py +5 -0
  19. megadetector/data_management/ocr_tools.py +4 -3
  20. megadetector/data_management/read_exif.py +20 -5
  21. megadetector/data_management/remap_coco_categories.py +66 -4
  22. megadetector/data_management/remove_exif.py +50 -1
  23. megadetector/data_management/rename_images.py +3 -3
  24. megadetector/data_management/resize_coco_dataset.py +563 -95
  25. megadetector/data_management/yolo_output_to_md_output.py +131 -2
  26. megadetector/data_management/yolo_to_coco.py +140 -5
  27. megadetector/detection/change_detection.py +4 -3
  28. megadetector/detection/pytorch_detector.py +60 -22
  29. megadetector/detection/run_detector.py +225 -25
  30. megadetector/detection/run_detector_batch.py +42 -16
  31. megadetector/detection/run_inference_with_yolov5_val.py +12 -2
  32. megadetector/detection/run_tiled_inference.py +1 -0
  33. megadetector/detection/video_utils.py +53 -24
  34. megadetector/postprocessing/add_max_conf.py +4 -0
  35. megadetector/postprocessing/categorize_detections_by_size.py +1 -1
  36. megadetector/postprocessing/classification_postprocessing.py +55 -20
  37. megadetector/postprocessing/combine_batch_outputs.py +3 -2
  38. megadetector/postprocessing/compare_batch_results.py +64 -10
  39. megadetector/postprocessing/convert_output_format.py +12 -8
  40. megadetector/postprocessing/create_crop_folder.py +137 -10
  41. megadetector/postprocessing/load_api_results.py +26 -8
  42. megadetector/postprocessing/md_to_coco.py +4 -4
  43. megadetector/postprocessing/md_to_labelme.py +18 -7
  44. megadetector/postprocessing/merge_detections.py +5 -0
  45. megadetector/postprocessing/postprocess_batch_results.py +6 -3
  46. megadetector/postprocessing/remap_detection_categories.py +55 -2
  47. megadetector/postprocessing/render_detection_confusion_matrix.py +9 -6
  48. megadetector/postprocessing/repeat_detection_elimination/repeat_detections_core.py +2 -2
  49. megadetector/taxonomy_mapping/map_new_lila_datasets.py +3 -4
  50. megadetector/taxonomy_mapping/prepare_lila_taxonomy_release.py +40 -19
  51. megadetector/taxonomy_mapping/preview_lila_taxonomy.py +1 -1
  52. megadetector/taxonomy_mapping/species_lookup.py +123 -41
  53. megadetector/utils/ct_utils.py +133 -113
  54. megadetector/utils/md_tests.py +93 -13
  55. megadetector/utils/path_utils.py +137 -107
  56. megadetector/utils/split_locations_into_train_val.py +2 -2
  57. megadetector/utils/string_utils.py +7 -7
  58. megadetector/utils/url_utils.py +81 -58
  59. megadetector/utils/wi_utils.py +46 -17
  60. megadetector/visualization/plot_utils.py +13 -9
  61. megadetector/visualization/render_images_with_thumbnails.py +2 -1
  62. megadetector/visualization/visualization_utils.py +94 -46
  63. megadetector/visualization/visualize_db.py +36 -9
  64. megadetector/visualization/visualize_detector_output.py +4 -4
  65. {megadetector-5.0.29.dist-info → megadetector-10.0.1.dist-info}/METADATA +135 -135
  66. megadetector-10.0.1.dist-info/RECORD +139 -0
  67. {megadetector-5.0.29.dist-info → megadetector-10.0.1.dist-info}/licenses/LICENSE +0 -0
  68. {megadetector-5.0.29.dist-info → megadetector-10.0.1.dist-info}/top_level.txt +0 -0
  69. megadetector/api/batch_processing/api_core/__init__.py +0 -0
  70. megadetector/api/batch_processing/api_core/batch_service/__init__.py +0 -0
  71. megadetector/api/batch_processing/api_core/batch_service/score.py +0 -438
  72. megadetector/api/batch_processing/api_core/server.py +0 -294
  73. megadetector/api/batch_processing/api_core/server_api_config.py +0 -97
  74. megadetector/api/batch_processing/api_core/server_app_config.py +0 -55
  75. megadetector/api/batch_processing/api_core/server_batch_job_manager.py +0 -220
  76. megadetector/api/batch_processing/api_core/server_job_status_table.py +0 -149
  77. megadetector/api/batch_processing/api_core/server_orchestration.py +0 -360
  78. megadetector/api/batch_processing/api_core/server_utils.py +0 -88
  79. megadetector/api/batch_processing/api_core_support/__init__.py +0 -0
  80. megadetector/api/batch_processing/api_core_support/aggregate_results_manually.py +0 -46
  81. megadetector/api/batch_processing/api_support/__init__.py +0 -0
  82. megadetector/api/batch_processing/api_support/summarize_daily_activity.py +0 -152
  83. megadetector/api/batch_processing/data_preparation/__init__.py +0 -0
  84. megadetector/api/synchronous/__init__.py +0 -0
  85. megadetector/api/synchronous/api_core/animal_detection_api/__init__.py +0 -0
  86. megadetector/api/synchronous/api_core/animal_detection_api/api_backend.py +0 -151
  87. megadetector/api/synchronous/api_core/animal_detection_api/api_frontend.py +0 -263
  88. megadetector/api/synchronous/api_core/animal_detection_api/config.py +0 -35
  89. megadetector/api/synchronous/api_core/tests/__init__.py +0 -0
  90. megadetector/api/synchronous/api_core/tests/load_test.py +0 -109
  91. megadetector/utils/azure_utils.py +0 -178
  92. megadetector/utils/sas_blob_utils.py +0 -513
  93. megadetector-5.0.29.dist-info/RECORD +0 -163
  94. /megadetector/{api/batch_processing/__init__.py → __init__.py} +0 -0
  95. {megadetector-5.0.29.dist-info → megadetector-10.0.1.dist-info}/WHEEL +0 -0
@@ -1,513 +0,0 @@
1
- """
2
-
3
- sas_blob_utils.py
4
-
5
- This module contains helper functions for dealing with Shared Access Signatures
6
- (SAS) tokens for Azure Blob Storage.
7
-
8
- The default Azure Storage SAS URI format is:
9
-
10
- https://<account>.blob.core.windows.net/<container>/<blob>?<sas_token>
11
-
12
- This module assumes azure-storage-blob version 12.5.
13
-
14
- Documentation for Azure Blob Storage:
15
- docs.microsoft.com/en-us/azure/developer/python/sdk/storage/storage-blob-readme
16
-
17
- Documentation for SAS:
18
- docs.microsoft.com/en-us/azure/storage/common/storage-sas-overview
19
-
20
- """
21
-
22
- #%% Imports
23
-
24
- from datetime import datetime, timedelta
25
- import io
26
- import re
27
- from typing import (Any, AnyStr, IO, Iterable, Optional, Union)
28
- from urllib import parse
29
- import uuid
30
-
31
- from tqdm import tqdm
32
-
33
- from azure.storage.blob import ( # type: ignore
34
- BlobClient,
35
- BlobProperties,
36
- ContainerClient,
37
- ContainerSasPermissions,
38
- generate_container_sas)
39
-
40
-
41
- #%% URI management
42
-
43
- def build_azure_storage_uri(
44
- account: str,
45
- container: Optional[str] = None,
46
- blob: Optional[str] = None,
47
- sas_token: Optional[str] = None,
48
- account_url_template: str = 'https://{account}.blob.core.windows.net'
49
- ) -> str:
50
- """
51
- Build an Azure SAS URL from path name components.
52
-
53
- Args:
54
- account: str, name of Azure Storage account
55
- container: optional str, name of Azure Blob Storage container
56
- blob: optional str, name of blob, not URL-escaped
57
- if blob is given, must also specify container
58
- sas_token: optional str, Shared Access Signature (SAS). Leading ?
59
- is removed if present.
60
- account_url_template: str, Python 3 string formatting template,
61
- contains '{account}' placeholder, defaults to default Azure
62
- Storage URL format. Set this value if using Azurite Azure Storage
63
- emulator.
64
-
65
- Returns:
66
- str, Azure storage URI
67
- """
68
-
69
- uri = account_url_template.format(account=account)
70
- if container is not None:
71
- uri = f'{uri}/{container}'
72
- if blob is not None:
73
- assert container is not None
74
- blob = parse.quote(blob)
75
- uri = f'{uri}/{blob}'
76
- if sas_token is not None:
77
- if sas_token[0] == '?':
78
- sas_token = sas_token[1:]
79
- uri = f'{uri}?{sas_token}'
80
- return uri
81
-
82
-
83
- def _get_resource_reference(prefix: str) -> str:
84
- return '{}{}'.format(prefix, str(uuid.uuid4()).replace('-', ''))
85
-
86
-
87
- def get_client_from_uri(container_uri: str) -> ContainerClient:
88
- """
89
- Gets a ContainerClient for the given container URI.
90
- """
91
-
92
- return ContainerClient.from_container_url(container_uri)
93
-
94
-
95
- def get_account_from_uri(sas_uri: str) -> str:
96
- """
97
- Assumes that sas_uri points to Azure Blob Storage account hosted at
98
- a default Azure URI. Does not work for locally-emulated Azure Storage
99
- or Azure Storage hosted at custom endpoints.
100
- """
101
-
102
- url_parts = parse.urlsplit(sas_uri)
103
- loc = url_parts.netloc # "<account>.blob.core.windows.net"
104
- return loc.split('.')[0]
105
-
106
-
107
- def is_container_uri(sas_uri: str) -> bool:
108
- """
109
- Returns True if the signed resource field in the URI "sr" is a container "c"
110
- or a directory "d"
111
- """
112
-
113
- data = get_all_query_parts(sas_uri)
114
- if 'sr' not in data:
115
- return False
116
-
117
- if 'c' in data['sr'] or 'd' in data['sr']:
118
- return True
119
- else:
120
- return False
121
-
122
- def is_blob_uri(sas_uri: str) -> bool:
123
- """
124
- Returns True if the signed resource field in the URI "sr" is a blob "b".
125
- """
126
-
127
- data = get_all_query_parts(sas_uri)
128
- if 'sr' not in data:
129
- return False
130
-
131
- if 'b' in data['sr']:
132
- return True
133
- else:
134
- return False
135
-
136
-
137
- def get_container_from_uri(sas_uri: str, unquote: bool = True) -> str:
138
- """
139
- Gets the container name from a Azure Blob Storage URI.
140
-
141
- Assumes that sas_uri points to Azure Blob Storage account hosted at
142
- a default Azure URI. Does not work for locally-emulated Azure Storage
143
- or Azure Storage hosted at custom endpoints.
144
-
145
- Args:
146
- sas_uri: str, Azure blob storage URI, may include SAS token
147
- unquote: bool, whether to replace any %xx escapes by their
148
- single-character equivalent, default True
149
-
150
- Returns:
151
- str, container name
152
- """
153
-
154
- url_parts = parse.urlsplit(sas_uri)
155
- raw_path = url_parts.path.lstrip('/') # remove leading "/" from path
156
- container = raw_path.split('/')[0]
157
- if container == '':
158
- raise ValueError('Given sas_uri does not include a container.')
159
- if unquote:
160
- container = parse.unquote(container)
161
- return container
162
-
163
-
164
- def get_blob_from_uri(sas_uri: str, unquote: bool = True) -> str:
165
- """
166
- Return the path to the blob from the root container if this sas_uri
167
- is for an individual blob; otherwise returns None.
168
-
169
- Args:
170
- sas_uri: str, Azure blob storage URI, may include SAS token
171
- unquote: bool, whether to replace any %xx escapes by their
172
- single-character equivalent, default True
173
-
174
- Returns: str, blob name (path to the blob from the root container)
175
-
176
- Raises: ValueError, if sas_uri does not include a blob name
177
- """
178
-
179
- # Get the entire path with all slashes after the container
180
- url_parts = parse.urlsplit(sas_uri)
181
- raw_path = url_parts.path.lstrip('/') # remove leading "/" from path
182
- parts = raw_path.split('/', maxsplit=1)
183
- if len(parts) < 2 or parts[1] == '':
184
- raise ValueError('Given sas_uri does not include a blob name')
185
-
186
- blob = parts[1] # first item is an empty string
187
- if unquote:
188
- blob = parse.unquote(blob)
189
- return blob
190
-
191
-
192
- def get_sas_token_from_uri(sas_uri: str) -> Optional[str]:
193
- """
194
- Get the query part of the SAS token that contains permissions, access
195
- times and signature.
196
-
197
- Args:
198
- sas_uri: str, Azure blob storage SAS token
199
-
200
- Returns: str, query part of the SAS token (without leading '?'),
201
- or None if URI has no token.
202
- """
203
-
204
- url_parts = parse.urlsplit(sas_uri)
205
- sas_token = url_parts.query or None # None if query is empty string
206
- return sas_token
207
-
208
-
209
- def get_resource_type_from_uri(sas_uri: str) -> Optional[str]:
210
- """
211
- Get the resource type pointed to by this SAS token.
212
-
213
- Args:
214
- sas_uri: str, Azure blob storage URI with SAS token
215
-
216
- Returns: A string (either 'blob' or 'container') or None.
217
- """
218
-
219
- url_parts = parse.urlsplit(sas_uri)
220
- data = parse.parse_qs(url_parts.query)
221
- if 'sr' in data:
222
- types = data['sr']
223
- if 'b' in types:
224
- return 'blob'
225
- elif 'c' in types:
226
- return 'container'
227
- return None
228
-
229
-
230
- def get_endpoint_suffix(sas_uri):
231
- """
232
- Gets the endpoint at which the blob storage account is served.
233
-
234
- Args:
235
- sas_uri: str, Azure blob storage URI with SAS token
236
-
237
- Returns:
238
- str: usually 'core.windows.net' or 'core.chinacloudapi.cn', to
239
- use for the `endpoint` argument in various blob storage SDK functions.
240
- """
241
-
242
- url_parts = parse.urlsplit(sas_uri)
243
- suffix = url_parts.netloc.split('.blob.')[1].split('/')[0]
244
- return suffix
245
-
246
-
247
- def get_permissions_from_uri(sas_uri: str) -> set[str]:
248
- """
249
- Get the permissions given by this SAS token.
250
-
251
- Args:
252
- sas_uri: str, Azure blob storage URI with SAS token
253
-
254
- Returns:
255
- set: a set containing some of 'read', 'write', 'delete' and 'list'.
256
- Empty set returned if no permission specified in sas_uri.
257
- """
258
-
259
- data = get_all_query_parts(sas_uri)
260
- permissions_set = set()
261
- if 'sp' in data:
262
- permissions = data['sp'][0]
263
- if 'r' in permissions:
264
- permissions_set.add('read')
265
- if 'w' in permissions:
266
- permissions_set.add('write')
267
- if 'd' in permissions:
268
- permissions_set.add('delete')
269
- if 'l' in permissions:
270
- permissions_set.add('list')
271
- return permissions_set
272
-
273
-
274
- def get_all_query_parts(sas_uri: str) -> dict[str, Any]:
275
- """
276
- Gets the SAS token parameters.
277
- """
278
-
279
- url_parts = parse.urlsplit(sas_uri)
280
- return parse.parse_qs(url_parts.query)
281
-
282
-
283
- #%% Blob
284
-
285
- def check_blob_exists(sas_uri: str, blob_name: Optional[str] = None) -> bool:
286
- """
287
- Checks whether a given URI points to an actual blob.
288
-
289
- Assumes that sas_uri points to Azure Blob Storage account hosted at
290
- a default Azure URI. Does not work for locally-emulated Azure Storage
291
- or Azure Storage hosted at custom endpoints. In these cases, create a
292
- BlobClient using the default constructor, instead of from_blob_url(),
293
- and use the BlobClient.exists() method directly.
294
-
295
- Args:
296
- sas_uri: str, URI to a container or a blob
297
- if blob_name is given, sas_uri is treated as a container URI
298
- otherwise, sas_uri is treated as a blob URI
299
- blob_name: optional str, name of blob, not URL-escaped
300
- must be given if sas_uri is a URI to a container
301
-
302
- Returns:
303
- bool: whether the sas_uri given points to an existing blob
304
- """
305
-
306
- if blob_name is not None:
307
- sas_uri = build_blob_uri(
308
- container_uri=sas_uri, blob_name=blob_name)
309
-
310
- with BlobClient.from_blob_url(sas_uri) as blob_client:
311
- return blob_client.exists()
312
-
313
-
314
- def upload_blob(container_uri: str, blob_name: str,
315
- data: Union[Iterable[AnyStr], IO[AnyStr]],
316
- overwrite: bool = False) -> str:
317
- """
318
- Creates a new blob of the given name from an IO stream.
319
-
320
- Args:
321
- container_uri: str, URI to a container, may include SAS token
322
- blob_name: str, name of blob to upload
323
- data: str, bytes, or IO stream
324
- if str, assumes utf-8 encoding
325
- overwrite: bool, whether to overwrite existing blob (if any)
326
-
327
- Returns:
328
- str: URL to blob, includes SAS token if container_uri has SAS token
329
- """
330
-
331
- account_url, container, sas_token = split_container_uri(container_uri)
332
- with BlobClient(account_url=account_url, container_name=container,
333
- blob_name=blob_name, credential=sas_token) as blob_client:
334
- blob_client.upload_blob(data, overwrite=overwrite)
335
- return blob_client.url
336
-
337
-
338
- def download_blob_to_stream(sas_uri: str) -> tuple[io.BytesIO, BlobProperties]:
339
- """
340
- Downloads a blob to an IO stream.
341
-
342
- Args:
343
- sas_uri: str, URI to a blob
344
-
345
- Returns:
346
- output_stream: io.BytesIO, remember to close it when finished using
347
- blob_properties: BlobProperties
348
- """
349
-
350
- with BlobClient.from_blob_url(sas_uri) as blob_client:
351
- output_stream = io.BytesIO()
352
- blob_client.download_blob().readinto(output_stream)
353
- output_stream.seek(0)
354
- blob_properties = blob_client.get_blob_properties()
355
- return output_stream, blob_properties
356
-
357
-
358
- def build_blob_uri(container_uri: str, blob_name: str) -> str:
359
- """
360
- Args:
361
- container_uri: str, URI to blob storage container
362
- <account_url>/<container>?<sas_token>
363
- blob_name: str, name of blob, not URL-escaped
364
-
365
- Returns:
366
- str: blob URI <account_url>/<container>/<blob_name>?<sas_token>,
367
- <blob_name> is URL-escaped
368
- """
369
-
370
- account_url, container, sas_token = split_container_uri(container_uri)
371
-
372
- blob_name = parse.quote(blob_name)
373
- blob_uri = f'{account_url}/{container}/{blob_name}'
374
- if sas_token is not None:
375
- blob_uri += f'?{sas_token}'
376
- return blob_uri
377
-
378
-
379
- #%% Container
380
-
381
- def list_blobs_in_container(
382
- container_uri: str,
383
- blob_prefix: Optional[str] = None,
384
- blob_suffix: Optional[Union[str, tuple[str]]] = None,
385
- rsearch: Optional[str] = None,
386
- limit: Optional[int] = None,
387
- verbose: Optional[bool] = True
388
- ) -> list[str]:
389
- """
390
- Get a sorted list of blob names in this container.
391
-
392
- Args:
393
- container_uri: str, URI to a container, may include SAS token
394
- blob_prefix: optional str, returned results will only contain blob names
395
- to with this prefix
396
- blob_suffix: optional str or tuple of str, returned results will only
397
- contain blob names with this/these suffix(es). The blob names will
398
- be lowercased first before comparing with the suffix(es).
399
- rsearch: optional str, returned results will only contain blob names
400
- that match this regex. Can also be a list of regexes, in which case
401
- blobs matching *any* of the regex's will be returned.
402
- limit: int, maximum # of blob names to list
403
- if None, then returns all blob names
404
-
405
- Returns:
406
- list: sorted list of blob names, of length limit or shorter.
407
- """
408
-
409
- if verbose:
410
- print('Listing blobs')
411
-
412
- if (get_sas_token_from_uri(container_uri) is not None
413
- and get_resource_type_from_uri(container_uri) != 'container'):
414
- raise ValueError('The SAS token provided is not for a container.')
415
-
416
- if blob_prefix is not None and not isinstance(blob_prefix, str):
417
- raise ValueError('blob_prefix must be a str.')
418
-
419
- if (blob_suffix is not None
420
- and not isinstance(blob_suffix, str)
421
- and not isinstance(blob_suffix, tuple)):
422
- raise ValueError('blob_suffix must be a str or a tuple of strings')
423
-
424
- list_blobs = []
425
- with get_client_from_uri(container_uri) as container_client:
426
- generator = container_client.list_blobs(
427
- name_starts_with=blob_prefix)
428
-
429
- if blob_suffix is None and rsearch is None:
430
- list_blobs = [blob.name for blob in tqdm(generator,disable=(not verbose))]
431
- i = len(list_blobs)
432
- else:
433
- i = 0
434
- for blob in tqdm(generator,disable=(not verbose)):
435
- i += 1
436
- suffix_ok = (blob_suffix is None
437
- or blob.name.lower().endswith(blob_suffix))
438
- regex_ok = False
439
- if rsearch is None:
440
- regex_ok = True
441
- else:
442
- if not isinstance(rsearch, list):
443
- rsearch = [rsearch]
444
- # Check whether this blob name matches *any* of our regex's
445
- for expr in rsearch:
446
- if re.search(expr, blob.name) is not None:
447
- regex_ok = True
448
- break
449
- if suffix_ok and regex_ok:
450
- list_blobs.append(blob.name)
451
- if limit is not None and len(list_blobs) == limit:
452
- break
453
-
454
- if verbose:
455
- print(f'Enumerated {len(list_blobs)} matching blobs out of {i} total')
456
-
457
- return sorted(list_blobs) # sort for determinism
458
-
459
-
460
- def generate_writable_container_sas(account_name: str,
461
- account_key: str,
462
- container_name: str,
463
- access_duration_hrs: float,
464
- account_url: Optional[str] = None
465
- ) -> str:
466
- """
467
- Creates a container and returns a SAS URI with read/write/list
468
- permissions.
469
-
470
- Args:
471
- account_name: str, name of blob storage account
472
- account_key: str, account SAS token or account shared access key
473
- container_name: str, name of container to create, must not match an
474
- existing container in the given storage account
475
- access_duration_hrs: float
476
- account_url: str, optional, defaults to default Azure Storage URL
477
-
478
- Returns:
479
- str: URL to newly created container
480
- """
481
-
482
- if account_url is None:
483
- account_url = build_azure_storage_uri(account=account_name)
484
- with ContainerClient(account_url=account_url,
485
- container_name=container_name,
486
- credential=account_key) as container_client:
487
- container_client.create_container()
488
-
489
- permissions = ContainerSasPermissions(read=True, write=True, list=True)
490
- container_sas_token = generate_container_sas(
491
- account_name=account_name,
492
- container_name=container_name,
493
- account_key=account_key,
494
- permission=permissions,
495
- expiry=datetime.utcnow() + timedelta(hours=access_duration_hrs))
496
-
497
- return f'{account_url}/{container_name}?{container_sas_token}'
498
-
499
-
500
- def split_container_uri(container_uri: str) -> tuple[str, str, Optional[str]]:
501
- """
502
- Args:
503
- container_uri: str, URI to blob storage container
504
- <account_url>/<container>?<sas_token>
505
-
506
- Returns:
507
- tuple: account_url, container_name, sas_token
508
- """
509
-
510
- account_container = container_uri.split('?', maxsplit=1)[0]
511
- account_url, container_name = account_container.rsplit('/', maxsplit=1)
512
- sas_token = get_sas_token_from_uri(container_uri)
513
- return account_url, container_name, sas_token
@@ -1,163 +0,0 @@
1
- megadetector/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- megadetector/api/batch_processing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- megadetector/api/batch_processing/api_core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- megadetector/api/batch_processing/api_core/server.py,sha256=-g6hfaSp7dUaT-2-bUSXkLE-MJnig3gZ3W_GbNkoAE0,11618
5
- megadetector/api/batch_processing/api_core/server_api_config.py,sha256=AjmLStXYoMMwxZJSephYROEprcSkG5RPlOr7Zho9xLk,3277
6
- megadetector/api/batch_processing/api_core/server_app_config.py,sha256=tQCFsFv0wJCegHfnu-Za3okdXwEd4U522hiM0YGNkMY,1860
7
- megadetector/api/batch_processing/api_core/server_batch_job_manager.py,sha256=K7fMFBJA8Z1SkA4eBM-nymcq7VQjwZ6ZRaNnNKFlat8,10324
8
- megadetector/api/batch_processing/api_core/server_job_status_table.py,sha256=P621Df7RTTKqW8VlxnCqkBtIO4Ko5bSS6WbU0ETzPGY,5984
9
- megadetector/api/batch_processing/api_core/server_orchestration.py,sha256=LYHABzhOvP0NrM1VIjI6Vwb95YZ5xjQ52mUJW8oIOQ0,17003
10
- megadetector/api/batch_processing/api_core/server_utils.py,sha256=uJvnW50lSE_LnRtEyrFI2dbVSecmGudaRhUH6NcAx1M,3100
11
- megadetector/api/batch_processing/api_core/batch_service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- megadetector/api/batch_processing/api_core/batch_service/score.py,sha256=05SsMIGP4I683jZq94BRUW_vkrq0Y9ekLGU6Dvt9M_Q,17339
13
- megadetector/api/batch_processing/api_core_support/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- megadetector/api/batch_processing/api_core_support/aggregate_results_manually.py,sha256=8Z9WawOczjP0JwjFBKXTF_5aFgsEU2OYaKE7CkYf-x8,2281
15
- megadetector/api/batch_processing/api_support/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- megadetector/api/batch_processing/api_support/summarize_daily_activity.py,sha256=4XVvKI9Npes_G2ZWNiSTA0wo0rLPZ8L-Bu6UF5GaxaI,5389
17
- megadetector/api/batch_processing/data_preparation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- megadetector/api/batch_processing/integration/digiKam/setup.py,sha256=7P1X3JYrBDXmLUeLRrzxNfDkL5lo-pY8nXsp9Cz8rOI,203
19
- megadetector/api/batch_processing/integration/digiKam/xmp_integration.py,sha256=dbib8WseSrNpLnSTKvnmEseii5ls5WAi1C612ovmwps,17796
20
- megadetector/api/batch_processing/integration/eMammal/test_scripts/config_template.py,sha256=UnvrgaFRBu59MuVUJa2WpG8ebcOJWcNeZEx6GWuYLzc,73
21
- megadetector/api/batch_processing/integration/eMammal/test_scripts/push_annotations_to_emammal.py,sha256=86MluxfHY5JsslX0OWgmVUyuPP6DMDE-o6kYKdlTtMI,3583
22
- megadetector/api/batch_processing/integration/eMammal/test_scripts/select_images_for_testing.py,sha256=z8DkkV9VU69HFPEwwTVDQI9BSJa72TMoqwRt6ZiilNo,1376
23
- megadetector/api/synchronous/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- megadetector/api/synchronous/api_core/animal_detection_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- megadetector/api/synchronous/api_core/animal_detection_api/api_backend.py,sha256=g4HvPJ1bynLPzL79yta0GtWunxb8RjCADF56_YbYCsA,4955
26
- megadetector/api/synchronous/api_core/animal_detection_api/api_frontend.py,sha256=f16J7OBN87Tv0vVIIpXlyyVDeT6qYXDe5Kpr5XGqhdQ,10233
27
- megadetector/api/synchronous/api_core/animal_detection_api/config.py,sha256=05fVcLx0KK3wWFi62Mr-m_soewVn81qqeObUh-a2mrA,982
28
- megadetector/api/synchronous/api_core/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- megadetector/api/synchronous/api_core/tests/load_test.py,sha256=rKiVHP4011POuPWgnISA_-sv9TR2gTvxYyt5kktZZis,3276
30
- megadetector/classification/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- megadetector/classification/aggregate_classifier_probs.py,sha256=ScRlN7yV6qOES8hDwyAylKQ92Vn-klbdPGqDbPM3pGw,3417
32
- megadetector/classification/analyze_failed_images.py,sha256=dsNajqn4c-yL6vUelxqhotdNBFLHzaONfJkMAdwX7QI,8426
33
- megadetector/classification/cache_batchapi_outputs.py,sha256=m4HrRg2XSP1oP_1YTzPSOydnhyR1pWu0m2LbIXUUWwE,6304
34
- megadetector/classification/create_classification_dataset.py,sha256=Sv79ocsy1sWAWzzkKg4tWruQD434faOpJGBHb4Kt3XY,25404
35
- megadetector/classification/crop_detections.py,sha256=LWT3zzNKfJNwTVKl1-nM_qzjkdCuFjEmPRDsSZ0MV4Y,20387
36
- megadetector/classification/csv_to_json.py,sha256=j_edQLiMyDvpZFxYDNh-BAvzwSM4zbbQEXMIH-44nAs,5894
37
- megadetector/classification/detect_and_crop.py,sha256=Y3T1gr2DJr6LEg17QXoBvhYMihnMAmbKJ-gBmmwoMd8,36925
38
- megadetector/classification/evaluate_model.py,sha256=x51dfebVtsObAcLafXq7xMJv7hOiwiXHM-Cg06sUAyw,19323
39
- megadetector/classification/identify_mislabeled_candidates.py,sha256=NvLAUk5VgwyyPKMxY875V5k2iRsl-Eh_sAuZRjtgc4c,5011
40
- megadetector/classification/json_to_azcopy_list.py,sha256=Om8efCzRwlfA5LRXtzOgdrY0P5YDofs0vuewQvKNmsA,1669
41
- megadetector/classification/json_validator.py,sha256=EOwX2aV_GDhkz6EQqkq6iC08IuBlNiUiR4OMUXuSGWo,26417
42
- megadetector/classification/map_classification_categories.py,sha256=VFSBQhZjJMwMDZwv-rFHs4cE3q5GionqLYumjBypZhw,10661
43
- megadetector/classification/merge_classification_detection_output.py,sha256=N4HhGSKZz_YbgY8SNtxxjw3S-CvpwfpIEsj2WCpUD7M,20163
44
- megadetector/classification/prepare_classification_script.py,sha256=hD_vdd4oMBimz4rTkuTVI51dYnlDXHaAoBdL7FvXan4,6361
45
- megadetector/classification/prepare_classification_script_mc.py,sha256=XbCEzl8Wl_NPrv27EwCj-emz2pzIlHqtT1DcyRUGH8Y,7052
46
- megadetector/classification/run_classifier.py,sha256=JKMdeD33yo-CY6lyTfPZmOWnvr_Ft-vDbysfdSiXSX4,9323
47
- megadetector/classification/save_mislabeled.py,sha256=hoxYmGbfGxEwvuH9JcYDW8NOs8CxCx0K4UtMHDaG0KI,3386
48
- megadetector/classification/train_classifier.py,sha256=ksAcLpIn-D1sq8jdJjpjru8cUNXLhEoNVJsfWRayfLA,32334
49
- megadetector/classification/train_classifier_tf.py,sha256=sXJ9i_BhEam5ndxm65cwe3CaZIFTg5-eEdKGhMpEhHo,28051
50
- megadetector/classification/train_utils.py,sha256=BNOnGl2dNegsQdOYzfq5IE3hsS2gL3eUd9q-Tgimf_E,11293
51
- megadetector/classification/efficientnet/__init__.py,sha256=e-jfknjzCc5a0CSW-TaZ2vi0SPU1OMIsayoz2s94QAo,182
52
- megadetector/classification/efficientnet/model.py,sha256=qJHWV9-rYKa4E_TIee5N_OjRhqDdM-icPpoMap3Q5HM,17040
53
- megadetector/classification/efficientnet/utils.py,sha256=dzrDrQQcvINdJFbODmrHQMUaM0RaUbct52zcSprseAg,24693
54
- megadetector/data_management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
- megadetector/data_management/camtrap_dp_to_coco.py,sha256=L4gk9E0SLKh25A4IOCo-ZdXw1ET3jlLUf0MQMDkJeCM,8426
56
- megadetector/data_management/cct_json_utils.py,sha256=mdKo_vfHYTMVLXIyiA8HI-f30zrby7NEir741E5Bb2o,19525
57
- megadetector/data_management/cct_to_md.py,sha256=e1fYevSz0m65n5H16uB6uwzNiXiwxjdB2ka5p68R4d0,5120
58
- megadetector/data_management/cct_to_wi.py,sha256=wcBOmurXY5I-hiqV6SmRSGUAeYaKHEU1LgCZjqVmCyw,9561
59
- megadetector/data_management/coco_to_labelme.py,sha256=uYJ60XoZfHUEfLzj-EjLyeNM590skNnMp-IThWwNISo,8683
60
- megadetector/data_management/coco_to_yolo.py,sha256=HjuLYdPqcrMvfLaAwCmekJ7JdqMeBG2e1yTO8xaUzNM,27812
61
- megadetector/data_management/generate_crops_from_cct.py,sha256=OSoh_c71-iftrGgkBCXqOAXDwzBNZmKnErCW59XE58w,4094
62
- megadetector/data_management/get_image_sizes.py,sha256=sZtjRxhlIj56oA9X4Iq1ek4xeT3MllyWpZCOV19MkCY,6501
63
- megadetector/data_management/labelme_to_coco.py,sha256=jM6Ir9ahPHnyLzekoXqm2egOcHTmDtRYGSlsLJjm1zU,20773
64
- megadetector/data_management/labelme_to_yolo.py,sha256=e6F6_F1c0Dye582PTHrGaXBNLo_DHMJA0ls8auiXw90,9852
65
- megadetector/data_management/mewc_to_md.py,sha256=4l2Z5lfL8lUVq3NtL3ssvcUp80BABazWwDGcdS34mQA,12288
66
- megadetector/data_management/ocr_tools.py,sha256=ueqbPiZL_KAC9DYDdWpCKr9tcNIOS9S9v1IExMs0Bx0,31370
67
- megadetector/data_management/read_exif.py,sha256=4zDe4Jv7S-isdWOKZf76KhON9ZmD8GKoDl9hd6MFyd8,29249
68
- megadetector/data_management/remap_coco_categories.py,sha256=suAwZH7u29ozFnK8MWrfL4q_s9va53mJi4vtwdCPvVo,4982
69
- megadetector/data_management/remove_exif.py,sha256=cvX_1FoSd1e5ozqla2bW_OxLvvOIUgMJp4JgyhlaofI,2696
70
- megadetector/data_management/rename_images.py,sha256=Ql8ZuJjXNDmBVbf_L2RU_oF2fwYHQZNm1tx4WQ7d8FI,6487
71
- megadetector/data_management/resize_coco_dataset.py,sha256=hEtIO9kpE7dXXO-zkTem2iBOCZQpgfx8iBNtw9DUZOo,6551
72
- megadetector/data_management/speciesnet_to_md.py,sha256=kINd7PfWC1G-kawZH8YDigtBAuewahLYpLszKC-lpOM,1368
73
- megadetector/data_management/wi_download_csv_to_coco.py,sha256=rhqWSEmDiXs1GbHavoNwdGSqk01-a-4xmz7z7x1Qjs4,7973
74
- megadetector/data_management/yolo_output_to_md_output.py,sha256=Hwr2yUuXYJi7lFaQcYGReLjS-oDnYq5m8QAFBcYRXrM,17476
75
- megadetector/data_management/yolo_to_coco.py,sha256=gmsbAhuUKt-OVDJwEqieNJiX2Wx2oq9VyhmUuauHiFM,26600
76
- megadetector/data_management/annotations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
- megadetector/data_management/annotations/annotation_constants.py,sha256=XMtv63F6JfPdScx8bGrY5C3CGOd0XkJrEkyD6zHZIfg,952
78
- megadetector/data_management/databases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
- megadetector/data_management/databases/add_width_and_height_to_db.py,sha256=cyYXX2wSvUrJH3kGOVcFRJto7EUPzPFVZUpVEbpW8vs,809
80
- megadetector/data_management/databases/combine_coco_camera_traps_files.py,sha256=-eWeuUrIwN8Z6H4FhvaIZenyxud8THDwlALVGSLNhfw,6583
81
- megadetector/data_management/databases/integrity_check_json_db.py,sha256=kANQiNpAqTfLUiqpV8cvg2u7tGsFVxT5HP3CmLlwOc8,17076
82
- megadetector/data_management/databases/subset_json_db.py,sha256=mO1eAkrfCSAp2_r5vHVjHvet_utFJcWRm3rNa8WvSx8,4134
83
- megadetector/data_management/lila/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
- megadetector/data_management/lila/create_lila_blank_set.py,sha256=tApCL4XN1Vzl6YvcdI6SY4TZbHeCyHLzNYweFfX0sy0,19490
85
- megadetector/data_management/lila/create_lila_test_set.py,sha256=UWJPKrwNW-UVeGrMUrFvmIt2UHVyuFiPzRFKkbEbk5A,5014
86
- megadetector/data_management/lila/create_links_to_md_results_files.py,sha256=XrtbM1MJtN-4PKzViGkDov8Rw-lJogF1E8_hHh6wR9U,3687
87
- megadetector/data_management/lila/download_lila_subset.py,sha256=coLlmga7r5I37L_YxjUoERLC1JAGUjcED16oWtd072Y,5339
88
- megadetector/data_management/lila/generate_lila_per_image_labels.py,sha256=dnXb-yB-dvPXSr9xsB2ASEyCi7zk7fYTAWrJKgrBx_4,17397
89
- megadetector/data_management/lila/get_lila_annotation_counts.py,sha256=58EtCtx3w_c8bHLoBzURvJwqGSzVt6clfla18dXiAwM,5520
90
- megadetector/data_management/lila/get_lila_image_counts.py,sha256=Jz89nNHwghguMJBUs1v_ZN5VPwg9zH9ggat-6ZsUfQ4,3518
91
- megadetector/data_management/lila/lila_common.py,sha256=nvNxyQuRuq0a7FpDO3i1xHLEF904XNBVMW9mn4sJsBg,10726
92
- megadetector/data_management/lila/test_lila_metadata_urls.py,sha256=yWq9bJ2sOppTw1XMyPn-RJskydk6V_02r5Mmex1lquE,5010
93
- megadetector/detection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
- megadetector/detection/change_detection.py,sha256=-ntEPII5nwuGLssxqu9t69uuzV9YSyy7uB79QP4a6aw,28594
95
- megadetector/detection/process_video.py,sha256=yc5TdaCxUX1dBzckXwp0b7ehXjfNqAIAjQIFG5qDEy4,52388
96
- megadetector/detection/pytorch_detector.py,sha256=S8imfMbjpGz7wMi3LGY-z-P-7NHJ6i4nIKlSM_oMxuA,45015
97
- megadetector/detection/run_detector.py,sha256=oHfD62A-p2m1bPYPJB0E399C3NuP-TFHHYJDLwq-ZIs,39128
98
- megadetector/detection/run_detector_batch.py,sha256=Gfl7cjPRtZ6eAslyfRUnv_uPCkSc-DDhNDrG7lvUeF4,71655
99
- megadetector/detection/run_inference_with_yolov5_val.py,sha256=3YOBH5T2ML-s7GWPjKONb_ot_kcZQfyu5zbRG-u5xnw,53035
100
- megadetector/detection/run_tiled_inference.py,sha256=GwlKvnfWRh58juyuJ9EpZSNlYbq5NsBc8pnEA7vp7EM,39272
101
- megadetector/detection/tf_detector.py,sha256=3b2MiqgMw8KBDzHQliUSDXWrmKpa9iZnfe6EgYpMcYo,8398
102
- megadetector/detection/video_utils.py,sha256=Ne7-ltDJbtwFczYoy9plKSvoMlg16_i4Ew5wsrk3lCs,42580
103
- megadetector/postprocessing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
- megadetector/postprocessing/add_max_conf.py,sha256=9Ao6OpjWvzZ0SrUtH5_SZ-xY8z_Aa9CyEzNt76aadNA,1578
105
- megadetector/postprocessing/categorize_detections_by_size.py,sha256=Ok9c2Bfxtmn65ZwxccfB37UiU2NPdECKsta_33DSJFU,5372
106
- megadetector/postprocessing/classification_postprocessing.py,sha256=ISpmtv7l3Gt1zMRC_-5zXfHiCbFXqgHfzGb0ikSJmfA,58046
107
- megadetector/postprocessing/combine_batch_outputs.py,sha256=L4eW93fLL0VtpfbBy9z8q2CJIO1skrYq8d5GDoA8mxQ,8332
108
- megadetector/postprocessing/compare_batch_results.py,sha256=0l5NcZ7zJqG2fbbci-Y3bvSZs-R_1iZugyeRrvd4Dko,81329
109
- megadetector/postprocessing/convert_output_format.py,sha256=_RBteogwwzFy0TyWxIFWsZToBUTYq2Oa4iCqoTOXBjw,14766
110
- megadetector/postprocessing/create_crop_folder.py,sha256=2j9_IsHSNXji67sPkVosiIrErnLt9jKRtoPKYsZh18s,19294
111
- megadetector/postprocessing/detector_calibration.py,sha256=UFjJ8D6tMghatLRj3CyrtJ7vrPIJkULMNsYMIj98j2M,20495
112
- megadetector/postprocessing/generate_csv_report.py,sha256=QLLxE2b6JXoqtuU4h1tgVROgOQXjwK4tCTYcNF0XJlk,19160
113
- megadetector/postprocessing/load_api_results.py,sha256=fROvcmQ_BHCv-NPzmqf0efhbt744mKP5zt7yC9XLFXQ,7045
114
- megadetector/postprocessing/md_to_coco.py,sha256=_nFqanWmbtlAtN8smJOdUAIRAEAf_xKlV2K_qhOWkys,16915
115
- megadetector/postprocessing/md_to_labelme.py,sha256=3ZUnetkazVSet0567079ATYZ6b6g65cXpUKY306Fk8A,11543
116
- megadetector/postprocessing/md_to_wi.py,sha256=AiECnonxGBrAvWYl_hnOGvciGRZKBfF4BcJX6ZV3hyE,1211
117
- megadetector/postprocessing/merge_detections.py,sha256=o9MikrplIZm-730hJX58NnWsZlpNApEBr2jjPIcR4yY,15325
118
- megadetector/postprocessing/postprocess_batch_results.py,sha256=aspVRVDZVcB_MsBKhEF_ao8T5IWqBF1R37nfqFBPWEM,84559
119
- megadetector/postprocessing/remap_detection_categories.py,sha256=ldijLjDGWYhVPUFjOxhfydFUxFXOIpvLjqGuZ1OAPL8,6290
120
- megadetector/postprocessing/render_detection_confusion_matrix.py,sha256=GVuchFeVoqVRf02mHeSu9-J5rbN-Xx8udL_96ibCoC4,26240
121
- megadetector/postprocessing/separate_detections_into_folders.py,sha256=rRYvRblQFKYTV-dNt7e19Eco9eLTaGru_i9aOCGyEH0,32258
122
- megadetector/postprocessing/subset_json_detector_output.py,sha256=Quz6xxM1T0N6bb1zGVKMv5GHBECLwNtuu9Sb35bWPhI,32188
123
- megadetector/postprocessing/top_folders_to_bottom.py,sha256=zYrqMHjUZG8urh2CYphfs91ZQ620uqe-TL8jVYy8KVw,6049
124
- megadetector/postprocessing/validate_batch_results.py,sha256=alIAJj4g76m3sXDwjkj6JaJCfeoWrGLyY89xCvw64K4,11012
125
- megadetector/postprocessing/repeat_detection_elimination/find_repeat_detections.py,sha256=XgVeyga8iSC01MAjXxb2rn-CgJTYHqC_gfxxEoSn4aw,9420
126
- megadetector/postprocessing/repeat_detection_elimination/remove_repeat_detections.py,sha256=mJtexTuWRJbjxu-ss4GRs6Ivl7PFDWlFVSitXTbpbhA,2820
127
- megadetector/postprocessing/repeat_detection_elimination/repeat_detections_core.py,sha256=WvvWwyP86TZTc1WkuzA0UFkVOjWHOK3_oVOdJIX3Q4k,66771
128
- megadetector/taxonomy_mapping/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
- megadetector/taxonomy_mapping/map_lila_taxonomy_to_wi_taxonomy.py,sha256=cutQ4rtZ6T3WtnpHxUd9A5tM5f3bdyUdMMbe8Qss8eA,17694
130
- megadetector/taxonomy_mapping/map_new_lila_datasets.py,sha256=-VA2MeAEznc0CtYVSjJuuo5EmZ0WDcr0ehRssJCrUd0,4177
131
- megadetector/taxonomy_mapping/prepare_lila_taxonomy_release.py,sha256=rkpTjHxgg4Uaac3BTbvFYhnryYSY5Ha0l_9JeWuAKDo,4711
132
- megadetector/taxonomy_mapping/preview_lila_taxonomy.py,sha256=V5eAZTLbLZZR6OwPsJYO7m9H6LXDoWw7J37zg5xPQlI,17341
133
- megadetector/taxonomy_mapping/retrieve_sample_image.py,sha256=YZcOsu15ZSQCZSzkYPw80Rk6eCfnDjKg5y2wyYKkybY,1866
134
- megadetector/taxonomy_mapping/simple_image_download.py,sha256=sxmt8LGOd0rQCLpJhu3XI_tqzI_b3U1iVl5d9sK9Ygc,6875
135
- megadetector/taxonomy_mapping/species_lookup.py,sha256=M_T2hecfvzTb8LsXaNudLRd5XP2nPTeIogZMQH143p0,29666
136
- megadetector/taxonomy_mapping/taxonomy_csv_checker.py,sha256=PIQh-5q43ibSgT6CdG1iwfZXZx_zOHWSv7AiHnql8d4,4782
137
- megadetector/taxonomy_mapping/taxonomy_graph.py,sha256=GjrDZq7HesF40cUA9sPz7bGKojRdM2KBFvcUPy69hp4,12203
138
- megadetector/taxonomy_mapping/validate_lila_category_mappings.py,sha256=sAKYreO1FDMxWl_0IvkmaGhiuS4OtzzMvSosovpugNc,2415
139
- megadetector/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
- megadetector/utils/azure_utils.py,sha256=LplsyaKI41PHcmr3YHI1mhF-KtmgCb-XAkqG7YIPtD0,6215
141
- megadetector/utils/ct_utils.py,sha256=lP6js2hPj0K26vqGOL37QQ3uHkum1TWNYyobE_qhQP4,57221
142
- megadetector/utils/directory_listing.py,sha256=CZBzwg0Fus1xuRAp3ycEBjViDdwwk4eKdGq06ZERLDg,6414
143
- megadetector/utils/gpu_test.py,sha256=5zUfAVeSjH8I08eCqayFmMxL-0mix8SjJJTe5ORABvU,3544
144
- megadetector/utils/md_tests.py,sha256=ChMWgR0eLGVSiAlzkSELeYaRYYrz7gIdV_OkfYoe9c0,72844
145
- megadetector/utils/path_utils.py,sha256=ZYFvq1RPHTABl9Ac71WoPwag_qdoLLvJlyEEKYKHgJ4,97981
146
- megadetector/utils/process_utils.py,sha256=gQcpH9WYvGPUs0FhtJ5_Xvl6JsvoGz8_mnDQk0PbTRM,5673
147
- megadetector/utils/sas_blob_utils.py,sha256=p3kzTlE3TEfo2gsoCQeqMDrDGGLae6HcRROz2FO4KvY,16696
148
- megadetector/utils/split_locations_into_train_val.py,sha256=GJXrvwxNRsFOe6mn9MRCc3kRoCsAN4Z_fG4Or_Idm_4,10297
149
- megadetector/utils/string_utils.py,sha256=OONChvVyBmk3NdUHqN-Uj6isPOYqBa6YNE_WTD59z1w,6180
150
- megadetector/utils/url_utils.py,sha256=1u80nGXV0k-OLK1vK7q0EpQzJ5NlcdRYqXGEyRvBYzE,24992
151
- megadetector/utils/wi_utils.py,sha256=Relk8_H4h5YLmc3Vj0E1Bbw70pstRrwAW5dy_-m0HWw,99074
152
- megadetector/utils/write_html_image_list.py,sha256=6Tbe5wyUxoBYJgH9yVrxxKCeWF2BVre_wQMEOQJ-ZIU,9068
153
- megadetector/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
- megadetector/visualization/plot_utils.py,sha256=Z3hkMKJZPPk3A0zqssBHPDh6_EG--_315cbUK4RPt3k,10598
155
- megadetector/visualization/render_images_with_thumbnails.py,sha256=_dRnKU5nEbOoVxNeuPTu8QN6vAOyUz0C3vLNP_Xjsg0,8385
156
- megadetector/visualization/visualization_utils.py,sha256=zDlxRiB-5GZZVuaNr1nK_B4umxVrzUFf9VaUytTKFkk,74251
157
- megadetector/visualization/visualize_db.py,sha256=kSopXVtxVSGwv3NSKOo1lx5SNm5VNgndYRm6RkeaQ0I,24499
158
- megadetector/visualization/visualize_detector_output.py,sha256=6CsgTb7A_EwmUxOwnrU0w9XpIfQm9I4BEijBrtYuWQk,20198
159
- megadetector-5.0.29.dist-info/licenses/LICENSE,sha256=RMa3qq-7Cyk7DdtqRj_bP1oInGFgjyHn9-PZ3PcrqIs,1100
160
- megadetector-5.0.29.dist-info/METADATA,sha256=upPPtMgx1nRsA5-TXopsGnJnncDrxY4o3ZVEc64ScBA,6384
161
- megadetector-5.0.29.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
162
- megadetector-5.0.29.dist-info/top_level.txt,sha256=wf9DXa8EwiOSZ4G5IPjakSxBPxTDjhYYnqWRfR-zS4M,13
163
- megadetector-5.0.29.dist-info/RECORD,,