nedo-vision-worker 1.3.3__tar.gz → 1.3.6__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.
Files changed (107) hide show
  1. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/PKG-INFO +1 -1
  2. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/__init__.py +1 -1
  3. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/repositories/PPEDetectionRepository.py +2 -2
  4. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/repositories/RestrictedAreaRepository.py +2 -2
  5. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/worker/DataSenderWorker.py +4 -15
  6. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/worker/PPEDetectionManager.py +3 -22
  7. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/worker/RestrictedAreaManager.py +3 -22
  8. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker.egg-info/PKG-INFO +1 -1
  9. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/README.md +0 -0
  10. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/cli.py +0 -0
  11. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/config/ConfigurationManager.py +0 -0
  12. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/config/__init__.py +0 -0
  13. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/database/DatabaseManager.py +0 -0
  14. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/database/__init__.py +0 -0
  15. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/doctor.py +0 -0
  16. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/initializer/AppInitializer.py +0 -0
  17. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/initializer/__init__.py +0 -0
  18. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/models/__init__.py +0 -0
  19. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/models/ai_model.py +0 -0
  20. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/models/auth.py +0 -0
  21. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/models/config.py +0 -0
  22. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/models/dataset_source.py +0 -0
  23. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/models/logs.py +0 -0
  24. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/models/ppe_detection.py +0 -0
  25. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/models/ppe_detection_label.py +0 -0
  26. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/models/restricted_area_violation.py +0 -0
  27. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/models/user.py +0 -0
  28. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/models/worker_source.py +0 -0
  29. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/models/worker_source_pipeline.py +0 -0
  30. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/models/worker_source_pipeline_config.py +0 -0
  31. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/models/worker_source_pipeline_debug.py +0 -0
  32. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/models/worker_source_pipeline_detection.py +0 -0
  33. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/protos/AIModelService_pb2.py +0 -0
  34. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/protos/AIModelService_pb2_grpc.py +0 -0
  35. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/protos/DatasetSourceService_pb2.py +0 -0
  36. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/protos/DatasetSourceService_pb2_grpc.py +0 -0
  37. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/protos/HumanDetectionService_pb2.py +0 -0
  38. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/protos/HumanDetectionService_pb2_grpc.py +0 -0
  39. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/protos/PPEDetectionService_pb2.py +0 -0
  40. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/protos/PPEDetectionService_pb2_grpc.py +0 -0
  41. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/protos/VisionWorkerService_pb2.py +0 -0
  42. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/protos/VisionWorkerService_pb2_grpc.py +0 -0
  43. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/protos/WorkerSourcePipelineService_pb2.py +0 -0
  44. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/protos/WorkerSourcePipelineService_pb2_grpc.py +0 -0
  45. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/protos/WorkerSourceService_pb2.py +0 -0
  46. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/protos/WorkerSourceService_pb2_grpc.py +0 -0
  47. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/protos/__init__.py +0 -0
  48. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/repositories/AIModelRepository.py +0 -0
  49. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/repositories/DatasetSourceRepository.py +0 -0
  50. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/repositories/WorkerSourcePipelineDebugRepository.py +0 -0
  51. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/repositories/WorkerSourcePipelineDetectionRepository.py +0 -0
  52. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/repositories/WorkerSourcePipelineRepository.py +0 -0
  53. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/repositories/WorkerSourceRepository.py +0 -0
  54. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/repositories/__init__.py +0 -0
  55. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/AIModelClient.py +0 -0
  56. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/ConnectionInfoClient.py +0 -0
  57. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/DatasetSourceClient.py +0 -0
  58. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/DirectDeviceToRTMPStreamer.py +0 -0
  59. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/FileToRTMPServer.py +0 -0
  60. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/GrpcClientBase.py +0 -0
  61. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/GrpcClientManager.py +0 -0
  62. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/GrpcConnection.py +0 -0
  63. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/ImageUploadClient.py +0 -0
  64. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/PPEDetectionClient.py +0 -0
  65. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/RTSPtoRTMPStreamer.py +0 -0
  66. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/RestrictedAreaClient.py +0 -0
  67. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/SharedDirectDeviceClient.py +0 -0
  68. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/SharedVideoStreamServer.py +0 -0
  69. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/SystemUsageClient.py +0 -0
  70. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/SystemWideDeviceCoordinator.py +0 -0
  71. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/VideoSharingDaemon.py +0 -0
  72. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/VideoStreamClient.py +0 -0
  73. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/WorkerSourceClient.py +0 -0
  74. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/WorkerSourcePipelineClient.py +0 -0
  75. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/WorkerSourceUpdater.py +0 -0
  76. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/WorkerStatusClient.py +0 -0
  77. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/services/__init__.py +0 -0
  78. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/util/EncoderSelector.py +0 -0
  79. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/util/FFmpegUtil.py +0 -0
  80. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/util/HardwareID.py +0 -0
  81. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/util/ImageUploader.py +0 -0
  82. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/util/Networking.py +0 -0
  83. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/util/PlatformDetector.py +0 -0
  84. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/util/SystemMonitor.py +0 -0
  85. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/util/VideoProbeUtil.py +0 -0
  86. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/util/__init__.py +0 -0
  87. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/worker/CoreActionWorker.py +0 -0
  88. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/worker/DataSyncWorker.py +0 -0
  89. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/worker/DatasetFrameSender.py +0 -0
  90. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/worker/DatasetFrameWorker.py +0 -0
  91. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/worker/PipelineActionWorker.py +0 -0
  92. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/worker/PipelineImageWorker.py +0 -0
  93. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/worker/PipelinePreviewWorker.py +0 -0
  94. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/worker/RabbitMQListener.py +0 -0
  95. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/worker/SystemUsageManager.py +0 -0
  96. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/worker/VideoStreamWorker.py +0 -0
  97. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/worker/WorkerManager.py +0 -0
  98. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/worker/__init__.py +0 -0
  99. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker/worker_service.py +0 -0
  100. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker.egg-info/SOURCES.txt +0 -0
  101. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker.egg-info/dependency_links.txt +0 -0
  102. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker.egg-info/entry_points.txt +0 -0
  103. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker.egg-info/requires.txt +0 -0
  104. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/nedo_vision_worker.egg-info/top_level.txt +0 -0
  105. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/pyproject.toml +0 -0
  106. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/setup.cfg +0 -0
  107. {nedo_vision_worker-1.3.3 → nedo_vision_worker-1.3.6}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nedo-vision-worker
3
- Version: 1.3.3
3
+ Version: 1.3.6
4
4
  Summary: Nedo Vision Worker Service 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>
@@ -6,5 +6,5 @@ A library for running worker agents in the Nedo Vision platform.
6
6
 
7
7
  from .worker_service import WorkerService
8
8
 
9
- __version__ = "1.3.3"
9
+ __version__ = "1.3.6"
10
10
  __all__ = ["WorkerService"]
@@ -2,7 +2,7 @@ import os
2
2
  import logging
3
3
  from pathlib import Path
4
4
  from sqlalchemy.orm import Session, joinedload
5
- from sqlalchemy import asc
5
+ from sqlalchemy import desc
6
6
  from sqlalchemy.exc import SQLAlchemyError
7
7
  from ..database.DatabaseManager import DatabaseManager, get_storage_path
8
8
  from ..models.ppe_detection import PPEDetectionEntity
@@ -33,7 +33,7 @@ class PPEDetectionRepository:
33
33
  latest_detections = (
34
34
  self.session.query(PPEDetectionEntity)
35
35
  .options(joinedload(PPEDetectionEntity.ppe_labels))
36
- .order_by(asc(PPEDetectionEntity.created_at))
36
+ .order_by(desc(PPEDetectionEntity.created_at))
37
37
  .limit(limit)
38
38
  .all()
39
39
  )
@@ -2,7 +2,7 @@ import os
2
2
  import logging
3
3
  from pathlib import Path
4
4
  from sqlalchemy.orm import Session
5
- from sqlalchemy import asc
5
+ from sqlalchemy import desc
6
6
  from sqlalchemy.exc import SQLAlchemyError
7
7
  from ..database.DatabaseManager import DatabaseManager, get_storage_path
8
8
  from ..models.restricted_area_violation import RestrictedAreaViolationEntity
@@ -29,7 +29,7 @@ class RestrictedAreaRepository:
29
29
  try:
30
30
  latest_violations = (
31
31
  self.session.query(RestrictedAreaViolationEntity)
32
- .order_by(asc(RestrictedAreaViolationEntity.created_at))
32
+ .order_by(desc(RestrictedAreaViolationEntity.created_at))
33
33
  .limit(limit)
34
34
  .all()
35
35
  )
@@ -152,28 +152,17 @@ class DataSenderWorker:
152
152
 
153
153
  def _calculate_sleep_interval(self, ppe_pending: int, violation_pending: int) -> float:
154
154
  """
155
- Calculate optimal sleep interval based on pending data.
156
- Conservative approach to prevent server overload.
155
+ Returns fixed sleep interval to prevent storage rate limits.
157
156
 
158
157
  Args:
159
158
  ppe_pending: Number of pending PPE detections
160
159
  violation_pending: Number of pending violations
161
160
 
162
161
  Returns:
163
- float: Sleep interval in seconds
162
+ float: Sleep interval in seconds (fixed at 5s)
164
163
  """
165
- total_pending = ppe_pending + violation_pending
166
-
167
- if total_pending == 0:
168
- return self.send_interval
169
- elif total_pending < 50:
170
- return self.send_interval
171
- elif total_pending < 200:
172
- return 3.0
173
- elif total_pending < 500:
174
- return 2.0
175
- else:
176
- return 1.5
164
+ # Fixed 5 second interval to respect storage rate limits
165
+ return self.send_interval
177
166
 
178
167
  def _run_worker_source_updater(self):
179
168
  """Dedicated loop for updating worker sources at a different interval."""
@@ -51,25 +51,6 @@ class PPEDetectionManager:
51
51
 
52
52
  logger.info("📡 [APP] PPE detection monitoring started.")
53
53
 
54
- def _calculate_fetch_size(self, pending_count: int) -> int:
55
- """
56
- Dynamically calculates how many records to fetch based on pending count.
57
-
58
- Args:
59
- pending_count (int): Number of pending detections
60
-
61
- Returns:
62
- int: Number of records to fetch
63
- """
64
- if pending_count <= 50:
65
- return min(pending_count, 10)
66
- elif pending_count <= 200:
67
- return min(pending_count, 30)
68
- elif pending_count <= 1000:
69
- return min(pending_count, 50)
70
- else:
71
- return min(pending_count, 100)
72
-
73
54
  def _calculate_batch_by_size(self, all_detections: list, max_size_mb: int = 40) -> list:
74
55
  """
75
56
  Calculates batch based on actual image file sizes to stay within gRPC limit.
@@ -110,15 +91,15 @@ class PPEDetectionManager:
110
91
  return batch
111
92
 
112
93
  def send_ppe_detection_batch(self):
113
- """Sends a batch of collected PPE detection data to the server with dynamic size-based batching."""
94
+ """Sends a batch of collected PPE detection data to the server with fixed 5 detection batch size."""
114
95
  try:
115
96
  pending_count = self.ppe_detection_repo.get_total_pending_count()
116
97
 
117
98
  if pending_count == 0:
118
99
  return
119
100
 
120
- fetch_size = self._calculate_fetch_size(pending_count)
121
- all_detections = self.ppe_detection_repo.get_latest_detections(fetch_size)
101
+ # Fixed batch size of 5 to prevent storage rate limits
102
+ all_detections = self.ppe_detection_repo.get_latest_detections(5)
122
103
 
123
104
  if not all_detections:
124
105
  return
@@ -51,25 +51,6 @@ class RestrictedAreaManager:
51
51
 
52
52
  logger.info("📡 [APP] Restricted area violation monitoring started.")
53
53
 
54
- def _calculate_fetch_size(self, pending_count: int) -> int:
55
- """
56
- Dynamically calculates how many records to fetch based on pending count.
57
-
58
- Args:
59
- pending_count (int): Number of pending violations
60
-
61
- Returns:
62
- int: Number of records to fetch
63
- """
64
- if pending_count <= 50:
65
- return min(pending_count, 10)
66
- elif pending_count <= 200:
67
- return min(pending_count, 30)
68
- elif pending_count <= 1000:
69
- return min(pending_count, 50)
70
- else:
71
- return min(pending_count, 100)
72
-
73
54
  def _calculate_batch_by_size(self, all_violations: list, max_size_mb: int = 40) -> list:
74
55
  """
75
56
  Calculates batch based on actual image file sizes to stay within gRPC limit.
@@ -108,15 +89,15 @@ class RestrictedAreaManager:
108
89
  return batch
109
90
 
110
91
  def send_violation_batch(self):
111
- """Sends a batch of collected violation data to the server with dynamic size-based batching."""
92
+ """Sends a batch of collected violation data to the server with fixed 5 violation batch size."""
112
93
  try:
113
94
  pending_count = self.repo.get_total_pending_count()
114
95
 
115
96
  if pending_count == 0:
116
97
  return
117
98
 
118
- fetch_size = self._calculate_fetch_size(pending_count)
119
- all_violations = self.repo.get_latest_violations(fetch_size)
99
+ # Fixed batch size of 5 to prevent storage rate limits
100
+ all_violations = self.repo.get_latest_violations(5)
120
101
 
121
102
  if not all_violations:
122
103
  return
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nedo-vision-worker
3
- Version: 1.3.3
3
+ Version: 1.3.6
4
4
  Summary: Nedo Vision Worker Service 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>