learning-loop-node 0.17.0__tar.gz → 0.17.2__tar.gz

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 learning-loop-node might be problematic. Click here for more details.

Files changed (105) hide show
  1. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/PKG-INFO +1 -1
  2. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/detector/detector_node.py +14 -4
  3. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/detector/inbox_filter/cam_observation_history.py +13 -4
  4. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/pyproject.toml +1 -1
  5. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/README.md +0 -0
  6. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/__init__.py +0 -0
  7. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/annotation/__init__.py +0 -0
  8. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/annotation/annotator_logic.py +0 -0
  9. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/annotation/annotator_node.py +0 -0
  10. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/data_classes/__init__.py +0 -0
  11. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/data_classes/annotation_data.py +0 -0
  12. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/data_classes/annotations.py +0 -0
  13. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/data_classes/detections.py +0 -0
  14. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/data_classes/general.py +0 -0
  15. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/data_classes/image_metadata.py +0 -0
  16. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/data_classes/socket_response.py +0 -0
  17. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/data_classes/training.py +0 -0
  18. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/data_exchanger.py +0 -0
  19. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/detector/__init__.py +0 -0
  20. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/detector/detector_logic.py +0 -0
  21. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/detector/exceptions.py +0 -0
  22. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/detector/inbox_filter/__init__.py +0 -0
  23. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/detector/inbox_filter/relevance_filter.py +0 -0
  24. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/detector/outbox.py +0 -0
  25. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/detector/rest/__init__.py +0 -0
  26. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/detector/rest/about.py +0 -0
  27. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/detector/rest/backdoor_controls.py +0 -0
  28. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/detector/rest/detect.py +0 -0
  29. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/detector/rest/model_version_control.py +0 -0
  30. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/detector/rest/operation_mode.py +0 -0
  31. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/detector/rest/outbox_mode.py +0 -0
  32. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/detector/rest/upload.py +0 -0
  33. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/enums/__init__.py +0 -0
  34. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/enums/annotator.py +0 -0
  35. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/enums/detector.py +0 -0
  36. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/enums/general.py +0 -0
  37. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/enums/trainer.py +0 -0
  38. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/examples/novelty_score_updater.py +0 -0
  39. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/globals.py +0 -0
  40. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/helpers/__init__.py +0 -0
  41. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/helpers/background_tasks.py +0 -0
  42. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/helpers/environment_reader.py +0 -0
  43. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/helpers/gdrive_downloader.py +0 -0
  44. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/helpers/log_conf.py +0 -0
  45. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/helpers/misc.py +0 -0
  46. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/helpers/run.py +0 -0
  47. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/loop_communication.py +0 -0
  48. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/node.py +0 -0
  49. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/py.typed +0 -0
  50. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/rest.py +0 -0
  51. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/__init__.py +0 -0
  52. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/annotator/__init__.py +0 -0
  53. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/annotator/conftest.py +0 -0
  54. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/annotator/pytest.ini +0 -0
  55. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/annotator/test_annotator_node.py +0 -0
  56. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/detector/__init__.py +0 -0
  57. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/detector/conftest.py +0 -0
  58. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/detector/inbox_filter/__init__.py +0 -0
  59. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/detector/inbox_filter/test_observation.py +0 -0
  60. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/detector/inbox_filter/test_relevance_group.py +0 -0
  61. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/detector/inbox_filter/test_unexpected_observations_count.py +0 -0
  62. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/detector/pytest.ini +0 -0
  63. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/detector/test.jpg +0 -0
  64. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/detector/test_client_communication.py +0 -0
  65. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/detector/test_detector_node.py +0 -0
  66. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/detector/test_outbox.py +0 -0
  67. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/detector/test_relevance_filter.py +0 -0
  68. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/detector/testing_detector.py +0 -0
  69. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/general/__init__.py +0 -0
  70. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/general/conftest.py +0 -0
  71. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/general/pytest.ini +0 -0
  72. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/general/test_data/file_1.txt +0 -0
  73. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/general/test_data/file_2.txt +0 -0
  74. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/general/test_data/model.json +0 -0
  75. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/general/test_data_classes.py +0 -0
  76. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/general/test_downloader.py +0 -0
  77. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/general/test_learning_loop_node.py +0 -0
  78. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/test_helper.py +0 -0
  79. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/trainer/__init__.py +0 -0
  80. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/trainer/conftest.py +0 -0
  81. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/trainer/pytest.ini +0 -0
  82. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/trainer/state_helper.py +0 -0
  83. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/trainer/states/__init__.py +0 -0
  84. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/trainer/states/test_state_cleanup.py +0 -0
  85. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/trainer/states/test_state_detecting.py +0 -0
  86. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/trainer/states/test_state_download_train_model.py +0 -0
  87. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/trainer/states/test_state_prepare.py +0 -0
  88. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/trainer/states/test_state_sync_confusion_matrix.py +0 -0
  89. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/trainer/states/test_state_train.py +0 -0
  90. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/trainer/states/test_state_upload_detections.py +0 -0
  91. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/trainer/states/test_state_upload_model.py +0 -0
  92. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/trainer/test_errors.py +0 -0
  93. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/trainer/test_trainer_states.py +0 -0
  94. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/tests/trainer/testing_trainer_logic.py +0 -0
  95. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/trainer/__init__.py +0 -0
  96. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/trainer/downloader.py +0 -0
  97. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/trainer/exceptions.py +0 -0
  98. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/trainer/executor.py +0 -0
  99. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/trainer/io_helpers.py +0 -0
  100. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/trainer/rest/__init__.py +0 -0
  101. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/trainer/rest/backdoor_controls.py +0 -0
  102. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/trainer/test_executor.py +0 -0
  103. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/trainer/trainer_logic.py +0 -0
  104. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/trainer/trainer_logic_generic.py +0 -0
  105. {learning_loop_node-0.17.0 → learning_loop_node-0.17.2}/learning_loop_node/trainer/trainer_node.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: learning-loop-node
3
- Version: 0.17.0
3
+ Version: 0.17.2
4
4
  Summary: Python Library for Nodes which connect to the Zauberzeug Learning Loop
5
5
  Home-page: https://github.com/zauberzeug/learning_loop_node
6
6
  License: MIT
@@ -522,11 +522,14 @@ class DetectorNode(Node):
522
522
  It can be converted e.g. using cv2.imdecode(np.frombuffer(image, np.uint8), cv2.IMREAD_COLOR)"""
523
523
 
524
524
  await self.detection_lock.acquire()
525
- metadata = await run.io_bound(self.detector_logic.evaluate, raw_image)
525
+ try:
526
+ metadata = await run.io_bound(self.detector_logic.evaluate, raw_image)
527
+ finally:
528
+ self.detection_lock.release()
529
+
526
530
  metadata.tags.extend(tags)
527
531
  metadata.source = source
528
532
  metadata.created = creation_date
529
- self.detection_lock.release()
530
533
 
531
534
  fix_shape_detections(metadata)
532
535
  n_bo, n_cl = len(metadata.box_detections), len(metadata.classification_detections)
@@ -555,8 +558,15 @@ class DetectorNode(Node):
555
558
  This function infers the detections from all images, cares about uploading to the loop and returns the detections as a list of ImageMetadata."""
556
559
 
557
560
  await self.detection_lock.acquire()
558
- all_detections = await run.io_bound(self.detector_logic.batch_evaluate, raw_images)
559
- self.detection_lock.release()
561
+ try:
562
+ all_detections = await run.io_bound(self.detector_logic.batch_evaluate, raw_images)
563
+ finally:
564
+ self.detection_lock.release()
565
+
566
+ for metadata in all_detections.items:
567
+ metadata.tags.extend(tags)
568
+ metadata.source = source
569
+ metadata.created = creation_date
560
570
 
561
571
  for detections, raw_image in zip(all_detections.items, raw_images):
562
572
  fix_shape_detections(detections)
@@ -1,8 +1,14 @@
1
1
  import os
2
2
  from typing import List, Union
3
3
 
4
- from ...data_classes import (BoxDetection, ClassificationDetection, ImageMetadata, Observation, PointDetection,
5
- SegmentationDetection)
4
+ from ...data_classes import (
5
+ BoxDetection,
6
+ ClassificationDetection,
7
+ ImageMetadata,
8
+ Observation,
9
+ PointDetection,
10
+ SegmentationDetection,
11
+ )
6
12
 
7
13
 
8
14
  class CamObservationHistory:
@@ -10,6 +16,8 @@ class CamObservationHistory:
10
16
  self.reset_time = 3600
11
17
  self.recent_observations: List[Observation] = []
12
18
  self.iou_threshold = 0.5
19
+ self.min_uncertain_threshold = float(os.environ.get('MIN_UNCERTAIN_THRESHOLD', '0.3'))
20
+ self.max_uncertain_threshold = float(os.environ.get('MAX_UNCERTAIN_THRESHOLD', '0.6'))
13
21
 
14
22
  def forget_old_detections(self) -> None:
15
23
  self.recent_observations = [detection
@@ -25,7 +33,8 @@ class CamObservationHistory:
25
33
  continue
26
34
  if isinstance(detection, ClassificationDetection):
27
35
  # self.recent_observations.append(Observation(detection))
28
- causes.add('classification_detection')
36
+ if self.min_uncertain_threshold <= detection.confidence <= self.max_uncertain_threshold:
37
+ causes.add('uncertain')
29
38
  continue
30
39
 
31
40
  assert isinstance(detection, (BoxDetection, PointDetection)), f"Unknown detection type: {type(detection)}"
@@ -37,7 +46,7 @@ class CamObservationHistory:
37
46
  continue
38
47
 
39
48
  self.recent_observations.append(Observation(detection))
40
- if float(os.environ.get('MIN_UNCERTAIN_THRESHOLD', '0.3')) <= detection.confidence <= float(os.environ.get('MAX_UNCERTAIN_THRESHOLD', '0.6')):
49
+ if self.min_uncertain_threshold <= detection.confidence <= self.max_uncertain_threshold:
41
50
  causes.add('uncertain')
42
51
 
43
52
  return list(causes)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "learning_loop_node"
3
- version = "v0.17.0"
3
+ version = "v0.17.2"
4
4
  description = "Python Library for Nodes which connect to the Zauberzeug Learning Loop"
5
5
  authors = ["Zauberzeug GmbH <info@zauberzeug.com>"]
6
6
  license = "MIT"