supervisely 6.73.283__py3-none-any.whl → 6.73.285__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 supervisely might be problematic. Click here for more details.

Files changed (34) hide show
  1. supervisely/_utils.py +9 -0
  2. supervisely/api/entity_annotation/figure_api.py +3 -0
  3. supervisely/api/module_api.py +35 -1
  4. supervisely/api/video/video_api.py +1 -1
  5. supervisely/api/video_annotation_tool_api.py +58 -7
  6. supervisely/nn/benchmark/base_benchmark.py +13 -2
  7. supervisely/nn/benchmark/base_evaluator.py +2 -0
  8. supervisely/nn/benchmark/comparison/detection_visualization/text_templates.py +5 -0
  9. supervisely/nn/benchmark/comparison/detection_visualization/vis_metrics/overview.py +25 -0
  10. supervisely/nn/benchmark/comparison/detection_visualization/visualizer.py +9 -3
  11. supervisely/nn/benchmark/instance_segmentation/evaluator.py +1 -0
  12. supervisely/nn/benchmark/instance_segmentation/text_templates.py +7 -0
  13. supervisely/nn/benchmark/object_detection/evaluator.py +15 -3
  14. supervisely/nn/benchmark/object_detection/metric_provider.py +21 -1
  15. supervisely/nn/benchmark/object_detection/text_templates.py +7 -0
  16. supervisely/nn/benchmark/object_detection/vis_metrics/key_metrics.py +12 -0
  17. supervisely/nn/benchmark/object_detection/vis_metrics/overview.py +41 -2
  18. supervisely/nn/benchmark/object_detection/visualizer.py +20 -0
  19. supervisely/nn/benchmark/semantic_segmentation/evaluator.py +1 -0
  20. supervisely/nn/benchmark/utils/detection/calculate_metrics.py +31 -33
  21. supervisely/nn/benchmark/visualization/renderer.py +2 -0
  22. supervisely/nn/inference/cache.py +19 -1
  23. supervisely/nn/inference/inference.py +22 -0
  24. supervisely/nn/inference/tracking/base_tracking.py +362 -0
  25. supervisely/nn/inference/tracking/bbox_tracking.py +179 -129
  26. supervisely/nn/inference/tracking/mask_tracking.py +420 -329
  27. supervisely/nn/inference/tracking/point_tracking.py +325 -288
  28. supervisely/nn/inference/tracking/tracker_interface.py +346 -13
  29. {supervisely-6.73.283.dist-info → supervisely-6.73.285.dist-info}/METADATA +1 -1
  30. {supervisely-6.73.283.dist-info → supervisely-6.73.285.dist-info}/RECORD +34 -33
  31. {supervisely-6.73.283.dist-info → supervisely-6.73.285.dist-info}/LICENSE +0 -0
  32. {supervisely-6.73.283.dist-info → supervisely-6.73.285.dist-info}/WHEEL +0 -0
  33. {supervisely-6.73.283.dist-info → supervisely-6.73.285.dist-info}/entry_points.txt +0 -0
  34. {supervisely-6.73.283.dist-info → supervisely-6.73.285.dist-info}/top_level.txt +0 -0
@@ -1,15 +1,26 @@
1
+ import time
1
2
  import uuid
2
- from collections import OrderedDict
3
+ from collections import OrderedDict, namedtuple
3
4
  from logging import Logger
4
- from typing import Callable, Dict, Generator, List, Optional
5
+ from queue import Queue
6
+ from threading import Lock, Thread
7
+ from typing import Any, Callable, Dict, Generator, List, Optional
5
8
  from typing import OrderedDict as OrderedDictType
6
9
 
7
10
  import numpy as np
8
11
 
9
- import supervisely as sly
12
+ from supervisely._utils import find_value_by_keys
13
+ from supervisely.api.api import Api
10
14
  from supervisely.api.module_api import ApiField
11
15
  from supervisely.geometry.geometry import Geometry
12
- from supervisely.video_annotation.video_figure import VideoFigure
16
+ from supervisely.geometry.graph import GraphNodes
17
+ from supervisely.geometry.helpers import deserialize_geometry
18
+ from supervisely.geometry.point import Point
19
+ from supervisely.geometry.polygon import Polygon
20
+ from supervisely.geometry.polyline import Polyline
21
+ from supervisely.nn.inference.cache import InferenceImageCache
22
+ from supervisely.sly_logger import logger
23
+ from supervisely.video_annotation.key_id_map import KeyIdMap
13
24
 
14
25
 
15
26
  class TrackerInterface:
@@ -20,11 +31,11 @@ class TrackerInterface:
20
31
  load_all_frames=False,
21
32
  notify_in_predict=False,
22
33
  per_point_polygon_tracking=True,
23
- frame_loader: Callable[[sly.Api, int, int], np.ndarray] = None,
24
- frames_loader: Callable[[sly.Api, int, List[int]], List[np.ndarray]] = None,
34
+ frame_loader: Callable[[Api, int, int], np.ndarray] = None,
35
+ frames_loader: Callable[[Api, int, List[int]], List[np.ndarray]] = None,
25
36
  should_notify: bool = True,
26
37
  ):
27
- self.api: sly.Api = api
38
+ self.api: Api = api
28
39
  self.logger: Logger = api.logger
29
40
  self.frame_index = context["frameIndex"]
30
41
  self.frames_count = context["frames"]
@@ -131,7 +142,7 @@ class TrackerInterface:
131
142
  for geometry, frame_index in geometries_frame_indexes
132
143
  ]
133
144
  figures_keys = [uuid.uuid4() for _ in figures_json]
134
- key_id_map = sly.KeyIdMap()
145
+ key_id_map = KeyIdMap()
135
146
  self.api.video.figure._append_bulk(
136
147
  entity_id=self.video_id,
137
148
  figures_json=figures_json,
@@ -169,19 +180,19 @@ class TrackerInterface:
169
180
  points = 0
170
181
  for figure_id in self.figure_ids:
171
182
  figure = self.api.video.figure.get_info_by_id(figure_id)
172
- geometry = sly.deserialize_geometry(figure.geometry_type, figure.geometry)
183
+ geometry = deserialize_geometry(figure.geometry_type, figure.geometry)
173
184
  self.geometries[figure_id] = geometry
174
185
 
175
186
  self.api.logger.debug(f"Added {figure.geometry_type} #{figure_id}")
176
187
 
177
188
  # per point track notification
178
- if isinstance(geometry, sly.Point):
189
+ if isinstance(geometry, Point):
179
190
  points += 1
180
- elif isinstance(geometry, sly.Polygon):
191
+ elif isinstance(geometry, Polygon):
181
192
  points += len(geometry.exterior) + len(geometry.interior)
182
- elif isinstance(geometry, sly.GraphNodes):
193
+ elif isinstance(geometry, GraphNodes):
183
194
  points += len(geometry.nodes.items())
184
- elif isinstance(geometry, sly.Polyline):
195
+ elif isinstance(geometry, Polyline):
185
196
  points += len(geometry.exterior)
186
197
 
187
198
  if self.per_point_polygon_tracking:
@@ -289,3 +300,325 @@ class TrackerInterface:
289
300
  """Use this in prediction."""
290
301
  self._notify(task="get frames")
291
302
  return self._frames
303
+
304
+
305
+ class ThreadSafeStopIndicator:
306
+ def __init__(self):
307
+ self._stopped = False
308
+ self._reason = None
309
+ self._lock = Lock()
310
+
311
+ def stop(self, reason: Any = None):
312
+ if self.is_stopped():
313
+ return
314
+ with self._lock:
315
+ self._stopped = True
316
+ self._reason = reason
317
+
318
+ def is_stopped(self):
319
+ with self._lock:
320
+ return self._stopped
321
+
322
+ def get_reason(self):
323
+ with self._lock:
324
+ return self._reason
325
+
326
+
327
+ FrameImage = namedtuple("FrameImage", ["frame_index", "image"])
328
+
329
+
330
+ class TrackerInterfaceV2:
331
+ UPLOAD_SLEEP_TIME = 0.001 # 1ms
332
+ NOTIFY_SLEEP_TIME = 1 # 1s
333
+
334
+ def __init__(
335
+ self,
336
+ api: Api,
337
+ context: Dict,
338
+ cache: InferenceImageCache,
339
+ ):
340
+ self.api = api
341
+ self.context = context
342
+ self.video_id = find_value_by_keys(context, ["videoId", "video_id"])
343
+ self.frame_index = find_value_by_keys(context, ["frameIndex", "frame_index"])
344
+ self.frames_count = find_value_by_keys(context, ["frames", "framesCount", "frames_count"])
345
+ self.track_id = context.get("trackId", "auto")
346
+ self.direction = context.get("direction", "forward")
347
+ self.session_id = find_value_by_keys(context, ["sessionId", "session_id"], None)
348
+ self.figures = context.get("figures", None)
349
+ self.direct_progress = context.get("useDirectProgressMessages", False)
350
+ self.direction_n = 1 if self.direction == "forward" else -1
351
+ self.stop_indicator = ThreadSafeStopIndicator()
352
+ self.cache = cache
353
+ self.frame_indexes = list(
354
+ range(
355
+ self.frame_index,
356
+ self.frame_index + self.frames_count * self.direction_n + self.direction_n,
357
+ self.direction_n,
358
+ )
359
+ )
360
+
361
+ self.log_extra = {
362
+ "video_id": self.video_id,
363
+ "track_id": self.track_id,
364
+ "session_id": self.session_id,
365
+ }
366
+
367
+ # start caching task
368
+ self.run_cache_frames_task()
369
+
370
+ self.upload_sleep_time = self.UPLOAD_SLEEP_TIME
371
+ self.notify_sleep_time = self.NOTIFY_SLEEP_TIME
372
+ self.upload_queue = Queue()
373
+ self.notify_queue = Queue()
374
+ self.upload_thread = None
375
+ self.notify_thread = None
376
+ self._upload_f = None
377
+ self._notify_f = None
378
+
379
+ def __call__(self, upload_f, notify_f):
380
+ self.upload_f = upload_f
381
+ self.notify_f = notify_f
382
+ return self
383
+
384
+ def __enter__(self):
385
+ self.start()
386
+ return self
387
+
388
+ def __exit__(self, exc_type, exc_value, traceback):
389
+ self.wait_stop(exception=exc_value)
390
+ return False
391
+
392
+ @property
393
+ def upload_f(self):
394
+ return self._upload_f
395
+
396
+ @upload_f.setter
397
+ def upload_f(self, upload_f):
398
+ self._upload_f = upload_f
399
+ self.upload_thread = Thread(
400
+ target=self._upload_loop,
401
+ args=[
402
+ self.upload_queue,
403
+ self.notify_queue,
404
+ self.stop_indicator,
405
+ self._upload_f,
406
+ self.upload_sleep_time,
407
+ self._upload_exception_handler,
408
+ ],
409
+ daemon=True,
410
+ )
411
+
412
+ @property
413
+ def notify_f(self):
414
+ return self._notify_f
415
+
416
+ @notify_f.setter
417
+ def notify_f(self, notify_f):
418
+ self._notify_f = notify_f
419
+ self.notify_thread = Thread(
420
+ target=self._nofify_loop,
421
+ args=[
422
+ self.notify_queue,
423
+ self.stop_indicator,
424
+ self._notify_f,
425
+ self.notify_sleep_time,
426
+ self._notify_exception_handler,
427
+ ],
428
+ daemon=True,
429
+ )
430
+
431
+ def start(self):
432
+ if self.upload_thread is not None:
433
+ self.upload_thread.start()
434
+ if self.notify_thread is not None:
435
+ self.notify_thread.start()
436
+
437
+ def stop(self, exception: Exception = None):
438
+ self.stop_indicator.stop(exception)
439
+
440
+ def join(self, timeout: Optional[float] = 5 * 60):
441
+ if self.upload_thread is not None and self.upload_thread.is_alive():
442
+ self.upload_thread.join(timeout=timeout)
443
+ if self.notify_thread is not None and self.notify_thread.is_alive():
444
+ self.notify_thread.join(timeout=timeout)
445
+
446
+ def wait_stop(self, exception: Exception = None, timeout: Optional[float] = 5 * 60):
447
+ self.stop(exception)
448
+ self.join(timeout=timeout)
449
+
450
+ def is_stopped(self):
451
+ return self.stop_indicator.is_stopped()
452
+
453
+ def stop_reason(self):
454
+ return self.stop_indicator.get_reason()
455
+
456
+ @classmethod
457
+ def _upload_loop(
458
+ cls,
459
+ q: Queue,
460
+ notify_q: Queue,
461
+ stop_indicator: ThreadSafeStopIndicator,
462
+ upload_f: callable = None,
463
+ upload_sleep_time: float = None,
464
+ exception_handler: callable = None,
465
+ ):
466
+ logger.debug("Upload loop started")
467
+ if upload_f is None:
468
+ logger.warning("Upload function is not provided. Exiting upload loop.")
469
+ return
470
+ upload_sleep_time = upload_sleep_time or cls.UPLOAD_SLEEP_TIME
471
+ try:
472
+ while True:
473
+ items = []
474
+ while not q.empty():
475
+ items.append(q.get_nowait())
476
+ if len(items) > 0:
477
+ upload_f(items)
478
+ for item in items:
479
+ notify_q.put(item)
480
+ elif stop_indicator.is_stopped():
481
+ logger.debug("stop event is set. returning from upload loop")
482
+ return
483
+ time.sleep(upload_sleep_time)
484
+ except Exception as e:
485
+ if exception_handler is not None:
486
+ e = exception_handler(e)
487
+ if not isinstance(e, Exception):
488
+ return
489
+ raise e
490
+ logger.error("Error in upload loop: %s", str(e), exc_info=True)
491
+ raise
492
+
493
+ @classmethod
494
+ def _nofify_loop(
495
+ cls,
496
+ q: Queue,
497
+ stop_indicator: ThreadSafeStopIndicator,
498
+ notify_f: callable = None,
499
+ notify_sleep_time: float = None,
500
+ exception_handler: callable = None,
501
+ ):
502
+ logger.debug("Notify loop started")
503
+ if notify_f is None:
504
+ logger.warning("Notify function is not provided. Exiting notify loop.")
505
+ return
506
+ notify_sleep_time = notify_sleep_time or cls.NOTIFY_SLEEP_TIME
507
+ try:
508
+ while True:
509
+ items = []
510
+ while not q.empty():
511
+ items.append(q.get_nowait())
512
+ if len(items) > 0:
513
+ notify_f(items)
514
+ elif stop_indicator.is_stopped():
515
+ logger.debug(f"stop event is set. returning from notify loop")
516
+ return
517
+ time.sleep(notify_sleep_time)
518
+ except Exception as e:
519
+ if exception_handler is not None:
520
+ e = exception_handler(e)
521
+ if not isinstance(e, Exception):
522
+ return
523
+ raise e
524
+ logger.error("Error in notify loop: %s", str(e), exc_info=True)
525
+ raise
526
+
527
+ def run_cache_frames_task(self):
528
+ if self.cache.is_persistent:
529
+ frame_ranges = None
530
+ else:
531
+ frame_ranges = [
532
+ self.frame_index,
533
+ self.frame_index + self.frames_count * self.direction_n,
534
+ ]
535
+ if self.direction_n == -1:
536
+ frame_ranges = frame_ranges[::-1]
537
+ frame_ranges = [frame_ranges]
538
+ self.cache.run_cache_task_manually(
539
+ self.api,
540
+ frame_ranges,
541
+ video_id=self.video_id,
542
+ )
543
+
544
+ def frames_loader_generator(
545
+ self, batch_size=2, step=1
546
+ ) -> Generator[List[FrameImage], None, None]:
547
+ step = step * self.direction_n
548
+ batch = []
549
+ t = time.monotonic()
550
+ for frame_i, frame in zip(
551
+ self.frame_indexes,
552
+ self.cache.frames_loader(
553
+ self.api, video_id=self.video_id, frame_indexes=self.frame_indexes
554
+ ),
555
+ ):
556
+ batch.append(FrameImage(frame_i, frame))
557
+ if len(batch) == batch_size:
558
+ _get_indexes_str = lambda b: ", ".join(map(lambda x: str(x.frame_index), b))
559
+ if len(batch) > 16:
560
+ batch_indexes_str = (
561
+ _get_indexes_str(batch[:8]) + " ... " + _get_indexes_str(batch[-8:])
562
+ )
563
+ else:
564
+ batch_indexes_str = _get_indexes_str(batch)
565
+
566
+ logger.debug(
567
+ f"Frames [{batch_indexes_str}] loaded. Time: {time.monotonic() - t}",
568
+ extra=self.log_extra,
569
+ )
570
+ yield batch
571
+ t = time.monotonic()
572
+ batch = batch[step:]
573
+
574
+ def load_all_frames(self):
575
+ return next(self.frames_loader_generator(batch_size=len(self.frame_indexes)))
576
+
577
+ def add_prediction(self, item: Any):
578
+ self.upload_queue.put(item)
579
+
580
+ def notify_progress(
581
+ self,
582
+ progress_current: int,
583
+ progress_total: int,
584
+ frame_range: List[int] = None,
585
+ ):
586
+ logger.debug(
587
+ f"Notify progress: {progress_current}/{progress_total} on frames {frame_range}",
588
+ extra=self.log_extra,
589
+ )
590
+ if self.direct_progress:
591
+ self.api.vid_ann_tool.set_direct_tracking_progress(
592
+ self.session_id,
593
+ self.video_id,
594
+ self.track_id,
595
+ frame_range=frame_range,
596
+ progress_current=progress_current,
597
+ progress_total=progress_total,
598
+ )
599
+ else:
600
+ stopped = self.api.video.notify_progress(
601
+ self.track_id,
602
+ self.video_id,
603
+ frame_range[0],
604
+ frame_range[1],
605
+ progress_current,
606
+ progress_total,
607
+ )
608
+ if stopped and progress_current < progress_total:
609
+ logger.info("Task stopped by user.", extra=self.log_extra)
610
+ self.stop()
611
+
612
+ def _upload_exception_handler(self, exception: Exception):
613
+ logger.error(
614
+ "Error in upload loop: %s", str(exception), exc_info=True, extra=self.log_extra
615
+ )
616
+ self.stop_indicator.stop(exception)
617
+ raise exception
618
+
619
+ def _notify_exception_handler(self, exception: Exception):
620
+ logger.error(
621
+ "Error in notify loop: %s", str(exception), exc_info=True, extra=self.log_extra
622
+ )
623
+ self.stop_indicator.stop(exception)
624
+ raise exception
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: supervisely
3
- Version: 6.73.283
3
+ Version: 6.73.285
4
4
  Summary: Supervisely Python SDK.
5
5
  Home-page: https://github.com/supervisely/supervisely
6
6
  Author: Supervisely
@@ -1,6 +1,6 @@
1
1
  supervisely/README.md,sha256=XM-DiMC6To3I9RjQZ0c61905EFRR_jnCUx2q3uNR-X8,3331
2
2
  supervisely/__init__.py,sha256=bvuMHtPSeGkhj3vVvcVtyhVcMqI5OEBPflLcy8HIqN8,10833
3
- supervisely/_utils.py,sha256=I4nZ0L7NS6144r-CQ2VJvLeUJZ1bCi4pYXH4Gxo3-D4,15763
3
+ supervisely/_utils.py,sha256=DX_2n8zWTG2AzW8bCvU9z9joLzcwzVjLmvslVF39pE8,16022
4
4
  supervisely/function_wrapper.py,sha256=R5YajTQ0GnRp2vtjwfC9hINkzQc0JiyGsu8TER373xY,1912
5
5
  supervisely/sly_logger.py,sha256=LG1wTyyctyEKuCuKM2IKf_SMPH7BzkTsFdO-0tnorzg,6225
6
6
  supervisely/tiny_timer.py,sha256=hkpe_7FE6bsKL79blSs7WBaktuPavEVu67IpEPrfmjE,183
@@ -32,7 +32,7 @@ supervisely/api/image_api.py,sha256=qZwTjeCo6bkEuXDuB8RhhP0g6PzlRuCXJkUfN9rsUZ4,
32
32
  supervisely/api/import_storage_api.py,sha256=BDCgmR0Hv6OoiRHLCVPKt3iDxSVlQp1WrnKhAK_Zl84,460
33
33
  supervisely/api/issues_api.py,sha256=BqDJXmNoTzwc3xe6_-mA7FDFC5QQ-ahGbXk_HmpkSeQ,17925
34
34
  supervisely/api/labeling_job_api.py,sha256=odnzZjp29yM16Gq-FYkv-OA4WFMNJCLFo4qSikW2A7c,56280
35
- supervisely/api/module_api.py,sha256=Jc_nf5ZgQdzcLYVbt6Vx7IT7KvXOKNqVIETXuewhnpg,43359
35
+ supervisely/api/module_api.py,sha256=HrHndEvG684ULGchmFiFx0VsbSoihkq97iFPBFMY-dM,44345
36
36
  supervisely/api/neural_network_api.py,sha256=ktPVRO4Jeulougio8F0mioJJHwRJcX250Djp1wBoQ9c,7620
37
37
  supervisely/api/object_class_api.py,sha256=-rQcKwhBw3iL9KNH9c1ROgoimgWM1ls6Wi_tb1R-MzY,7683
38
38
  supervisely/api/plugin_api.py,sha256=TlfrosdRuYG4NUxk92QiQoVaOdztFspPpygyVa3M3zk,5283
@@ -45,11 +45,11 @@ supervisely/api/storage_api.py,sha256=FPGYf3Rn3LBoe38RBNdoiURs306oshzvKOEOQ56XAb
45
45
  supervisely/api/task_api.py,sha256=yX0GqL5Kg5DuPXP0GpoRSVmjrzSzIvMMHo5Lrf4_R1c,39610
46
46
  supervisely/api/team_api.py,sha256=bEoz3mrykvliLhKnzEy52vzdd_H8VBJCpxF-Bnek9Q8,19467
47
47
  supervisely/api/user_api.py,sha256=4S97yIc6AMTZCa0N57lzETnpIE8CeqClvCb6kjUkgfc,24940
48
- supervisely/api/video_annotation_tool_api.py,sha256=Uy1MvT-M7vjC6y-0-V4wFCO-fZt8_aWneNiEJgr_jhU,5133
48
+ supervisely/api/video_annotation_tool_api.py,sha256=3A9-U8WJzrTShP_n9T8U01M9FzGYdeS51CCBTzUnooo,6686
49
49
  supervisely/api/workspace_api.py,sha256=5KAxpI9DKBmgF_pyQaXHpGT30HZ9wRtR6DP3FoYFZtY,9228
50
50
  supervisely/api/entity_annotation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
51
  supervisely/api/entity_annotation/entity_annotation_api.py,sha256=K79KdDyepQv4FiNQHBj9V4-zLIemxK9WG1ig1bfBKb8,3083
52
- supervisely/api/entity_annotation/figure_api.py,sha256=_JS1x0jn5neoCnZCBKHUBwspoHg92N-sJ9Ty9h07Mvg,24427
52
+ supervisely/api/entity_annotation/figure_api.py,sha256=deYCZNG7JeDhxlYew51FyGvqY3dc7fkERtwmBPJmHcw,24503
53
53
  supervisely/api/entity_annotation/object_api.py,sha256=gbcNvN_KY6G80Me8fHKQgryc2Co7VU_kfFd1GYILZ4E,8875
54
54
  supervisely/api/entity_annotation/tag_api.py,sha256=M-28m9h8R4k9Eqo6P1S0UH8_D5kqCwAvQLYY6_Yz4oM,11161
55
55
  supervisely/api/pointcloud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -64,7 +64,7 @@ supervisely/api/pointcloud/pointcloud_object_api.py,sha256=bO1USWb9HAywG_CW4CDu1
64
64
  supervisely/api/pointcloud/pointcloud_tag_api.py,sha256=iShtr052nOElxsyMyZEUT2vypEm6kP00gnP13ABX24A,4691
65
65
  supervisely/api/video/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
66
  supervisely/api/video/video_annotation_api.py,sha256=nvbn_ofcqFCZ2qKgu0O5y5zOHxFc4tsY-o93sUgqlWk,14134
67
- supervisely/api/video/video_api.py,sha256=KO_Nfqa4xDWrc7FqOR14PciC0TX8PF0g0peqgPnctEE,94677
67
+ supervisely/api/video/video_api.py,sha256=ma33Et1LKlACpyvksBYG9tbGNV_1ZSEuSAAsYpLP8qU,94666
68
68
  supervisely/api/video/video_figure_api.py,sha256=quksohjhgrK2l2-PtbbNE99fOW6uWXX59-_4xfc-I-k,6244
69
69
  supervisely/api/video/video_frame_api.py,sha256=4GwSI4xdCNYEUvTqzKc-Ewd44fw5zqkFoD24jrrN_aY,10214
70
70
  supervisely/api/video/video_object_api.py,sha256=IC0NP8EoIT_d3xxDRgz2cA3ixSiuJ5ymy64eS-RfmDM,2227
@@ -744,23 +744,23 @@ supervisely/nn/artifacts/utils.py,sha256=C4EaMi95MAwtK5TOnhK4sQ1BWvgwYBxXyRStkhY
744
744
  supervisely/nn/artifacts/yolov5.py,sha256=slh05EpQsxqgKwB9KMClshdBxPBN3ZWZ6S4B80ECEt4,1724
745
745
  supervisely/nn/artifacts/yolov8.py,sha256=sFd9kU7Gdowq6WH1S3NdlQeoL9jjQKmRYb51fG_wbDk,1446
746
746
  supervisely/nn/benchmark/__init__.py,sha256=7jDezvavJFtO9mDeB2TqW8N4sD8TsHQBPpA9RESleIQ,610
747
- supervisely/nn/benchmark/base_benchmark.py,sha256=2bNKZgcU3l1CTkdP9Glfze5-G2JGtU-V3BFEOKnrdXw,25281
748
- supervisely/nn/benchmark/base_evaluator.py,sha256=6JbAkphcZTghfIYFyrWDWb59_exbPVx23yot_LPOfIA,5221
747
+ supervisely/nn/benchmark/base_benchmark.py,sha256=Xnb0jL0voBPC-s_eVYSYbYv-xVfLYtQf1tHLnJ9ktq8,25713
748
+ supervisely/nn/benchmark/base_evaluator.py,sha256=sc8gNn3myGA8sGnP6EIiTp24JPXUQ9Ou-8BmTf-Dt7w,5248
749
749
  supervisely/nn/benchmark/base_visualizer.py,sha256=7woiYmztDzYZlbhL1hTfJnIi26RFi4obF2VLA519uxQ,10092
750
750
  supervisely/nn/benchmark/cv_tasks.py,sha256=ShoAbuNzfMYj0Se-KOnl_-dJnrmvN6Aukxa0eq28bFw,239
751
751
  supervisely/nn/benchmark/comparison/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
752
752
  supervisely/nn/benchmark/comparison/base_visualizer.py,sha256=ldJHfGnrbudbxP6ErzBIorPv9r2L9vV8o6UTNqLBfGI,5341
753
753
  supervisely/nn/benchmark/comparison/model_comparison.py,sha256=qgd8TwXJ2aiIqB29__EnDV391fBcRfdaIzUYpTyFp9w,7055
754
754
  supervisely/nn/benchmark/comparison/detection_visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
755
- supervisely/nn/benchmark/comparison/detection_visualization/text_templates.py,sha256=lBqcNsyOX04R2jL6Efu43xB2aHC1qx28Kw27DLuk66o,28336
756
- supervisely/nn/benchmark/comparison/detection_visualization/visualizer.py,sha256=JSaFJnKptkITPjzBK_1T-HpYLnVuEzIvRVeismmk5O0,11159
755
+ supervisely/nn/benchmark/comparison/detection_visualization/text_templates.py,sha256=JQ2DqGsvUBbjVmEsq9pGc41U8WQrtaX_Gin4IBguIow,28735
756
+ supervisely/nn/benchmark/comparison/detection_visualization/visualizer.py,sha256=1PZU9P7VP4lPZDuv9dg_f3il03SQ_zRr5G_L6Q72gbQ,11421
757
757
  supervisely/nn/benchmark/comparison/detection_visualization/vis_metrics/__init__.py,sha256=2cqjAOwahJoptYhbFKEWws8gRW3K3bxlA9KnQleCrsA,1125
758
758
  supervisely/nn/benchmark/comparison/detection_visualization/vis_metrics/avg_precision_by_class.py,sha256=f4FMY-XCiNs0VA-e0aOFVNImjTQSnF4wTLNRSlj2oYA,4636
759
759
  supervisely/nn/benchmark/comparison/detection_visualization/vis_metrics/calibration_score.py,sha256=IKg2rofo21xGxQIoQyNlZ-UqOpAVviSn_A9SDkokC0w,7592
760
760
  supervisely/nn/benchmark/comparison/detection_visualization/vis_metrics/explore_predictions.py,sha256=axaviTZ4dLVWIc2R-o0Kv8g8Zr1SQVfyeokoLEA9Eqw,6484
761
761
  supervisely/nn/benchmark/comparison/detection_visualization/vis_metrics/localization_accuracy.py,sha256=OYmnloods1UYQ8SIPAcyOK33w0iYSn637OeMKNTrgbA,5342
762
762
  supervisely/nn/benchmark/comparison/detection_visualization/vis_metrics/outcome_counts.py,sha256=vev6EOc7-01i-5VAyQQwm9FGOMFYcWfJ2Y6ufUWg-DQ,13143
763
- supervisely/nn/benchmark/comparison/detection_visualization/vis_metrics/overview.py,sha256=YZIadwwQQvr5XfzFGj6_NGylad00ERLV1fYnke_g_VA,9256
763
+ supervisely/nn/benchmark/comparison/detection_visualization/vis_metrics/overview.py,sha256=drRm_Hn8Da4Oc_dsa4ol_mZSeMRNYT1-Zkmb0LbiEAA,10193
764
764
  supervisely/nn/benchmark/comparison/detection_visualization/vis_metrics/pr_curve.py,sha256=66hs426dR1_TUps9K-UhBp5_xBiFjIouKcF_5gP-Hn8,4797
765
765
  supervisely/nn/benchmark/comparison/detection_visualization/vis_metrics/precision_recal_f1.py,sha256=602GFNpKZjeRhxUTdlcE6ZczcFEGEjp0qLoTbkM54M4,11558
766
766
  supervisely/nn/benchmark/comparison/detection_visualization/vis_metrics/speedtest.py,sha256=sQDkzfpVNaSYBHVcHYqydRSWN0i-yV9uhtEAggg295A,10879
@@ -778,17 +778,17 @@ supervisely/nn/benchmark/comparison/semantic_segmentation/vis_metrics/speedtest.
778
778
  supervisely/nn/benchmark/instance_segmentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
779
779
  supervisely/nn/benchmark/instance_segmentation/benchmark.py,sha256=lTDzgKGpfeF5o_a2nS56wiAsUQPH1eubk37b9CaB2KI,1171
780
780
  supervisely/nn/benchmark/instance_segmentation/evaluation_params.yaml,sha256=POzpiaxnxuwAPSNQOGgjoUPfsk6Lf5hb9GLHwltWY5Y,94
781
- supervisely/nn/benchmark/instance_segmentation/evaluator.py,sha256=KZhCZ0UWfw_eCrNDtv4WJj3ZQI2w66qGl4Lu9Bl85_Q,2784
782
- supervisely/nn/benchmark/instance_segmentation/text_templates.py,sha256=sGiGnpIyuOP35f4NoDT0BWNmscsx_T1XZ_igGvCkkBg,25481
781
+ supervisely/nn/benchmark/instance_segmentation/evaluator.py,sha256=mpCi8S6YNwlVvgcERQSHBOhC9PrSfQkQ55pPTcK6V9c,2811
782
+ supervisely/nn/benchmark/instance_segmentation/text_templates.py,sha256=_ZIU_3-xlUGKTcbEthxB4Ngt12azdC7pxpgqHHw7M3I,25780
783
783
  supervisely/nn/benchmark/instance_segmentation/visualizer.py,sha256=8NscOKy7JK4AG-Czu3SM0qJQXLDfKD9URdG1d4nz89E,564
784
784
  supervisely/nn/benchmark/object_detection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
785
785
  supervisely/nn/benchmark/object_detection/base_vis_metric.py,sha256=XjUnFCnCMYLrpjojIOwiRNaSsSLYpozTHWfwLkaCd5U,1612
786
786
  supervisely/nn/benchmark/object_detection/benchmark.py,sha256=Wb4xlFXilIMVfsifNNQY25uE52NeEDLzQpnq8QPYq9U,1086
787
787
  supervisely/nn/benchmark/object_detection/evaluation_params.yaml,sha256=POzpiaxnxuwAPSNQOGgjoUPfsk6Lf5hb9GLHwltWY5Y,94
788
- supervisely/nn/benchmark/object_detection/evaluator.py,sha256=Oajs2a-lpudSF076_99-he7uDtqnmQGp4aayoQjNRH0,6801
789
- supervisely/nn/benchmark/object_detection/metric_provider.py,sha256=j7-_ZGjW8qRpv_v9EMyqO1rK9pkcgjRcInTA8CL3we4,20169
790
- supervisely/nn/benchmark/object_detection/text_templates.py,sha256=wv6BkcrfdEKldbXtz4ljkbENIIOdeiUr79U4iRgUx6A,25727
791
- supervisely/nn/benchmark/object_detection/visualizer.py,sha256=Nemp2ZjipbK3S119Yx_izoZuS86jx2U-wtah8TfthS0,31734
788
+ supervisely/nn/benchmark/object_detection/evaluator.py,sha256=EOQQbmwQqjjvbRu3tY24SRA7K8nyqshR92gUcP1lcrY,7371
789
+ supervisely/nn/benchmark/object_detection/metric_provider.py,sha256=MLVRnSwMQ9lfrlgBt4ThIHTVKY-6zuuEWK5-yVsmaj0,21140
790
+ supervisely/nn/benchmark/object_detection/text_templates.py,sha256=J5xUPCGY-QWxc5AEt_u9_2r5q0LBlIzsa007H0GgoeU,26026
791
+ supervisely/nn/benchmark/object_detection/visualizer.py,sha256=NpLKVW5fo6N0kYzgLsfY66wvCv38G3k-SNm4HImXt6g,32366
792
792
  supervisely/nn/benchmark/object_detection/vis_metrics/__init__.py,sha256=AXCLHEySEdR-B-5sfDoWBmmOLBVlyW2U_xr8Ta42sQI,2096
793
793
  supervisely/nn/benchmark/object_detection/vis_metrics/confidence_distribution.py,sha256=OlwkPgzEQ-RegcLZHVUVOL0n6I_2iayPVpAIie4y2O8,3615
794
794
  supervisely/nn/benchmark/object_detection/vis_metrics/confidence_score.py,sha256=r_saaZI4WB7C7ykNb1obmf8kEOkphLA4pInDoS6dXXU,4005
@@ -797,11 +797,11 @@ supervisely/nn/benchmark/object_detection/vis_metrics/explore_predictions.py,sha
797
797
  supervisely/nn/benchmark/object_detection/vis_metrics/f1_score_at_different_iou.py,sha256=6y2Kx-R_t4SdJkdWNyZQ6TGjCC-u6KhXb4cCno4GuTk,2882
798
798
  supervisely/nn/benchmark/object_detection/vis_metrics/frequently_confused.py,sha256=7rObk7WNsfwK7xBWl3aOxcn0uD48njEc04fQIPHc3_4,4678
799
799
  supervisely/nn/benchmark/object_detection/vis_metrics/iou_distribution.py,sha256=lv4Bk8W4X8ZhvQKyMXI46d240PNlMFx1hdji_aoTS50,3601
800
- supervisely/nn/benchmark/object_detection/vis_metrics/key_metrics.py,sha256=Z8qArtjqjjRW5Z4mBuanzK3b4LLfH6NgNbO2Lt0kXyo,4316
800
+ supervisely/nn/benchmark/object_detection/vis_metrics/key_metrics.py,sha256=byucJuHYWSXIZU8U1Dc44QDpG3lTlhoNdUfD1b-uriw,4721
801
801
  supervisely/nn/benchmark/object_detection/vis_metrics/model_predictions.py,sha256=gsGDsesiwOcqeFvHr33b4PSJNw6MoA5brO-qRydRtsA,5944
802
802
  supervisely/nn/benchmark/object_detection/vis_metrics/outcome_counts.py,sha256=HuTgisYmXCSUeF5WOahy-uaCdvRLsNzg28BDrZ-5hww,7161
803
803
  supervisely/nn/benchmark/object_detection/vis_metrics/outcome_counts_per_class.py,sha256=GBq0KlPka5z4cxHcKCe2eVOI_h3qlWUqGCyhYs6mjrk,6825
804
- supervisely/nn/benchmark/object_detection/vis_metrics/overview.py,sha256=tEHxK8NuquAcMcDxdn2G6GEIHp7eauOiTIQP1yFvgSs,5058
804
+ supervisely/nn/benchmark/object_detection/vis_metrics/overview.py,sha256=M6E--Yd1ztP4VBjR6VDUVrj2hgs5mwJF-vhWIjgVGkw,6376
805
805
  supervisely/nn/benchmark/object_detection/vis_metrics/pr_curve.py,sha256=EeZmyNlTVQLQ-0wIDGdvFmRkahJBBiOKSmWiAJ8Bfks,3478
806
806
  supervisely/nn/benchmark/object_detection/vis_metrics/pr_curve_by_class.py,sha256=Bl_buVvH8SVqwsc4DcHnojMOqpwTnRgXFt9yw_Y1BR0,1607
807
807
  supervisely/nn/benchmark/object_detection/vis_metrics/precision.py,sha256=cAgMrp13uulHfM8xnPDZyR6PqS8nck1Fo7YPpvHPCbw,2708
@@ -814,7 +814,7 @@ supervisely/nn/benchmark/semantic_segmentation/__init__.py,sha256=Hx5bFhRZq8BXvN
814
814
  supervisely/nn/benchmark/semantic_segmentation/base_vis_metric.py,sha256=mwGjRUTPrIj56WHsxNW_4fcZM0uw1xm6B5wh25FijyQ,1788
815
815
  supervisely/nn/benchmark/semantic_segmentation/benchmark.py,sha256=8rnU6I94q0GUdXWwluZu0_Sac_eU2-Az133tHF1dA3U,1202
816
816
  supervisely/nn/benchmark/semantic_segmentation/evaluation_params.yaml,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
817
- supervisely/nn/benchmark/semantic_segmentation/evaluator.py,sha256=0zNR60As5-8ww3BVj_qNq70VJUDyuUAxcUiSj7FQS_Q,7233
817
+ supervisely/nn/benchmark/semantic_segmentation/evaluator.py,sha256=XafPMpGL6v0ZQ-m7DkEjoY7W6fGCJNKolql5BA3M8V0,7261
818
818
  supervisely/nn/benchmark/semantic_segmentation/metric_provider.py,sha256=GwdRvyG0_nFpng6jN8ISFcMLfDbBd-fwdtoWR2XPKw4,6552
819
819
  supervisely/nn/benchmark/semantic_segmentation/text_templates.py,sha256=7yRRD2FAdJHGSRqBVIjNjzCduKzaepA1OWtggi7B0Dg,8580
820
820
  supervisely/nn/benchmark/semantic_segmentation/visualizer.py,sha256=Nt2-OOWKQ8fbaXFk5QeEaMtMURKPQebgjzDytVgQk0g,13196
@@ -833,7 +833,7 @@ supervisely/nn/benchmark/semantic_segmentation/vis_metrics/speedtest.py,sha256=0
833
833
  supervisely/nn/benchmark/semantic_segmentation/vis_metrics/vis_texts.py,sha256=rRdYZxmhQX4T3RsXJVGp34NMZPz8jUHtVvBN5BpPJ5I,603
834
834
  supervisely/nn/benchmark/utils/__init__.py,sha256=JHT73gWdwgLJKTiCpDdwggm1t_EWB0JCC90-zD7reXM,741
835
835
  supervisely/nn/benchmark/utils/detection/__init__.py,sha256=L3QKGuKUlR2N_QFRTRsa6gfLDbksIaFMYO0Hukxxy1U,172
836
- supervisely/nn/benchmark/utils/detection/calculate_metrics.py,sha256=1Vrf4Npf8lHAE_WZRS90fa5jFh4BofDn6RWCFcd48r8,11484
836
+ supervisely/nn/benchmark/utils/detection/calculate_metrics.py,sha256=LXZET5yLp9S7Uq2eX4HpAMnBMxTI5Q2CgKSc1mCfaRM,11388
837
837
  supervisely/nn/benchmark/utils/detection/metric_provider.py,sha256=cgF6uzF7XOvU2CpxyU7zuK1HH6hhNiIV3vQc8MAzwMU,19934
838
838
  supervisely/nn/benchmark/utils/detection/metrics.py,sha256=oyictdJ7rRDUkaVvHoxntywW5zZweS8pIJ1bN6JgXtE,2420
839
839
  supervisely/nn/benchmark/utils/detection/sly2coco.py,sha256=0O2LSCU5zIX34mD4hZIv8O3-j6LwnB0DqhiVPAiosO8,6883
@@ -845,7 +845,7 @@ supervisely/nn/benchmark/utils/semantic_segmentation/loader.py,sha256=_5ZZ7Nkd8W
845
845
  supervisely/nn/benchmark/utils/semantic_segmentation/utils.py,sha256=X5NiR02R-0To2_SuSGHZZccl_-Bupg5F9d7nziIMRMc,3874
846
846
  supervisely/nn/benchmark/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
847
847
  supervisely/nn/benchmark/visualization/evaluation_result.py,sha256=733HJL4rJa5XqCJydW9vSyaepvpHzym9wQsw1wFEgeI,10251
848
- supervisely/nn/benchmark/visualization/renderer.py,sha256=s1YexuKDHrI2gP-Qpz1fAXCh30dBQM7whnMwjbOf61M,3804
848
+ supervisely/nn/benchmark/visualization/renderer.py,sha256=j6dFqIGa9M0DbVVR-jgJab-MzUUiw47coHiiBF_H_jQ,3923
849
849
  supervisely/nn/benchmark/visualization/report_template.html,sha256=tylBK5Bb2cqKACK1GZUKyIjPS9yHQFHAS-QeEEwhqTE,2172
850
850
  supervisely/nn/benchmark/visualization/vis_click_data.py,sha256=hBeVepHngTGVHK3MiWe8qZY87taifxnoUXq22W2xaqo,3724
851
851
  supervisely/nn/benchmark/visualization/widgets/__init__.py,sha256=UovmhwLH4Au81JFrFz0NwPasaIqPEI-zXN-JntTc2FU,949
@@ -871,8 +871,8 @@ supervisely/nn/benchmark/visualization/widgets/sidebar/sidebar.py,sha256=tKPURRS
871
871
  supervisely/nn/benchmark/visualization/widgets/table/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
872
872
  supervisely/nn/benchmark/visualization/widgets/table/table.py,sha256=atmDnF1Af6qLQBUjLhK18RMDKAYlxnsuVHMSEa5a-e8,4319
873
873
  supervisely/nn/inference/__init__.py,sha256=mtEci4Puu-fRXDnGn8RP47o97rv3VTE0hjbYO34Zwqg,1622
874
- supervisely/nn/inference/cache.py,sha256=_pPSpkl8Wkqkiidn0vu6kWE19cngd80av--jncHxMEQ,30510
875
- supervisely/nn/inference/inference.py,sha256=IDkMFsURnB-vBM-2Kf-M7D5IQw6VUoIwVoh_IIdzA9Q,143958
874
+ supervisely/nn/inference/cache.py,sha256=h-pP_7th0ana3oJ75sFfTbead3hdKUvYA8Iq2OXDx3I,31317
875
+ supervisely/nn/inference/inference.py,sha256=fDPiX9VNnyGgdCxNzUz456ihTD44uxuLdSOuNgvrwwY,144860
876
876
  supervisely/nn/inference/session.py,sha256=jmkkxbe2kH-lEgUU6Afh62jP68dxfhF5v6OGDfLU62E,35757
877
877
  supervisely/nn/inference/video_inference.py,sha256=8Bshjr6rDyLay5Za8IB8Dr6FURMO2R_v7aELasO8pR4,5746
878
878
  supervisely/nn/inference/gui/__init__.py,sha256=wCxd-lF5Zhcwsis-wScDA8n1Gk_1O00PKgDviUZ3F1U,221
@@ -905,13 +905,14 @@ supervisely/nn/inference/salient_object_segmentation/salient_object_segmentation
905
905
  supervisely/nn/inference/semantic_segmentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
906
906
  supervisely/nn/inference/semantic_segmentation/semantic_segmentation.py,sha256=xpmViSYm1v_ZxlYyqiD_DiB7_LEynv9ZoU0t2QHEx8A,3370
907
907
  supervisely/nn/inference/tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
908
- supervisely/nn/inference/tracking/bbox_tracking.py,sha256=EBEwLczXugCSYaIUFxB33h7SOIkPDEBWLhr_TbASNOA,17441
908
+ supervisely/nn/inference/tracking/base_tracking.py,sha256=OW7Rt7MIoyKvMEFBMpdCp80Kj7cLoZ3bkYE4YaYtN0I,13865
909
+ supervisely/nn/inference/tracking/bbox_tracking.py,sha256=sPE-jZjSKf5QuMXmYUOkP1N6guOHK1_MvXK30MapB8A,21090
909
910
  supervisely/nn/inference/tracking/functional.py,sha256=LpVu2gvOOpr9D_uvwTPZey1wUCAhV-E20RPKmCSIrK4,1774
910
- supervisely/nn/inference/tracking/mask_tracking.py,sha256=qL9eUSqhzJwJMYaAzXX31oOu9EgdnGbsNwK9pOlV148,19610
911
+ supervisely/nn/inference/tracking/mask_tracking.py,sha256=1G0yHMw5BSzDGD4Ps-yRhr50ZeB88pMY6b-rmg2FFHw,25576
911
912
  supervisely/nn/inference/tracking/object_tracking_3d.py,sha256=Kqvx1qe1G8F1VtdBiy2HJ251rJU6s3LWhj0ZedhrmUw,4327
912
- supervisely/nn/inference/tracking/point_tracking.py,sha256=Dweiq3dJUuwlFYnJbyx28L3IisNeg-1KQf2mBHrr7yI,22050
913
+ supervisely/nn/inference/tracking/point_tracking.py,sha256=I0kT_YGqOudyX4LMSZfnWkB1UnUQ9ucawTyR-tFonc8,24644
913
914
  supervisely/nn/inference/tracking/tracker3d_interface.py,sha256=7yIkNO9rgkzQuyXUUccLwqlv5k7RPbxTqz9uI4FylLE,2781
914
- supervisely/nn/inference/tracking/tracker_interface.py,sha256=FXI9f0I5Tb5HN7l8fvxJ5wJ-QYuKyxfXiDpfXRLsSq4,10766
915
+ supervisely/nn/inference/tracking/tracker_interface.py,sha256=lrIo6ULa4GYd_QclALt82k5d9cLpH0Ss3--XFhPBgUQ,21913
915
916
  supervisely/nn/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
916
917
  supervisely/nn/legacy/config.py,sha256=TKdyGtURJKzKoyydCZAfujoUnbC0SO8GeVLTSnoyS_w,2994
917
918
  supervisely/nn/legacy/dataset.py,sha256=-56EI6OYbkTWx4y8hOgD76y47zUoJNjGFyZ6JaP8iqg,6055
@@ -1070,9 +1071,9 @@ supervisely/worker_proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
1070
1071
  supervisely/worker_proto/worker_api_pb2.py,sha256=VQfi5JRBHs2pFCK1snec3JECgGnua3Xjqw_-b3aFxuM,59142
1071
1072
  supervisely/worker_proto/worker_api_pb2_grpc.py,sha256=3BwQXOaP9qpdi0Dt9EKG--Lm8KGN0C5AgmUfRv77_Jk,28940
1072
1073
  supervisely_lib/__init__.py,sha256=7-3QnN8Zf0wj8NCr2oJmqoQWMKKPKTECvjH9pd2S5vY,159
1073
- supervisely-6.73.283.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1074
- supervisely-6.73.283.dist-info/METADATA,sha256=gGM5GzwuguFaiu6gAtr9fqRwh9yRE4P49Y65qkNoHEA,33573
1075
- supervisely-6.73.283.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
1076
- supervisely-6.73.283.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1077
- supervisely-6.73.283.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1078
- supervisely-6.73.283.dist-info/RECORD,,
1074
+ supervisely-6.73.285.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1075
+ supervisely-6.73.285.dist-info/METADATA,sha256=0qWYnG2O4PsezzNGKkLm6lvjIHZOJ-SNsLoKRnyuXQI,33573
1076
+ supervisely-6.73.285.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
1077
+ supervisely-6.73.285.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
1078
+ supervisely-6.73.285.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
1079
+ supervisely-6.73.285.dist-info/RECORD,,