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.
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/PKG-INFO +1 -1
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/__init__.py +1 -1
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/pipeline/PipelineProcessor.py +0 -3
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/pipeline/PipelineSyncThread.py +4 -3
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/WorkerSourcePipelineDetectionRepository.py +11 -3
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/streams/VideoStream.py +14 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core.egg-info/PKG-INFO +1 -1
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/MANIFEST.in +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/README.md +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/ai/FrameDrawer.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/ai/ImageDebugger.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/ai/VideoDebugger.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/ai/__init__.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/callbacks/DetectionCallbackManager.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/callbacks/DetectionCallbackTypes.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/callbacks/__init__.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/cli.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/config/ConfigurationManager.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/config/__init__.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/core_service.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/database/DatabaseManager.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/database/__init__.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/detection/BaseDetector.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/detection/RFDETRDetector.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/detection/YOLODetector.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/detection/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/doctor.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/boots-green.png +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/boots-red.png +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/gloves-green.png +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/gloves-red.png +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/goggles-green.png +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/goggles-red.png +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/helmet-green.png +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/helmet-red.png +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/mask-red.png +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/vest-green.png +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/icons/vest-red.png +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/__init__.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/ai_model.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/auth.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/config.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/dataset_source.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/logs.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/ppe_detection.py +0 -0
- {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
- {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
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/user.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/models/worker_source.py +0 -0
- {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
- {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
- {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
- {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
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/pipeline/ModelManager.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/pipeline/PipelineConfigManager.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/pipeline/PipelineManager.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/pipeline/PipelinePrepocessor.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/pipeline/__init__.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/preprocessing/ImageResizer.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/preprocessing/ImageRoi.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/preprocessing/Preprocessor.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/preprocessing/__init__.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/AIModelRepository.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/BaseRepository.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/PPEDetectionRepository.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/RestrictedAreaRepository.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/WorkerSourcePipelineDebugRepository.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/WorkerSourcePipelineRepository.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/WorkerSourceRepository.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/repositories/__init__.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/services/SharedVideoStreamServer.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/services/VideoSharingDaemon.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/services/VideoSharingDaemonManager.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/streams/RTMPStreamer.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/streams/SharedVideoDeviceManager.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/streams/StreamSyncThread.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/streams/VideoStreamManager.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/streams/__init__.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/tracker/SFSORT.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/tracker/TrackerManager.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/tracker/__init__.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/BoundingBoxMetrics.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/DrawingUtils.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/ModelReadinessChecker.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/PersonAttributeMatcher.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/PersonRestrictedAreaMatcher.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/PipelinePreviewChecker.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/PlatformDetector.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/TablePrinter.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/util/__init__.py +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core.egg-info/SOURCES.txt +0 -0
- {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
- {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
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core.egg-info/requires.txt +0 -0
- {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
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/pyproject.toml +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/requirements.txt +0 -0
- {nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/setup.cfg +0 -0
- {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
|
+
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>
|
{nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/__init__.py
RENAMED
|
@@ -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.
|
|
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
|
|
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
|
+
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>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/cli.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nedo_vision_worker_core-0.4.3 → nedo_vision_worker_core-0.4.4}/nedo_vision_worker_core/doctor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|