nedo-vision-worker 1.3.11__py3-none-any.whl → 1.3.12__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.
- nedo_vision_worker/__init__.py +1 -1
- nedo_vision_worker/bootstrap.py +7 -0
- nedo_vision_worker/cli.py +7 -0
- nedo_vision_worker/config/ConfigurationManager.py +10 -1
- nedo_vision_worker/config/DummyConfigurationManager.py +3 -0
- nedo_vision_worker/services/ConnectionInfoClient.py +1 -1
- nedo_vision_worker/services/DirectDeviceToRTMPStreamer.py +3 -3
- nedo_vision_worker/services/FileToRTMPServer.py +3 -2
- nedo_vision_worker/services/RTSPtoRTMPStreamer.py +3 -3
- nedo_vision_worker/util/RTMPUrl.py +24 -0
- nedo_vision_worker/worker/VideoStreamWorker.py +22 -3
- {nedo_vision_worker-1.3.11.dist-info → nedo_vision_worker-1.3.12.dist-info}/METADATA +1 -1
- {nedo_vision_worker-1.3.11.dist-info → nedo_vision_worker-1.3.12.dist-info}/RECORD +16 -15
- {nedo_vision_worker-1.3.11.dist-info → nedo_vision_worker-1.3.12.dist-info}/WHEEL +1 -1
- {nedo_vision_worker-1.3.11.dist-info → nedo_vision_worker-1.3.12.dist-info}/entry_points.txt +0 -0
- {nedo_vision_worker-1.3.11.dist-info → nedo_vision_worker-1.3.12.dist-info}/top_level.txt +0 -0
nedo_vision_worker/__init__.py
CHANGED
nedo_vision_worker/bootstrap.py
CHANGED
|
@@ -2,6 +2,7 @@ import logging
|
|
|
2
2
|
from nedo_vision_worker.config.ConfigurationManager import ConfigurationManager
|
|
3
3
|
from nedo_vision_worker.database.DatabaseManager import set_storage_path, DatabaseManager
|
|
4
4
|
from nedo_vision_worker.worker_service import WorkerService
|
|
5
|
+
from nedo_vision_worker.util.RTMPUrl import RTMPUrl
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
def start_worker(
|
|
@@ -13,6 +14,7 @@ def start_worker(
|
|
|
13
14
|
rtmp_server: str,
|
|
14
15
|
storage_path: str,
|
|
15
16
|
log_level: str = "INFO",
|
|
17
|
+
rtmp_publish_query_strings: str = ""
|
|
16
18
|
) -> WorkerService:
|
|
17
19
|
# Logging (only once, force allowed)
|
|
18
20
|
logging.basicConfig(
|
|
@@ -36,6 +38,11 @@ def start_worker(
|
|
|
36
38
|
logger=logging.getLogger("configuration_manager"),
|
|
37
39
|
)
|
|
38
40
|
|
|
41
|
+
RTMPUrl.configure(
|
|
42
|
+
rtmp_server_url=rtmp_server,
|
|
43
|
+
rtmp_publish_query_strings=rtmp_publish_query_strings
|
|
44
|
+
)
|
|
45
|
+
|
|
39
46
|
service = WorkerService(
|
|
40
47
|
configuration_manager=configuration_manager,
|
|
41
48
|
server_host=server_host,
|
nedo_vision_worker/cli.py
CHANGED
|
@@ -7,6 +7,11 @@ from typing import NoReturn
|
|
|
7
7
|
from nedo_vision_worker.bootstrap import start_worker
|
|
8
8
|
from nedo_vision_worker import __version__
|
|
9
9
|
|
|
10
|
+
import faulthandler
|
|
11
|
+
|
|
12
|
+
# Enable fault handler to get a traceback
|
|
13
|
+
faulthandler.enable()
|
|
14
|
+
|
|
10
15
|
class NedoWorkerCLI:
|
|
11
16
|
def __init__(self):
|
|
12
17
|
self.logger = logging.getLogger(__name__)
|
|
@@ -38,6 +43,7 @@ class NedoWorkerCLI:
|
|
|
38
43
|
run.add_argument("--server-host", default="be.vision.sindika.co.id")
|
|
39
44
|
run.add_argument("--server-port", type=int, default=50051)
|
|
40
45
|
run.add_argument("--rtmp-server", default="rtmp://live.vision.sindika.co.id:1935/live")
|
|
46
|
+
run.add_argument("--rtmp-publish-query-strings", default="")
|
|
41
47
|
run.add_argument("--storage-path", default="data")
|
|
42
48
|
run.add_argument("--system-usage-interval", type=int, default=30)
|
|
43
49
|
run.add_argument("--log-level", default="INFO")
|
|
@@ -61,6 +67,7 @@ class NedoWorkerCLI:
|
|
|
61
67
|
rtmp_server=args.rtmp_server,
|
|
62
68
|
storage_path=args.storage_path,
|
|
63
69
|
log_level=args.log_level,
|
|
70
|
+
rtmp_publish_query_strings=args.rtmp_publish_query_strings
|
|
64
71
|
)
|
|
65
72
|
signal.pause() # wait for signal
|
|
66
73
|
|
|
@@ -13,13 +13,22 @@ class ConfigurationManager(ConfigurationManagerInterface):
|
|
|
13
13
|
A class to manage local and remote configuration stored in the 'config' database.
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
|
-
def __init__(
|
|
16
|
+
def __init__(
|
|
17
|
+
self,
|
|
18
|
+
worker_token: str,
|
|
19
|
+
server_host: str,
|
|
20
|
+
server_port: int,
|
|
21
|
+
rtmp_server_url: str,
|
|
22
|
+
logger: logging.Logger,
|
|
23
|
+
rtmp_publish_query_strings: str = "",
|
|
24
|
+
):
|
|
17
25
|
try:
|
|
18
26
|
self._logger = logger
|
|
19
27
|
self._worker_token = worker_token
|
|
20
28
|
self._server_host = server_host
|
|
21
29
|
self._server_port = server_port
|
|
22
30
|
self._rtmp_server_url = rtmp_server_url
|
|
31
|
+
self._rtmp_publish_query_strings = rtmp_publish_query_strings
|
|
23
32
|
|
|
24
33
|
self._initialize_remote_configuration()
|
|
25
34
|
|
|
@@ -15,6 +15,7 @@ class DummyConfigurationManager(ConfigurationManagerInterface):
|
|
|
15
15
|
server_host: str,
|
|
16
16
|
server_port: str,
|
|
17
17
|
rtmp_server_url: str,
|
|
18
|
+
rtmp_publish_query_strings: str,
|
|
18
19
|
rabbitmq_host: str,
|
|
19
20
|
rabbitmq_port: str,
|
|
20
21
|
rabbitmq_username: str,
|
|
@@ -27,6 +28,7 @@ class DummyConfigurationManager(ConfigurationManagerInterface):
|
|
|
27
28
|
self._server_host = server_host
|
|
28
29
|
self._server_port = server_port
|
|
29
30
|
self._rtmp_server_url = rtmp_server_url
|
|
31
|
+
self._rtmp_publish_query_strings = rtmp_publish_query_strings
|
|
30
32
|
self._rabbitmq_host = rabbitmq_host
|
|
31
33
|
self._rabbitmq_port = rabbitmq_port
|
|
32
34
|
self._rabbitmq_username = rabbitmq_username
|
|
@@ -38,6 +40,7 @@ class DummyConfigurationManager(ConfigurationManagerInterface):
|
|
|
38
40
|
"server_host": self._server_host,
|
|
39
41
|
"server_port": str(self._server_port),
|
|
40
42
|
"rtmp_server": self._rtmp_server_url,
|
|
43
|
+
"rtmp_publish_query_strings": self._rtmp_publish_query_strings,
|
|
41
44
|
"rabbitmq_host": self._rabbitmq_host,
|
|
42
45
|
"rabbitmq_port": self._rabbitmq_port,
|
|
43
46
|
"rabbitmq_username": self._rabbitmq_username,
|
|
@@ -9,10 +9,11 @@ import os
|
|
|
9
9
|
from .VideoSharingDaemon import VideoSharingClient
|
|
10
10
|
from ..database.DatabaseManager import get_storage_path
|
|
11
11
|
from ..util.EncoderSelector import EncoderSelector
|
|
12
|
+
from ..util.RTMPUrl import RTMPUrl
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
class DirectDeviceToRTMPStreamer:
|
|
15
|
-
def __init__(self, device_url: str,
|
|
16
|
+
def __init__(self, device_url: str, stream_key: str, stream_duration: int):
|
|
16
17
|
"""
|
|
17
18
|
Initialize the DirectDeviceToRTMPStreamer.
|
|
18
19
|
|
|
@@ -23,7 +24,6 @@ class DirectDeviceToRTMPStreamer:
|
|
|
23
24
|
stream_duration: Duration in seconds
|
|
24
25
|
"""
|
|
25
26
|
self.device_url = device_url
|
|
26
|
-
self.rtmp_server = rtmp_server
|
|
27
27
|
self.stream_key = stream_key
|
|
28
28
|
self.duration = stream_duration
|
|
29
29
|
|
|
@@ -32,7 +32,7 @@ class DirectDeviceToRTMPStreamer:
|
|
|
32
32
|
raise ValueError(f"Invalid device URL: {device_url}")
|
|
33
33
|
|
|
34
34
|
self.device_index = device_index
|
|
35
|
-
self.rtmp_url =
|
|
35
|
+
self.rtmp_url = RTMPUrl.get_publish_url(stream_key)
|
|
36
36
|
|
|
37
37
|
self.ffmpeg_process = None
|
|
38
38
|
self.active = False
|
|
@@ -2,9 +2,10 @@ import subprocess
|
|
|
2
2
|
import logging
|
|
3
3
|
import os
|
|
4
4
|
from ..util.EncoderSelector import EncoderSelector
|
|
5
|
+
from ..util.RTMPUrl import RTMPUrl
|
|
5
6
|
|
|
6
7
|
class FileToRTMPStreamer:
|
|
7
|
-
def __init__(self, video_path,
|
|
8
|
+
def __init__(self, video_path, stream_key, fps=30, resolution="1280x720", loop=False):
|
|
8
9
|
"""
|
|
9
10
|
Initialize the file streamer.
|
|
10
11
|
|
|
@@ -17,7 +18,7 @@ class FileToRTMPStreamer:
|
|
|
17
18
|
loop (bool): Loop the video until manually stopped.
|
|
18
19
|
"""
|
|
19
20
|
self.video_path = video_path
|
|
20
|
-
self.rtmp_url =
|
|
21
|
+
self.rtmp_url = RTMPUrl.get_publish_url(stream_key)
|
|
21
22
|
self.fps = fps
|
|
22
23
|
self.resolution = resolution
|
|
23
24
|
self.loop = loop
|
|
@@ -4,9 +4,9 @@ import time
|
|
|
4
4
|
import os
|
|
5
5
|
from urllib.parse import urlparse
|
|
6
6
|
from ..util.EncoderSelector import EncoderSelector
|
|
7
|
-
|
|
7
|
+
from ..util.RTMPUrl import RTMPUrl
|
|
8
8
|
class RTSPtoRTMPStreamer:
|
|
9
|
-
def __init__(self, rtsp_url,
|
|
9
|
+
def __init__(self, rtsp_url, stream_key, fps=30, resolution="1280x720", duration=120):
|
|
10
10
|
"""
|
|
11
11
|
Initialize the streamer.
|
|
12
12
|
|
|
@@ -19,7 +19,7 @@ class RTSPtoRTMPStreamer:
|
|
|
19
19
|
duration (int): Duration in seconds to stream.
|
|
20
20
|
"""
|
|
21
21
|
self.rtsp_url = rtsp_url
|
|
22
|
-
self.rtmp_url =
|
|
22
|
+
self.rtmp_url = RTMPUrl.get_publish_url(stream_key)
|
|
23
23
|
self.fps = fps
|
|
24
24
|
self.resolution = resolution
|
|
25
25
|
self.duration = duration
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
class RTMPUrl:
|
|
2
|
+
"""
|
|
3
|
+
Call `configure()` static method first.
|
|
4
|
+
"""
|
|
5
|
+
_rtmp_server_url = ""
|
|
6
|
+
_rtmp_publish_query_strings = ""
|
|
7
|
+
|
|
8
|
+
@staticmethod
|
|
9
|
+
def configure(rtmp_server_url: str, rtmp_publish_query_strings: str = ""):
|
|
10
|
+
"""
|
|
11
|
+
Example:
|
|
12
|
+
- `rtmp_server_url` = rtmp://live.sindika.co.id:8554/live
|
|
13
|
+
- `rtmp_publish_query_strings` = username=my-username&pass=mantap-jiwa
|
|
14
|
+
"""
|
|
15
|
+
RTMPUrl._rtmp_server_url = rtmp_server_url
|
|
16
|
+
RTMPUrl._rtmp_publish_query_strings = rtmp_publish_query_strings
|
|
17
|
+
|
|
18
|
+
@staticmethod
|
|
19
|
+
def get_publish_url(stream_key: str) -> str:
|
|
20
|
+
url = f"{RTMPUrl._rtmp_server_url}/{stream_key}"
|
|
21
|
+
if RTMPUrl._rtmp_publish_query_strings:
|
|
22
|
+
url = f"{RTMPUrl._rtmp_server_url}/{stream_key}?{RTMPUrl._rtmp_publish_query_strings}"
|
|
23
|
+
|
|
24
|
+
return url
|
|
@@ -109,6 +109,25 @@ class VideoStreamWorker:
|
|
|
109
109
|
|
|
110
110
|
def _process_video_preview_message(self, message):
|
|
111
111
|
"""Process messages related to video preview streaming."""
|
|
112
|
+
|
|
113
|
+
print("masuk broooo anjayyy")
|
|
114
|
+
|
|
115
|
+
# # Try segmentation fault
|
|
116
|
+
# import ctypes
|
|
117
|
+
|
|
118
|
+
# print("Attempting to access a NULL pointer...")
|
|
119
|
+
|
|
120
|
+
# # Method 1: Dereference a null pointer
|
|
121
|
+
# ctypes.string_at(0)
|
|
122
|
+
|
|
123
|
+
# # Method 2: Write to a protected memory address
|
|
124
|
+
# ctypes.memset(0, 0, 1)
|
|
125
|
+
|
|
126
|
+
# # Method 3: Access invalid pointer
|
|
127
|
+
# invalid_ptr = ctypes.cast(0, ctypes.POINTER(ctypes.c_int))
|
|
128
|
+
# print(invalid_ptr.contents)
|
|
129
|
+
|
|
130
|
+
|
|
112
131
|
try:
|
|
113
132
|
data = json.loads(message)
|
|
114
133
|
worker_id = data.get("workerId")
|
|
@@ -157,12 +176,12 @@ class VideoStreamWorker:
|
|
|
157
176
|
logger.info(f"🎥 [APP] Starting RTMP stream (Worker: {worker_id})")
|
|
158
177
|
|
|
159
178
|
if url.startswith("worker-source/"):
|
|
160
|
-
streamer = FileToRTMPStreamer(self.source_file_path / os.path.basename(url),
|
|
179
|
+
streamer = FileToRTMPStreamer(self.source_file_path / os.path.basename(url), stream_key, stream_duration)
|
|
161
180
|
elif self._is_direct_device(url):
|
|
162
|
-
streamer = DirectDeviceToRTMPStreamer(url,
|
|
181
|
+
streamer = DirectDeviceToRTMPStreamer(url, stream_key, stream_duration)
|
|
163
182
|
else:
|
|
164
183
|
# Assume RTSP or other supported protocols
|
|
165
|
-
streamer = RTSPtoRTMPStreamer(url,
|
|
184
|
+
streamer = RTSPtoRTMPStreamer(url, stream_key, stream_duration)
|
|
166
185
|
|
|
167
186
|
streamer.start_stream()
|
|
168
187
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nedo-vision-worker
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.12
|
|
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>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
nedo_vision_worker/__init__.py,sha256=
|
|
2
|
-
nedo_vision_worker/bootstrap.py,sha256=
|
|
3
|
-
nedo_vision_worker/cli.py,sha256=
|
|
1
|
+
nedo_vision_worker/__init__.py,sha256=RoVtZhuxCdarwYu83xdXmrvTl26wSon6_uw47nooOHQ,204
|
|
2
|
+
nedo_vision_worker/bootstrap.py,sha256=pZ_2sLTQw0PO6hyDTgYoZgdpGJ7W6F7rwHWqnNAuUEs,1652
|
|
3
|
+
nedo_vision_worker/cli.py,sha256=Yov2_YqZzOEPn6Ce-zZu5exCRCxg93l7xPgISL79Jf8,2769
|
|
4
4
|
nedo_vision_worker/doctor.py,sha256=wNkpe8gLVd76Y_ViyK2h1ZFdqeSl37MnzZN5frWKu30,48410
|
|
5
5
|
nedo_vision_worker/worker_service.py,sha256=4SoWqjuz7lQKByU48-yBLV0CeTmX9LIJ5uIc-vmn6ck,7318
|
|
6
|
-
nedo_vision_worker/config/ConfigurationManager.py,sha256=
|
|
6
|
+
nedo_vision_worker/config/ConfigurationManager.py,sha256=gsNPjaK65sOQBGta99PEGxtejpxso82jtGq77lUElbc,8599
|
|
7
7
|
nedo_vision_worker/config/ConfigurationManagerInterface.py,sha256=doV1Qv6e2edL5Llu-JOF_vhmB87iG-yTXL_GYmlvv9M,270
|
|
8
|
-
nedo_vision_worker/config/DummyConfigurationManager.py,sha256
|
|
8
|
+
nedo_vision_worker/config/DummyConfigurationManager.py,sha256=-ugVGKa8NNDXe3WChrVGAZ5Y4CsdvyTKC1D4WBGAhLI,1872
|
|
9
9
|
nedo_vision_worker/config/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
|
|
10
10
|
nedo_vision_worker/database/DatabaseManager.py,sha256=j2koXo1fnMmAyQnY4sv4txfZR8qIzrPyev-sQ4HBaOQ,9478
|
|
11
11
|
nedo_vision_worker/database/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
|
|
@@ -49,16 +49,16 @@ nedo_vision_worker/repositories/WorkerSourcePipelineRepository.py,sha256=xfmEvgn
|
|
|
49
49
|
nedo_vision_worker/repositories/WorkerSourceRepository.py,sha256=AhAJLAacMFdsOgtQNiu7Pahl1DAGI0T1THHeUlKwQJc,2385
|
|
50
50
|
nedo_vision_worker/repositories/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
|
|
51
51
|
nedo_vision_worker/services/AIModelClient.py,sha256=lxRNax6FR-pV0G1NpJnlaqjbQeu3kRolIUNSw1RkoZA,15406
|
|
52
|
-
nedo_vision_worker/services/ConnectionInfoClient.py,sha256=
|
|
52
|
+
nedo_vision_worker/services/ConnectionInfoClient.py,sha256=toC9zuY2Hrx1Cwq8Gycy_iFlaG1DvFT4qewlLlitpEQ,2214
|
|
53
53
|
nedo_vision_worker/services/DatasetSourceClient.py,sha256=O5a7onxFl0z47zXaMXWxHAMPuuc-i_vzkd2w5fwrukc,3319
|
|
54
|
-
nedo_vision_worker/services/DirectDeviceToRTMPStreamer.py,sha256=
|
|
55
|
-
nedo_vision_worker/services/FileToRTMPServer.py,sha256=
|
|
54
|
+
nedo_vision_worker/services/DirectDeviceToRTMPStreamer.py,sha256=YO_z1DPQgVoR2hakmd5vP07D8_DYkWYaWT68mOT4rUk,24731
|
|
55
|
+
nedo_vision_worker/services/FileToRTMPServer.py,sha256=ZxcV1sjvvTqfeIuRuwa8uxKbKATYnxP7xwxX5cWdlTc,2904
|
|
56
56
|
nedo_vision_worker/services/GrpcClientBase.py,sha256=RkJDGRsXu5HalMDR8cOsIaoFf5tA_cLTkh5euBPyo2M,6852
|
|
57
57
|
nedo_vision_worker/services/GrpcClientManager.py,sha256=DLXekmxlQogLo8V9-TNDXtyHT_UG-BaggqwsIups55k,5568
|
|
58
58
|
nedo_vision_worker/services/GrpcConnection.py,sha256=UNjaUC4ZcXuteHQx8AAAL5ymYkT1OpoIvyCYPUc3tCI,4915
|
|
59
59
|
nedo_vision_worker/services/ImageUploadClient.py,sha256=T353YsRfm74G7Mh-eWr5nvdQHXTfpKwHJFmNW8HyjT8,3019
|
|
60
60
|
nedo_vision_worker/services/PPEDetectionClient.py,sha256=3oE_Y0Avw_kcWKgTA7qmChq32woW7JerWefrCxllUYU,5172
|
|
61
|
-
nedo_vision_worker/services/RTSPtoRTMPStreamer.py,sha256=
|
|
61
|
+
nedo_vision_worker/services/RTSPtoRTMPStreamer.py,sha256=UoSMRlp9r7QCQRNkPjrVO9OmDeGIgJRxD1la6YFOPyk,3837
|
|
62
62
|
nedo_vision_worker/services/RestrictedAreaClient.py,sha256=TD2Y5UJ0NjXgNFNgwS5ze4P-5jWwgrP0j0Nlyyd7-6Q,4844
|
|
63
63
|
nedo_vision_worker/services/SharedDirectDeviceClient.py,sha256=dylMhqpMsfK_UKLWIVL-ApJRP4g-NCP_55xvlGYBiwo,10760
|
|
64
64
|
nedo_vision_worker/services/SharedVideoStreamServer.py,sha256=WMKVxkzMoyfbgYiJ0fQOT-Ujz9btz6FLlaDP738yfoY,11601
|
|
@@ -78,6 +78,7 @@ nedo_vision_worker/util/HardwareID.py,sha256=rSW8-6stm7rjXEdkYGqXMUn56gyw62YiWnS
|
|
|
78
78
|
nedo_vision_worker/util/ImageUploader.py,sha256=2xipN3fwpKgFmbvoGIdElpGn5ARJyrgR4dXtbRf73hw,3764
|
|
79
79
|
nedo_vision_worker/util/Networking.py,sha256=uOtL8HkKZXJp02ZZIHWYMAvAsaYb7BsAPTncfdvJx2c,3241
|
|
80
80
|
nedo_vision_worker/util/PlatformDetector.py,sha256=-iLPrKs7hp_oltkCI3hESJQkC2uRyu1-8mAbZrvgWx0,1501
|
|
81
|
+
nedo_vision_worker/util/RTMPUrl.py,sha256=BKB_FyFMFbRFhqvu_PftbiUCe_DhleJCx6FGg8z-htw,845
|
|
81
82
|
nedo_vision_worker/util/SystemMonitor.py,sha256=2kkqj9mOlywAS2fHdN1TaIXSXvCApcIHj0IO2T9k3Yw,11471
|
|
82
83
|
nedo_vision_worker/util/VideoProbeUtil.py,sha256=cF-vJ7hIDlXfEJby2a0s9tqwkPGVz_6B3Vv4D5pMmIw,12876
|
|
83
84
|
nedo_vision_worker/util/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
|
|
@@ -93,11 +94,11 @@ nedo_vision_worker/worker/PipelinePreviewWorker.py,sha256=owFiBbktcOZkdImQeykZSe
|
|
|
93
94
|
nedo_vision_worker/worker/RabbitMQListener.py,sha256=Gwn7VpRg0fMZ0fva98eOnTzZ4HPFf2i_ZCUgwfTdyYQ,6768
|
|
94
95
|
nedo_vision_worker/worker/RestrictedAreaManager.py,sha256=Pz2M9KPSMa1QPXZeYhyN9ih4eX6wmkNS_ZPu5KrvNxY,5927
|
|
95
96
|
nedo_vision_worker/worker/SystemUsageManager.py,sha256=mkh4sT-HkIEY1CJHMEG6LP9ATu39YXvLRLyf995OkoQ,5315
|
|
96
|
-
nedo_vision_worker/worker/VideoStreamWorker.py,sha256=
|
|
97
|
+
nedo_vision_worker/worker/VideoStreamWorker.py,sha256=e6J_9en03JHkWLBqHR5QDRQHWdhcD3Nz3pN8GgkPTgk,8052
|
|
97
98
|
nedo_vision_worker/worker/WorkerManager.py,sha256=2bxXi19fp3p1qjYBStYRdVVgko8dnevXx1_M_sqH5og,5521
|
|
98
99
|
nedo_vision_worker/worker/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
|
|
99
|
-
nedo_vision_worker-1.3.
|
|
100
|
-
nedo_vision_worker-1.3.
|
|
101
|
-
nedo_vision_worker-1.3.
|
|
102
|
-
nedo_vision_worker-1.3.
|
|
103
|
-
nedo_vision_worker-1.3.
|
|
100
|
+
nedo_vision_worker-1.3.12.dist-info/METADATA,sha256=9ZtnikwQ8W5CZk726SpCC1eQi5TUY_6qvaQ2lucqexM,14654
|
|
101
|
+
nedo_vision_worker-1.3.12.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
|
|
102
|
+
nedo_vision_worker-1.3.12.dist-info/entry_points.txt,sha256=LrglS-8nCi8C_PL_pa6uxdgCe879hBETHDVXAckvs-8,60
|
|
103
|
+
nedo_vision_worker-1.3.12.dist-info/top_level.txt,sha256=vgilhlkyD34YsEKkaBabmhIpcKSvF3XpzD2By68L-XI,19
|
|
104
|
+
nedo_vision_worker-1.3.12.dist-info/RECORD,,
|
{nedo_vision_worker-1.3.11.dist-info → nedo_vision_worker-1.3.12.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|