dtlpy 1.99.12__py3-none-any.whl → 1.100.5__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.
- dtlpy/__init__.py +1 -1
- dtlpy/__version__.py +1 -1
- dtlpy/entities/annotation_definitions/segmentation.py +52 -28
- dtlpy/entities/model.py +27 -0
- dtlpy/ml/base_model_adapter.py +27 -30
- {dtlpy-1.99.12.dist-info → dtlpy-1.100.5.dist-info}/METADATA +1 -1
- {dtlpy-1.99.12.dist-info → dtlpy-1.100.5.dist-info}/RECORD +14 -14
- {dtlpy-1.99.12.data → dtlpy-1.100.5.data}/scripts/dlp +0 -0
- {dtlpy-1.99.12.data → dtlpy-1.100.5.data}/scripts/dlp.bat +0 -0
- {dtlpy-1.99.12.data → dtlpy-1.100.5.data}/scripts/dlp.py +0 -0
- {dtlpy-1.99.12.dist-info → dtlpy-1.100.5.dist-info}/LICENSE +0 -0
- {dtlpy-1.99.12.dist-info → dtlpy-1.100.5.dist-info}/WHEEL +0 -0
- {dtlpy-1.99.12.dist-info → dtlpy-1.100.5.dist-info}/entry_points.txt +0 -0
- {dtlpy-1.99.12.dist-info → dtlpy-1.100.5.dist-info}/top_level.txt +0 -0
dtlpy/__init__.py
CHANGED
|
@@ -239,7 +239,7 @@ def checkout_state():
|
|
|
239
239
|
|
|
240
240
|
|
|
241
241
|
def use_attributes_2(state: bool = True):
|
|
242
|
-
warnings.warn("Function 'use_attributes_2()' is deprecated as of version 1.99.
|
|
242
|
+
warnings.warn("Function 'use_attributes_2()' is deprecated as of version 1.99.12 and has been non-functional since version 1.90.39. To work with attributes 2.0, simply use 'update_attributes()'.", DeprecationWarning)
|
|
243
243
|
client_api.attributes_mode.use_attributes_2 = state
|
|
244
244
|
|
|
245
245
|
|
dtlpy/__version__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
version = '1.
|
|
1
|
+
version = '1.100.5'
|
|
@@ -15,12 +15,31 @@ class Segmentation(BaseAnnotationDefinition):
|
|
|
15
15
|
"""
|
|
16
16
|
type = "binary"
|
|
17
17
|
|
|
18
|
-
def __init__(self, geo, label, attributes=None, description=None, color=None):
|
|
18
|
+
def __init__(self, geo: np.ndarray, label: str, attributes=None, description=None, color=None):
|
|
19
19
|
super().__init__(description=description, attributes=attributes)
|
|
20
|
-
self.
|
|
20
|
+
self._geo = geo
|
|
21
|
+
self._coordinates = None
|
|
21
22
|
self.label = label
|
|
22
23
|
self._color = color
|
|
23
24
|
|
|
25
|
+
@property
|
|
26
|
+
def geo(self) -> np.ndarray:
|
|
27
|
+
if self._geo is None:
|
|
28
|
+
self._geo = self.from_coordinates(self._coordinates)
|
|
29
|
+
if self._color is None:
|
|
30
|
+
color = None
|
|
31
|
+
fill_coordinates = self._geo.nonzero()
|
|
32
|
+
if len(fill_coordinates) > 0 and len(fill_coordinates[0]) > 0 and len(fill_coordinates[1]) > 0:
|
|
33
|
+
color = self._geo[fill_coordinates[0][0]][fill_coordinates[1][0]]
|
|
34
|
+
self._color = color
|
|
35
|
+
self._geo = (self._geo[:, :, 3] > 127).astype(float)
|
|
36
|
+
return self._geo
|
|
37
|
+
|
|
38
|
+
@geo.setter
|
|
39
|
+
def geo(self, geo: np.ndarray):
|
|
40
|
+
self._geo = geo
|
|
41
|
+
self._coordinates = None
|
|
42
|
+
|
|
24
43
|
@property
|
|
25
44
|
def x(self):
|
|
26
45
|
return
|
|
@@ -106,25 +125,31 @@ class Segmentation(BaseAnnotationDefinition):
|
|
|
106
125
|
return image
|
|
107
126
|
|
|
108
127
|
def to_coordinates(self, color=None):
|
|
109
|
-
|
|
110
|
-
|
|
128
|
+
need_encode = False
|
|
129
|
+
if color is not None and self._color is not None:
|
|
130
|
+
# if input color is not the same as the annotation's color - need to re-encode
|
|
131
|
+
if self._color != color:
|
|
132
|
+
need_encode = True
|
|
133
|
+
|
|
134
|
+
if need_encode or self._coordinates is None:
|
|
135
|
+
if self._color is not None:
|
|
111
136
|
color = self._color
|
|
112
137
|
else:
|
|
113
138
|
color = (255, 255, 255)
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
return
|
|
139
|
+
max_val = np.max(self.geo)
|
|
140
|
+
if max_val > 1:
|
|
141
|
+
self.geo = self.geo / max_val
|
|
142
|
+
png_ann = np.stack((color[0] * self.geo,
|
|
143
|
+
color[1] * self.geo,
|
|
144
|
+
color[2] * self.geo,
|
|
145
|
+
255 * self.geo),
|
|
146
|
+
axis=2).astype(np.uint8)
|
|
147
|
+
pil_img = Image.fromarray(png_ann)
|
|
148
|
+
buff = io.BytesIO()
|
|
149
|
+
pil_img.save(buff, format="PNG")
|
|
150
|
+
new_image_string = base64.b64encode(buff.getvalue()).decode("utf-8")
|
|
151
|
+
self._coordinates = "data:image/png;base64,%s" % new_image_string
|
|
152
|
+
return self._coordinates
|
|
128
153
|
|
|
129
154
|
def to_box(self):
|
|
130
155
|
"""
|
|
@@ -186,23 +211,22 @@ class Segmentation(BaseAnnotationDefinition):
|
|
|
186
211
|
else:
|
|
187
212
|
raise TypeError('unknown binary data type')
|
|
188
213
|
decode = base64.b64decode(data)
|
|
189
|
-
|
|
214
|
+
mask = np.array(Image.open(io.BytesIO(decode)))
|
|
215
|
+
return mask
|
|
190
216
|
|
|
191
217
|
@classmethod
|
|
192
218
|
def from_json(cls, _json):
|
|
193
219
|
if "coordinates" in _json:
|
|
194
|
-
|
|
220
|
+
coordinates = _json["coordinates"]
|
|
195
221
|
elif "data" in _json:
|
|
196
|
-
|
|
222
|
+
coordinates = _json["data"]
|
|
197
223
|
else:
|
|
198
224
|
raise ValueError('can not find "coordinates" or "data" in annotation. id: {}'.format(_json["id"]))
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
if len(fill_coordinates) > 0 and len(fill_coordinates[0]) > 0 and len(fill_coordinates[1]) > 0:
|
|
202
|
-
color = mask[fill_coordinates[0][0]][fill_coordinates[1][0]]
|
|
203
|
-
return cls(
|
|
204
|
-
geo=(mask[:, :, 3] > 127).astype(float),
|
|
225
|
+
inst = cls(
|
|
226
|
+
geo=None,
|
|
205
227
|
label=_json["label"],
|
|
206
228
|
attributes=_json.get("attributes", None),
|
|
207
|
-
color=
|
|
229
|
+
color=None
|
|
208
230
|
)
|
|
231
|
+
inst._coordinates = coordinates
|
|
232
|
+
return inst
|
dtlpy/entities/model.py
CHANGED
|
@@ -114,6 +114,7 @@ class Model(entities.BaseEntity):
|
|
|
114
114
|
_project = attr.ib(repr=False)
|
|
115
115
|
_package = attr.ib(repr=False)
|
|
116
116
|
_dataset = attr.ib(repr=False)
|
|
117
|
+
_feature_set = attr.ib(repr=False)
|
|
117
118
|
_client_api = attr.ib(type=ApiClient, repr=False)
|
|
118
119
|
_repositories = attr.ib(repr=False)
|
|
119
120
|
_ontology = attr.ib(repr=False, default=None)
|
|
@@ -191,6 +192,7 @@ class Model(entities.BaseEntity):
|
|
|
191
192
|
project=project,
|
|
192
193
|
package=package,
|
|
193
194
|
dataset=None,
|
|
195
|
+
feature_set=None,
|
|
194
196
|
id=_json.get('id', None),
|
|
195
197
|
url=_json.get('url', None),
|
|
196
198
|
scope=_json.get('scope', entities.EntityScopeLevel.PROJECT),
|
|
@@ -218,6 +220,7 @@ class Model(entities.BaseEntity):
|
|
|
218
220
|
attr.fields(Model)._dataset,
|
|
219
221
|
attr.fields(Model)._ontology,
|
|
220
222
|
attr.fields(Model)._repositories,
|
|
223
|
+
attr.fields(Model)._feature_set,
|
|
221
224
|
attr.fields(Model)._client_api,
|
|
222
225
|
attr.fields(Model).package_id,
|
|
223
226
|
attr.fields(Model).project_id,
|
|
@@ -267,6 +270,30 @@ class Model(entities.BaseEntity):
|
|
|
267
270
|
assert isinstance(self._project, entities.Project)
|
|
268
271
|
return self._project
|
|
269
272
|
|
|
273
|
+
@property
|
|
274
|
+
def feature_set(self) -> 'entities.FeatureSet':
|
|
275
|
+
if self._feature_set is None:
|
|
276
|
+
filters = entities.Filters(field='modelId',
|
|
277
|
+
values=self.id,
|
|
278
|
+
resource=entities.FiltersResource.FEATURE_SET)
|
|
279
|
+
feature_sets = self.project.feature_sets.list(filters=filters)
|
|
280
|
+
if feature_sets.items_count > 1:
|
|
281
|
+
logger.warning("Found more than one feature set associated with model entity. Returning first result."
|
|
282
|
+
"Set feature_set if other feature set entity is needed.")
|
|
283
|
+
self._feature_set = feature_sets.items[0]
|
|
284
|
+
elif feature_sets.items_count == 1:
|
|
285
|
+
self._feature_set = feature_sets.items[0]
|
|
286
|
+
else:
|
|
287
|
+
self._feature_set = None
|
|
288
|
+
return self._feature_set
|
|
289
|
+
|
|
290
|
+
@feature_set.setter
|
|
291
|
+
def feature_set(self, feature_set: 'entities.FeatureSet'):
|
|
292
|
+
if not isinstance(feature_set, entities.FeatureSet):
|
|
293
|
+
raise ValueError("feature_set must be of type dl.FeatureSet")
|
|
294
|
+
else:
|
|
295
|
+
self._feature_set = feature_set
|
|
296
|
+
|
|
270
297
|
@property
|
|
271
298
|
def package(self):
|
|
272
299
|
if self._package is None:
|
dtlpy/ml/base_model_adapter.py
CHANGED
|
@@ -2,7 +2,9 @@ import dataclasses
|
|
|
2
2
|
import tempfile
|
|
3
3
|
import datetime
|
|
4
4
|
import logging
|
|
5
|
+
import string
|
|
5
6
|
import shutil
|
|
7
|
+
import random
|
|
6
8
|
import base64
|
|
7
9
|
import tqdm
|
|
8
10
|
import sys
|
|
@@ -119,7 +121,7 @@ class BaseModelAdapter(utilities.BaseServiceRunner):
|
|
|
119
121
|
if self._model_entity is not None:
|
|
120
122
|
self.package = self.model_entity.package
|
|
121
123
|
if self._package is None:
|
|
122
|
-
raise ValueError('Missing Package entity on adapter.
|
|
124
|
+
raise ValueError('Missing Package entity on adapter. Please set: "adapter.package=package"')
|
|
123
125
|
assert isinstance(self._package, (entities.Package, entities.Dpk))
|
|
124
126
|
return self._package
|
|
125
127
|
|
|
@@ -306,7 +308,7 @@ class BaseModelAdapter(utilities.BaseServiceRunner):
|
|
|
306
308
|
data_subset_base_path = os.path.join(data_path, subset)
|
|
307
309
|
if os.path.isdir(data_subset_base_path) and not overwrite:
|
|
308
310
|
# existing and dont overwrite
|
|
309
|
-
self.logger.debug("Subset {!r}
|
|
311
|
+
self.logger.debug("Subset {!r} already exists (and overwrite=False). Skipping.".format(subset))
|
|
310
312
|
else:
|
|
311
313
|
self.logger.debug("Downloading subset {!r} of {}".format(subset,
|
|
312
314
|
self.model_entity.dataset.name))
|
|
@@ -349,7 +351,7 @@ class BaseModelAdapter(utilities.BaseServiceRunner):
|
|
|
349
351
|
|
|
350
352
|
:param model_entity: `str` dl.Model entity
|
|
351
353
|
:param local_path: `str` directory path in local FileSystem to download the model_entity to
|
|
352
|
-
:param overwrite: `bool` (default False) if False does not
|
|
354
|
+
:param overwrite: `bool` (default False) if False does not download files with same name else (True) download all
|
|
353
355
|
"""
|
|
354
356
|
if model_entity is not None:
|
|
355
357
|
self.model_entity = model_entity
|
|
@@ -387,8 +389,8 @@ class BaseModelAdapter(utilities.BaseServiceRunner):
|
|
|
387
389
|
self.save(local_path=local_path, **kwargs)
|
|
388
390
|
|
|
389
391
|
if self.model_entity is None:
|
|
390
|
-
raise ValueError('
|
|
391
|
-
'
|
|
392
|
+
raise ValueError('Missing model entity on the adapter. '
|
|
393
|
+
'Please set before saving: "adapter.model_entity=model"')
|
|
392
394
|
|
|
393
395
|
self.model_entity.artifacts.upload(filepath=os.path.join(local_path, '*'),
|
|
394
396
|
overwrite=True)
|
|
@@ -466,9 +468,9 @@ class BaseModelAdapter(utilities.BaseServiceRunner):
|
|
|
466
468
|
"""
|
|
467
469
|
Extract feature from an input list of items (or single) and return the items and the feature vector.
|
|
468
470
|
|
|
469
|
-
:param items: `List[dl.Item]` list of items to
|
|
471
|
+
:param items: `List[dl.Item]` list of items to embed
|
|
470
472
|
:param upload_features: `bool` uploads the features on the given items
|
|
471
|
-
:param batch_size: `int` size of batch to run a single
|
|
473
|
+
:param batch_size: `int` size of batch to run a single embed
|
|
472
474
|
|
|
473
475
|
:return: `List[dl.Item]`, `List[List[vector]]`
|
|
474
476
|
"""
|
|
@@ -477,16 +479,18 @@ class BaseModelAdapter(utilities.BaseServiceRunner):
|
|
|
477
479
|
upload_features = self.adapter_defaults.resolve("upload_features", upload_features)
|
|
478
480
|
input_type = self.model_entity.input_type
|
|
479
481
|
self.logger.debug(
|
|
480
|
-
"
|
|
482
|
+
"Embedding {} items, using batch size {}. input type: {}".format(len(items), batch_size, input_type))
|
|
481
483
|
|
|
482
484
|
# Search for existing feature set for this model id
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
resource=entities.FiltersResource.FEATURE_SET)
|
|
486
|
-
pages = self.model_entity.project.feature_sets.list(filters)
|
|
487
|
-
if pages.items_count == 0:
|
|
488
|
-
feature_set_name = self.configuration.get('featureSetName', self.model_entity.name)
|
|
485
|
+
feature_set = self.model_entity.feature_set
|
|
486
|
+
if feature_set is None:
|
|
489
487
|
logger.info('Feature Set not found. creating... ')
|
|
488
|
+
try:
|
|
489
|
+
self.model_entity.project.feature_sets.get(name=self.model_entity.name)
|
|
490
|
+
feature_set_name = f"{self.model_entity.name}-{''.join(random.choices(string.ascii_letters + string.digits, k=5))}"
|
|
491
|
+
logger.warning(f"Feature set with the model name already exists. Creating new feature set with name {feature_set_name}")
|
|
492
|
+
except exceptions.NotFound:
|
|
493
|
+
feature_set_name = self.model_entity.name
|
|
490
494
|
feature_set = self.model_entity.project.feature_sets.create(name=feature_set_name,
|
|
491
495
|
entity_type=entities.FeatureEntityType.ITEM,
|
|
492
496
|
model_id=self.model_entity.id,
|
|
@@ -494,22 +498,15 @@ class BaseModelAdapter(utilities.BaseServiceRunner):
|
|
|
494
498
|
set_type=self.model_entity.name,
|
|
495
499
|
size=self.configuration.get('embeddings_size',
|
|
496
500
|
256))
|
|
497
|
-
if 'featureSetName' not in self.model_entity.configuration:
|
|
498
|
-
self.model_entity.configuration['featureSetName'] = feature_set_name
|
|
499
|
-
self.model_entity.update()
|
|
500
501
|
logger.info(f'Feature Set created! name: {feature_set.name}, id: {feature_set.id}')
|
|
501
|
-
elif pages.items_count > 1:
|
|
502
|
-
raise ValueError(
|
|
503
|
-
f'More than one feature set for model. model_id: {self.model_entity.id}, feature_sets_ids: {[f.id for f in pages.all()]}')
|
|
504
502
|
else:
|
|
505
|
-
feature_set = pages.items[0]
|
|
506
503
|
logger.info(f'Feature Set found! name: {feature_set.name}, id: {feature_set.id}')
|
|
507
504
|
|
|
508
505
|
# upload the feature vectors
|
|
509
506
|
pool = ThreadPoolExecutor(max_workers=16)
|
|
510
507
|
vectors = list()
|
|
511
508
|
for i_batch in tqdm.tqdm(range(0, len(items), batch_size),
|
|
512
|
-
desc='
|
|
509
|
+
desc='embedding',
|
|
513
510
|
unit='bt',
|
|
514
511
|
leave=None,
|
|
515
512
|
file=sys.stdout):
|
|
@@ -545,19 +542,19 @@ class BaseModelAdapter(utilities.BaseServiceRunner):
|
|
|
545
542
|
Extract feature from all items given
|
|
546
543
|
|
|
547
544
|
:param dataset: Dataset entity to predict
|
|
548
|
-
:param filters: Filters entity for a filtering before
|
|
545
|
+
:param filters: Filters entity for a filtering before embedding
|
|
549
546
|
:param upload_features: `bool` uploads the features back to the given items
|
|
550
|
-
:param batch_size: `int` size of batch to run a single
|
|
547
|
+
:param batch_size: `int` size of batch to run a single embed
|
|
551
548
|
|
|
552
|
-
:return: `bool` indicating if the
|
|
549
|
+
:return: `bool` indicating if the embedding process completed successfully
|
|
553
550
|
"""
|
|
554
551
|
if batch_size is None:
|
|
555
552
|
batch_size = self.configuration.get('batch_size', 4)
|
|
556
553
|
upload_features = self.adapter_defaults.resolve("upload_features", upload_features)
|
|
557
554
|
|
|
558
|
-
self.logger.debug("Creating embeddings for dataset (name:{}, id:{}, using batch size {}".format(dataset.name,
|
|
559
|
-
|
|
560
|
-
|
|
555
|
+
self.logger.debug("Creating embeddings for dataset (name:{}, id:{}), using batch size {}".format(dataset.name,
|
|
556
|
+
dataset.id,
|
|
557
|
+
batch_size))
|
|
561
558
|
if not filters:
|
|
562
559
|
filters = entities.Filters()
|
|
563
560
|
if filters is not None and isinstance(filters, dict):
|
|
@@ -771,7 +768,7 @@ class BaseModelAdapter(utilities.BaseServiceRunner):
|
|
|
771
768
|
entity=item)
|
|
772
769
|
return feature
|
|
773
770
|
except Exception as e:
|
|
774
|
-
logger.error(f'Failed to upload feature vector
|
|
771
|
+
logger.error(f'Failed to upload feature vector of length {len(vector)} to item {item.id}, Error: {e}')
|
|
775
772
|
return []
|
|
776
773
|
|
|
777
774
|
def _upload_model_annotations(self, item: entities.Item, predictions, clean_annotations):
|
|
@@ -794,7 +791,7 @@ class BaseModelAdapter(utilities.BaseServiceRunner):
|
|
|
794
791
|
@staticmethod
|
|
795
792
|
def _item_to_image(item):
|
|
796
793
|
"""
|
|
797
|
-
Preprocess items before
|
|
794
|
+
Preprocess items before calling the `predict` functions.
|
|
798
795
|
Convert item to numpy array
|
|
799
796
|
|
|
800
797
|
:param item:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
dtlpy/__init__.py,sha256=
|
|
2
|
-
dtlpy/__version__.py,sha256=
|
|
1
|
+
dtlpy/__init__.py,sha256=1Zngp5ftTgWb3r-sc8z98TYpEs6fOB_7snFhsXYQLVg,20899
|
|
2
|
+
dtlpy/__version__.py,sha256=e4pBVlNGZ5kJJMpSKyUUs4mbQCOloji-ZOOFXliGh94,20
|
|
3
3
|
dtlpy/exceptions.py,sha256=EQCKs3pwhwZhgMByQN3D3LpWpdxwcKPEEt-bIaDwURM,2871
|
|
4
4
|
dtlpy/new_instance.py,sha256=u_c6JtgqsKCr7TU24-g7_CaST9ghqamMhM4Z0Zxt50w,10121
|
|
5
5
|
dtlpy/assets/__init__.py,sha256=D_hAa6NM8Zoy32sF_9b7m0b7I-BQEyBFg8-9Tg2WOeo,976
|
|
@@ -71,7 +71,7 @@ dtlpy/entities/item.py,sha256=G6VVcVCudqeShWigZmNIuKD4OkvTRJ05CeXFXNe3Jk8,29691
|
|
|
71
71
|
dtlpy/entities/label.py,sha256=ycDYavIgKhz806plIX-64c07_TeHpDa-V7LnfFVe4Rg,3869
|
|
72
72
|
dtlpy/entities/links.py,sha256=FAmEwHtsrqKet3c0UHH9u_gHgG6_OwF1-rl4xK7guME,2516
|
|
73
73
|
dtlpy/entities/message.py,sha256=ApJuaKEqxATpXjNYUjGdYPu3ibQzEMo8-LtJ_4xAcPI,5865
|
|
74
|
-
dtlpy/entities/model.py,sha256=
|
|
74
|
+
dtlpy/entities/model.py,sha256=UJCnb4gvVKpqzu_0U91hFC4_qkcYSoLhupR9lTnWp20,26892
|
|
75
75
|
dtlpy/entities/node.py,sha256=yPPYDLtNMc6vZbbf4FIffY86y7tkaTvYm42Jb7k3Ofk,39617
|
|
76
76
|
dtlpy/entities/ontology.py,sha256=ok4p3sLBc_SS5hs2gZr5-gbblrveM7qSIX4z67QSKeQ,31967
|
|
77
77
|
dtlpy/entities/organization.py,sha256=AMkx8hNIIIjnu5pYlNjckMRuKt6H3lnOAqtEynkr7wg,9893
|
|
@@ -112,7 +112,7 @@ dtlpy/entities/annotation_definitions/polygon.py,sha256=gI28yzvYgDj_js6bU9djAzsw
|
|
|
112
112
|
dtlpy/entities/annotation_definitions/polyline.py,sha256=8Rid2MxwImHM3-fM-0QjzZZE41-dIpdF45ut8KwNxtA,3237
|
|
113
113
|
dtlpy/entities/annotation_definitions/pose.py,sha256=Ah4vtcYTEieDHgaZXQGy4KPEZbvTID0CuWHmRiLz3hw,2527
|
|
114
114
|
dtlpy/entities/annotation_definitions/ref_image.py,sha256=uDXjZPRSU9rjnzkjklUp7P7Bx9ODeBz87vzjz_LHGqA,2826
|
|
115
|
-
dtlpy/entities/annotation_definitions/segmentation.py,sha256=
|
|
115
|
+
dtlpy/entities/annotation_definitions/segmentation.py,sha256=CEHP9iz3Xc8Wu-A8Wy7C0Zcmwo_9OQYC9u4T-XDW5ww,7354
|
|
116
116
|
dtlpy/entities/annotation_definitions/subtitle.py,sha256=cfNi-19KVYInmxsy5usvjDZdyGgH1Mgss_SiJhT9Bn0,1005
|
|
117
117
|
dtlpy/entities/annotation_definitions/text.py,sha256=r-7laetbKvXL7hSG7AsRl9B5ZVYopUm5vB7rxgkmrCo,2559
|
|
118
118
|
dtlpy/entities/annotation_definitions/undefined_annotation.py,sha256=XUocNEnmWst4D0erlf8GBAjedgFLy0K6K4fr2p_dNas,1882
|
|
@@ -148,7 +148,7 @@ dtlpy/miscellaneous/list_print.py,sha256=leEg3RodgYfH5t_0JG8VuM8NiesR8sJLK_mRStt
|
|
|
148
148
|
dtlpy/miscellaneous/zipping.py,sha256=GMdPhAeHQXeMS5ClaiKWMJWVYQLBLAaJUWxvdYrL4Ro,5337
|
|
149
149
|
dtlpy/ml/__init__.py,sha256=vPkyXpc9kcWWZ_PxyPEOsjKBJdEbowLkZr8FZIb_OBM,799
|
|
150
150
|
dtlpy/ml/base_feature_extractor_adapter.py,sha256=iiEGYAx0Rdn4K46H_FlKrAv3ebTXHSxNVAmio0BxhaI,1178
|
|
151
|
-
dtlpy/ml/base_model_adapter.py,sha256=
|
|
151
|
+
dtlpy/ml/base_model_adapter.py,sha256=y7txv5JdTpVCZY6IvYXiQRSz4k3YXhHFEKoDTkcVHz0,50610
|
|
152
152
|
dtlpy/ml/metrics.py,sha256=BG2E-1Mvjv2e2No9mIJKVmvzqBvLqytKcw3hA7wVUNc,20037
|
|
153
153
|
dtlpy/ml/predictions_utils.py,sha256=He_84U14oS2Ss7T_-Zj5GDiBZwS-GjMPURUh7u7DjF8,12484
|
|
154
154
|
dtlpy/ml/summary_writer.py,sha256=dehDi8zmGC1sAGyy_3cpSWGXoGQSiQd7bL_Thoo8yIs,2784
|
|
@@ -223,9 +223,9 @@ dtlpy/utilities/reports/report.py,sha256=3nEsNnIWmdPEsd21nN8vMMgaZVcPKn9iawKTTeO
|
|
|
223
223
|
dtlpy/utilities/videos/__init__.py,sha256=SV3w51vfPuGBxaMeNemx6qEMHw_C4lLpWNGXMvdsKSY,734
|
|
224
224
|
dtlpy/utilities/videos/video_player.py,sha256=LCxg0EZ_DeuwcT7U_r7MRC6Q19s0xdFb7x5Gk39PRms,24072
|
|
225
225
|
dtlpy/utilities/videos/videos.py,sha256=Dj916B4TQRIhI7HZVevl3foFrCsPp0eeWwvGbgX3-_A,21875
|
|
226
|
-
dtlpy-1.
|
|
227
|
-
dtlpy-1.
|
|
228
|
-
dtlpy-1.
|
|
226
|
+
dtlpy-1.100.5.data/scripts/dlp,sha256=-F0vSCWuSOOtgERAtsPMPyMmzitjhB7Yeftg_PDlDjw,10
|
|
227
|
+
dtlpy-1.100.5.data/scripts/dlp.bat,sha256=QOvx8Dlx5dUbCTMpwbhOcAIXL1IWmgVRSboQqDhIn3A,37
|
|
228
|
+
dtlpy-1.100.5.data/scripts/dlp.py,sha256=tEokRaDINISXnq8yNx_CBw1qM5uwjYiZoJOYGqWB3RU,4267
|
|
229
229
|
tests/assets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
230
230
|
tests/assets/models_flow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
231
231
|
tests/assets/models_flow/failedmain.py,sha256=n8F4eu_u7JPrJ1zedbJPvv9e3lHb3ihoErqrBIcseEc,1847
|
|
@@ -233,9 +233,9 @@ tests/assets/models_flow/main.py,sha256=xotAjdHpFnIic3Wb-4f7GSg2igtuXZjvRPiYdCTa
|
|
|
233
233
|
tests/assets/models_flow/main_model.py,sha256=Hl_tv7Q6KaRL3yLkpUoLMRqu5-ab1QsUYPL6RPEoamw,2042
|
|
234
234
|
tests/features/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
235
235
|
tests/features/environment.py,sha256=V23cUx_p4VpNk9kc2I0BDZJHO_xcJBFJq8m3JlYCooc,16736
|
|
236
|
-
dtlpy-1.
|
|
237
|
-
dtlpy-1.
|
|
238
|
-
dtlpy-1.
|
|
239
|
-
dtlpy-1.
|
|
240
|
-
dtlpy-1.
|
|
241
|
-
dtlpy-1.
|
|
236
|
+
dtlpy-1.100.5.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
237
|
+
dtlpy-1.100.5.dist-info/METADATA,sha256=vOiJBLBtuWXJGkaq6eI81yRcUyFEAiMM9O6EvxoWtsw,3019
|
|
238
|
+
dtlpy-1.100.5.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
|
239
|
+
dtlpy-1.100.5.dist-info/entry_points.txt,sha256=C4PyKthCs_no88HU39eioO68oei64STYXC2ooGZTc4Y,43
|
|
240
|
+
dtlpy-1.100.5.dist-info/top_level.txt,sha256=ZWuLmQGUOtWAdgTf4Fbx884w1o0vBYq9dEc1zLv9Mig,12
|
|
241
|
+
dtlpy-1.100.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|