nedo-vision-worker-core 0.4.3__tar.gz → 0.4.4__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 nedo-vision-worker-core might be problematic. Click here for more details.

Files changed (113) hide show
  1. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/PKG-INFO +1 -1
  2. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/__init__.py +1 -1
  3. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/pipeline/PipelineProcessor.py +0 -3
  4. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/pipeline/PipelineSyncThread.py +4 -3
  5. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/WorkerSourcePipelineDetectionRepository.py +11 -3
  6. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/streams/VideoStream.py +14 -0
  7. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core.egg-info/PKG-INFO +1 -1
  8. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/MANIFEST.in +0 -0
  9. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/README.md +0 -0
  10. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/ai/FrameDrawer.py +0 -0
  11. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/ai/ImageDebugger.py +0 -0
  12. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/ai/VideoDebugger.py +0 -0
  13. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/ai/__init__.py +0 -0
  14. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/callbacks/DetectionCallbackManager.py +0 -0
  15. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/callbacks/DetectionCallbackTypes.py +0 -0
  16. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/callbacks/__init__.py +0 -0
  17. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/cli.py +0 -0
  18. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/config/ConfigurationManager.py +0 -0
  19. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/config/__init__.py +0 -0
  20. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/core_service.py +0 -0
  21. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/database/DatabaseManager.py +0 -0
  22. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/database/__init__.py +0 -0
  23. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/detection/BaseDetector.py +0 -0
  24. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/detection/RFDETRDetector.py +0 -0
  25. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/detection/YOLODetector.py +0 -0
  26. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/detection/__init__.py +0 -0
  27. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/detection/detection_processing/DetectionProcessor.py +0 -0
  28. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/detection/detection_processing/HumanDetectionProcessor.py +0 -0
  29. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/detection/detection_processing/PPEDetectionProcessor.py +0 -0
  30. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/detection/detection_processing/__init__.py +0 -0
  31. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/doctor.py +0 -0
  32. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/drawing_assets/blue/inner_corner.png +0 -0
  33. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/drawing_assets/blue/inner_frame.png +0 -0
  34. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/drawing_assets/blue/line.png +0 -0
  35. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/drawing_assets/blue/top_left.png +0 -0
  36. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/drawing_assets/blue/top_right.png +0 -0
  37. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/drawing_assets/red/inner_corner.png +0 -0
  38. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/drawing_assets/red/inner_frame.png +0 -0
  39. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/drawing_assets/red/line.png +0 -0
  40. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/drawing_assets/red/top_left.png +0 -0
  41. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/drawing_assets/red/top_right.png +0 -0
  42. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/boots-green.png +0 -0
  43. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/boots-red.png +0 -0
  44. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/gloves-green.png +0 -0
  45. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/gloves-red.png +0 -0
  46. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/goggles-green.png +0 -0
  47. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/goggles-red.png +0 -0
  48. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/helmet-green.png +0 -0
  49. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/helmet-red.png +0 -0
  50. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/mask-red.png +0 -0
  51. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/vest-green.png +0 -0
  52. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/vest-red.png +0 -0
  53. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/__init__.py +0 -0
  54. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/ai_model.py +0 -0
  55. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/auth.py +0 -0
  56. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/config.py +0 -0
  57. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/dataset_source.py +0 -0
  58. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/logs.py +0 -0
  59. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/ppe_detection.py +0 -0
  60. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/ppe_detection_label.py +0 -0
  61. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/restricted_area_violation.py +0 -0
  62. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/user.py +0 -0
  63. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/worker_source.py +0 -0
  64. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/worker_source_pipeline.py +0 -0
  65. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/worker_source_pipeline_config.py +0 -0
  66. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/worker_source_pipeline_debug.py +0 -0
  67. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/worker_source_pipeline_detection.py +0 -0
  68. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/pipeline/ModelManager.py +0 -0
  69. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/pipeline/PipelineConfigManager.py +0 -0
  70. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/pipeline/PipelineManager.py +0 -0
  71. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/pipeline/PipelinePrepocessor.py +0 -0
  72. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/pipeline/__init__.py +0 -0
  73. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/preprocessing/ImageResizer.py +0 -0
  74. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/preprocessing/ImageRoi.py +0 -0
  75. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/preprocessing/Preprocessor.py +0 -0
  76. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/preprocessing/__init__.py +0 -0
  77. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/AIModelRepository.py +0 -0
  78. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/BaseRepository.py +0 -0
  79. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/PPEDetectionRepository.py +0 -0
  80. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/RestrictedAreaRepository.py +0 -0
  81. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/WorkerSourcePipelineDebugRepository.py +0 -0
  82. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/WorkerSourcePipelineRepository.py +0 -0
  83. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/WorkerSourceRepository.py +0 -0
  84. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/__init__.py +0 -0
  85. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/services/SharedVideoStreamServer.py +0 -0
  86. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/services/VideoSharingDaemon.py +0 -0
  87. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/services/VideoSharingDaemonManager.py +0 -0
  88. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/streams/RTMPStreamer.py +0 -0
  89. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/streams/SharedVideoDeviceManager.py +0 -0
  90. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/streams/StreamSyncThread.py +0 -0
  91. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/streams/VideoStreamManager.py +0 -0
  92. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/streams/__init__.py +0 -0
  93. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/tracker/SFSORT.py +0 -0
  94. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/tracker/TrackerManager.py +0 -0
  95. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/tracker/__init__.py +0 -0
  96. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/BoundingBoxMetrics.py +0 -0
  97. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/DrawingUtils.py +0 -0
  98. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/ModelReadinessChecker.py +0 -0
  99. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/PersonAttributeMatcher.py +0 -0
  100. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/PersonRestrictedAreaMatcher.py +0 -0
  101. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/PipelinePreviewChecker.py +0 -0
  102. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/PlatformDetector.py +0 -0
  103. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/TablePrinter.py +0 -0
  104. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/__init__.py +0 -0
  105. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core.egg-info/SOURCES.txt +0 -0
  106. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core.egg-info/dependency_links.txt +0 -0
  107. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core.egg-info/entry_points.txt +0 -0
  108. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core.egg-info/requires.txt +0 -0
  109. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core.egg-info/top_level.txt +0 -0
  110. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/pyproject.toml +0 -0
  111. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/requirements.txt +0 -0
  112. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/setup.cfg +0 -0
  113. {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nedo-vision-worker-core
3
- Version: 0.4.3
3
+ Version: 0.4.4
4
4
  Summary: Nedo Vision Worker Core Library for AI Vision Processing
5
5
  Author-email: Willy Achmat Fauzi <willy.achmat@gmail.com>
6
6
  Maintainer-email: Willy Achmat Fauzi <willy.achmat@gmail.com>
@@ -7,7 +7,7 @@ A library for running AI vision processing and detection in the Nedo Vision plat
7
7
  from .core_service import CoreService
8
8
  from .callbacks import DetectionType, CallbackTrigger, DetectionData, IntervalMetadata
9
9
 
10
- __version__ = "0.4.3"
10
+ __version__ = "0.4.4"
11
11
  __all__ = [
12
12
  "CoreService",
13
13
  "DetectionType",
@@ -202,9 +202,6 @@ class PipelineProcessor:
202
202
  if loop_start - last_preview_check >= self.preview_check_interval:
203
203
  self._check_and_update_rtmp_streaming()
204
204
  last_preview_check = loop_start
205
-
206
- # Only draw frames when actually needed (RTMP active or debug)
207
- should_draw = self.rtmp_streaming_active or self.debug_flag
208
205
 
209
206
  # For RTMP, also check if it's time to send a frame (rate limiting)
210
207
  should_draw_for_rtmp = (
@@ -151,14 +151,15 @@ class PipelineSyncThread(threading.Thread):
151
151
  ])
152
152
 
153
153
  if requires_restart:
154
- logging.info(f"🔄 Restarting pipeline due to significant changes: {pid}")
155
- self.pipeline_manager.stop_pipeline(pid)
156
-
157
154
  # Check if source is connected before restarting
158
155
  if not self.source_repo.is_source_connected(db_pipeline.worker_source_id):
159
156
  logging.warning(f"⚠️ Cannot restart pipeline {pid}: Source {db_pipeline.worker_source_id} is disconnected")
160
157
  return
161
158
 
159
+ logging.info(f"🔄 Restarting pipeline due to significant changes: {pid}")
160
+ self.pipeline_manager.stop_pipeline(pid)
161
+
162
+
162
163
  self.pipeline_manager.start_pipeline(db_pipeline, db_detector)
163
164
  else:
164
165
  # Update config for minor changes that don't require restart
@@ -18,12 +18,14 @@ class WorkerSourcePipelineDetectionRepository(BaseRepository):
18
18
  def save_detection(self, pipeline_id: int, frame, tracked_objects, frame_drawer: FrameDrawer):
19
19
  """
20
20
  Save detection data that need to be sent to database.
21
+ Only saves if there are violations detected.
21
22
  """
22
23
  now = datetime.now(timezone.utc)
23
24
  current_datetime = now.strftime("%Y%m%d_%H%M%S")
24
25
 
25
26
  frame_drawer.draw_polygons(frame)
26
27
  filtered_objects = []
28
+ has_violations = False
27
29
 
28
30
  for tracked_obj in tracked_objects:
29
31
  attributes = tracked_obj["attributes"]
@@ -34,9 +36,17 @@ class WorkerSourcePipelineDetectionRepository(BaseRepository):
34
36
  obj = tracked_obj.copy()
35
37
  obj["attributes"] = [attr for attr in attributes if attr.get("count", 0) >= 5]
36
38
 
39
+ # Check if any attribute is a violation
40
+ for attr in obj["attributes"]:
41
+ attr_label = attr.get("label", "")
42
+ if attr_label in frame_drawer.violation_labels:
43
+ has_violations = True
44
+ break
45
+
37
46
  filtered_objects.append(obj)
38
47
 
39
- if not filtered_objects:
48
+ # Only save and trigger webhook/MQTT if there are actual violations
49
+ if not filtered_objects or not has_violations:
40
50
  return
41
51
 
42
52
  drawn_frame = frame_drawer.draw_frame(frame.copy(), filtered_objects)
@@ -64,7 +74,5 @@ class WorkerSourcePipelineDetectionRepository(BaseRepository):
64
74
  )
65
75
  session.add(new_detection)
66
76
  session.flush()
67
- # Commit happens automatically via context manager
68
- print(f"✅ Inserted detection data for pipeline {pipeline_id}")
69
77
  except Exception as e:
70
78
  print(f"❌ Database error while saving detection: {e}")
@@ -237,6 +237,8 @@ class VideoStream(threading.Thread):
237
237
  def run(self) -> None:
238
238
  """Main capture loop."""
239
239
  failures = 0
240
+ last_frame_time = time.perf_counter()
241
+
240
242
  while self.running:
241
243
  try:
242
244
  if not self.capture or not self.capture.isOpened():
@@ -247,6 +249,18 @@ class VideoStream(threading.Thread):
247
249
  failures = 0
248
250
  self._reconnect_attempts = 0
249
251
  self._current_interval = self.reconnect_interval
252
+ last_frame_time = time.perf_counter()
253
+
254
+ # For video files, respect the FPS to avoid playing too fast
255
+ if self.is_file:
256
+ target_fps = self.target_fps if self.target_fps else self.fps
257
+ if target_fps > 0:
258
+ frame_interval = 1.0 / target_fps
259
+ elapsed = time.perf_counter() - last_frame_time
260
+ if elapsed < frame_interval:
261
+ sleep_time = frame_interval - elapsed
262
+ time.sleep(sleep_time)
263
+ last_frame_time = time.perf_counter()
250
264
 
251
265
  ret, frame = self.capture.read()
252
266
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nedo-vision-worker-core
3
- Version: 0.4.3
3
+ Version: 0.4.4
4
4
  Summary: Nedo Vision Worker Core Library for AI Vision Processing
5
5
  Author-email: Willy Achmat Fauzi <willy.achmat@gmail.com>
6
6
  Maintainer-email: Willy Achmat Fauzi <willy.achmat@gmail.com>