sciveo 0.1.57__tar.gz → 0.1.59__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.
- {sciveo-0.1.57 → sciveo-0.1.59}/PKG-INFO +1 -1
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/cli.py +11 -6
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/tools/nvr.py +1 -1
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/tools/video_interactive.py +1 -1
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/images/embeddings.py +4 -1
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/video/description.py +1 -0
- sciveo-0.1.59/sciveo/monitoring/watchdog/base.py +55 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/configuration.py +1 -0
- sciveo-0.1.59/sciveo/tools/draw/__init__.py +0 -0
- sciveo-0.1.59/sciveo/tools/draw/contours.py +147 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/remote.py +1 -3
- sciveo-0.1.59/sciveo/version.py +2 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo.egg-info/PKG-INFO +1 -1
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo.egg-info/SOURCES.txt +3 -1
- sciveo-0.1.57/sciveo/monitoring/watchdog/memory.py +0 -37
- sciveo-0.1.57/sciveo/version.py +0 -2
- {sciveo-0.1.57 → sciveo-0.1.59}/README.md +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/api/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/api/base.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/api/predictors.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/api/server.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/api/upload.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/common/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/common/configuration.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/common/model.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/common/optimizers.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/common/sampling.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/content/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/content/dataset.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/content/experiment.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/content/project.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/content/runner.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/ml/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/ml/base.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/ml/encoders/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/ml/encoders/base.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/ml/encoders/normalizer.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/ml/nlp/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/ml/nlp/search.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/ml/time_series/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/ml/time_series/dataset.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/ml/time_series/predictor.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/ml/time_series/trainer.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/ml/time_series/window_generator.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/base.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/job_daemon.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/layouts/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/layouts/base.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/pipeline.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/postprocessors/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/postprocessors/base.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/postprocessors/default.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/audio/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/audio/audio.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/audio/audio_extractor_process.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/aws.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/base.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/file/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/file/archive.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/image/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/image/album.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/image/album_in_image.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/image/depth_esimation.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/image/embeddings.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/image/filters.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/image/generators.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/image/histogram.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/image/mask.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/image/object_detection.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/image/resize.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/image/segmentation.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/image/watermark.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/media_info.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/nlp/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/nlp/address.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/qr.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/sci/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/sci/base.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/sci/dataset.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/sci/time_series/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/sci/time_series/predictor.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/sci/time_series/trainer.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/tpu_base.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/video/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/video/generators.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/video/motion_detection.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/video/resize.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/video/video_album.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/video/video_frames.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/video/video_resample.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/queues.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/server.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/web/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/web/server.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/tools/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/base.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/dataset/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/dataset/object_detection.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/evaluation/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/evaluation/markdown.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/evaluation/object_detection.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/images/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/images/base.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/images/description.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/images/object_detection.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/images/tools.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/images/transformers.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/nlp/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/nlp/embeddings.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/nlp/tokenizers/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/nlp/tokenizers/bpe.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/ml/video/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/monitoring/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/monitoring/monitor.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/monitoring/start.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/monitoring/watchdog/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/network/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/network/camera.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/network/sniffer.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/network/tools.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/array.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/aws/__init__.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/aws/priority_queue.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/aws/s3.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/common.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/complexity.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/compress.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/crypto.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/daemon.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/formating.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/hardware.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/http.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/logger.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/os.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/queue.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/random.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/simple_counter.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/synchronized.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo/tools/timers.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo.egg-info/dependency_links.txt +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo.egg-info/entry_points.txt +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo.egg-info/requires.txt +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/sciveo.egg-info/top_level.txt +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/setup.cfg +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/setup.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/test/test_complexity.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/test/test_compress.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/test/test_configuration.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/test/test_crypto.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/test/test_eval_markdown.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/test/test_ml_datasets.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/test/test_monitoring.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/test/test_runner.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/test/test_sampling.py +0 -0
- {sciveo-0.1.57 → sciveo-0.1.59}/test/test_tokenizers.py +0 -0
|
@@ -15,6 +15,7 @@ import time
|
|
|
15
15
|
import json
|
|
16
16
|
import argparse
|
|
17
17
|
|
|
18
|
+
from sciveo.version import __version__
|
|
18
19
|
from sciveo.tools.logger import *
|
|
19
20
|
from sciveo.tools.configuration import GlobalConfiguration
|
|
20
21
|
|
|
@@ -22,7 +23,7 @@ from sciveo.tools.configuration import GlobalConfiguration
|
|
|
22
23
|
def main():
|
|
23
24
|
config = GlobalConfiguration.get()
|
|
24
25
|
|
|
25
|
-
parser = argparse.ArgumentParser(description='
|
|
26
|
+
parser = argparse.ArgumentParser(description=f'{config.name} CLI')
|
|
26
27
|
parser.add_argument(
|
|
27
28
|
'command',
|
|
28
29
|
choices=[
|
|
@@ -41,7 +42,7 @@ def main():
|
|
|
41
42
|
parser.add_argument('--port', type=int, default=22, help='Host port number, used for network ops')
|
|
42
43
|
parser.add_argument('--ports', type=str, default="[]", help='Host ports list')
|
|
43
44
|
parser.add_argument('--localhost', type=bool, default=False, help='Add localhost to list of hosts')
|
|
44
|
-
parser.add_argument('--input-path', type=str, help='Input Path')
|
|
45
|
+
parser.add_argument('--input-path', type=str, default=None, help='Input Path')
|
|
45
46
|
parser.add_argument('--output-path', type=str, default=None, help='Output Path')
|
|
46
47
|
parser.add_argument('--width', type=str, default=None, help='width')
|
|
47
48
|
parser.add_argument('--height', type=str, default=None, help='height')
|
|
@@ -66,13 +67,14 @@ def main():
|
|
|
66
67
|
else:
|
|
67
68
|
NetworkTools(timeout=args.timeout, ports=json.loads(args.ports)).scan_host(host)
|
|
68
69
|
elif args.command == 'init':
|
|
70
|
+
info(f"init {config.name} ver {__version__}")
|
|
69
71
|
home = os.path.expanduser('~')
|
|
70
|
-
base_path = os.path.join(home, '.
|
|
72
|
+
base_path = os.path.join(home, f'.{config.name}')
|
|
71
73
|
if not os.path.exists(base_path):
|
|
72
74
|
os.makedirs(base_path)
|
|
73
75
|
default_lines = [
|
|
74
76
|
"secret_access_key=<your secret access key>",
|
|
75
|
-
"api_base_url=https://
|
|
77
|
+
f"api_base_url=https://{config.name}.com",
|
|
76
78
|
"sci_log_level=DEBUG"
|
|
77
79
|
]
|
|
78
80
|
with open(os.path.join(base_path, "default"), 'w') as fp:
|
|
@@ -91,10 +93,13 @@ def main():
|
|
|
91
93
|
from sciveo.media.pipelines.processors.audio.audio_extractor_process import plot_audio
|
|
92
94
|
plot_audio(args.width, args.height, args.rate, args.input_path, args.output_path)
|
|
93
95
|
elif args.command == 'watchdog':
|
|
94
|
-
from sciveo.monitoring.watchdog.
|
|
96
|
+
from sciveo.monitoring.watchdog.base import MemoryWatchDogDaemon, DiskWatchDogDaemon
|
|
95
97
|
daemons = []
|
|
96
98
|
if args.execute is not None:
|
|
97
|
-
|
|
99
|
+
if args.src is None or args.src.startswith("mem"):
|
|
100
|
+
daemons.append(MemoryWatchDogDaemon(threshold_percent=args.threshold, period=args.period, command=args.execute))
|
|
101
|
+
elif args.src.startswith("disk") and args.input_path is not None:
|
|
102
|
+
daemons.append(DiskWatchDogDaemon(path=args.input_path, threshold_percent=args.threshold, period=args.period, command=args.execute))
|
|
98
103
|
for daemon in daemons:
|
|
99
104
|
daemon.start()
|
|
100
105
|
while(True):
|
|
@@ -23,7 +23,7 @@ class BaseInteractiveVideoPlayer:
|
|
|
23
23
|
def __init__(self, path_video, tag):
|
|
24
24
|
self.path_video = path_video
|
|
25
25
|
self.file_name = os.path.basename(self.path_video)
|
|
26
|
-
self.file_name_base =
|
|
26
|
+
self.file_name_base = os.path.splitext(self.file_name)[0]
|
|
27
27
|
self.path_base = os.path.dirname(self.path_video)
|
|
28
28
|
self.tag = tag
|
|
29
29
|
self.frame_tag = f"Video {tag}"
|
|
@@ -89,7 +89,10 @@ class ImageEmbedding(BaseImageML):
|
|
|
89
89
|
def predict_one(self, x):
|
|
90
90
|
self.init()
|
|
91
91
|
image = self.read_image(x)
|
|
92
|
-
|
|
92
|
+
embedding = self.embed(image)
|
|
93
|
+
if not isinstance(embedding, list):
|
|
94
|
+
embedding = embedding.tolist()
|
|
95
|
+
return embedding
|
|
93
96
|
|
|
94
97
|
def predict(self, X):
|
|
95
98
|
self.init()
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Pavlin Georgiev, Softel Labs
|
|
3
|
+
#
|
|
4
|
+
# This is a proprietary file and may not be copied,
|
|
5
|
+
# distributed, or modified without express permission
|
|
6
|
+
# from the owner. For licensing inquiries, please
|
|
7
|
+
# contact pavlin@softel.bg.
|
|
8
|
+
#
|
|
9
|
+
# 2025
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
import psutil
|
|
14
|
+
import subprocess
|
|
15
|
+
|
|
16
|
+
from sciveo.tools.daemon import *
|
|
17
|
+
from sciveo.tools.logger import *
|
|
18
|
+
from sciveo.tools.simple_counter import RunCounter
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class BaseWatchDogDaemon(DaemonBase):
|
|
22
|
+
def __init__(self, threshold_percent=90, period=5, command="echo '⚠️'", monitored="none"):
|
|
23
|
+
super().__init__(period=period)
|
|
24
|
+
self.threshold_percent = threshold_percent
|
|
25
|
+
self.command = command
|
|
26
|
+
self.used_percent = 0
|
|
27
|
+
self.monitored = monitored
|
|
28
|
+
self.printer = RunCounter(60, lambda: debug(f"{self.monitored} usage: {self.used_percent}%", f"threshold: {self.threshold_percent}%"))
|
|
29
|
+
|
|
30
|
+
def get_used_percent(self):
|
|
31
|
+
return 0.0
|
|
32
|
+
|
|
33
|
+
def loop(self):
|
|
34
|
+
current_value = self.value()
|
|
35
|
+
self.used_percent = current_value["percent"]
|
|
36
|
+
self.printer.run()
|
|
37
|
+
if self.used_percent > self.threshold_percent:
|
|
38
|
+
warning(f"⚠️ {self.monitored} usage {self.used_percent}% exceeded {self.threshold_percent}%, executing command: {self.command}")
|
|
39
|
+
subprocess.run(self.command, shell=True)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class MemoryWatchDogDaemon(BaseWatchDogDaemon):
|
|
43
|
+
def __init__(self, threshold_percent=90, period=5, command="echo '⚠️ Low Memory!'"):
|
|
44
|
+
super().__init__(threshold_percent=threshold_percent, period=period, command=command, monitored="Memory")
|
|
45
|
+
|
|
46
|
+
def value(self):
|
|
47
|
+
return psutil.virtual_memory()._asdict()
|
|
48
|
+
|
|
49
|
+
class DiskWatchDogDaemon(BaseWatchDogDaemon):
|
|
50
|
+
def __init__(self, path, threshold_percent=90, period=5, command="echo '⚠️ Low Disk space!'"):
|
|
51
|
+
self.path = path
|
|
52
|
+
super().__init__(threshold_percent=threshold_percent, period=period, command=command, monitored=f"Disk [{self.path}] space")
|
|
53
|
+
|
|
54
|
+
def value(self):
|
|
55
|
+
return psutil.disk_usage(self.path)._asdict()
|
|
File without changes
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Pavlin Georgiev, Softel Labs
|
|
3
|
+
#
|
|
4
|
+
# This is a proprietary file and may not be copied,
|
|
5
|
+
# distributed, or modified without express permission
|
|
6
|
+
# from the owner. For licensing inquiries, please
|
|
7
|
+
# contact pavlin@softel.bg.
|
|
8
|
+
#
|
|
9
|
+
# 2025
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
import os
|
|
13
|
+
import time
|
|
14
|
+
import cv2
|
|
15
|
+
import numpy as np
|
|
16
|
+
|
|
17
|
+
from sciveo.tools.logger import *
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class MapContoursUI:
|
|
21
|
+
def __init__(self, image_path):
|
|
22
|
+
self.image_path = image_path
|
|
23
|
+
self.image = cv2.imread(image_path)
|
|
24
|
+
if self.image is None:
|
|
25
|
+
raise ValueError(f"Image not found: {image_path}")
|
|
26
|
+
self.contours = []
|
|
27
|
+
self.current_contour = []
|
|
28
|
+
self.current_mouse_pos = (0, 0)
|
|
29
|
+
self.drawing = False
|
|
30
|
+
self.display = self.image.copy()
|
|
31
|
+
|
|
32
|
+
def _mouse_callback(self, event, x, y, flags, param):
|
|
33
|
+
if event == cv2.EVENT_MOUSEMOVE:
|
|
34
|
+
self.current_mouse_pos = (x, y)
|
|
35
|
+
|
|
36
|
+
def draw(self):
|
|
37
|
+
cv2.namedWindow("Contour Drawing")
|
|
38
|
+
cv2.setMouseCallback("Contour Drawing", self._mouse_callback)
|
|
39
|
+
|
|
40
|
+
print("\nControls:\n"
|
|
41
|
+
" c - Start new contour\n"
|
|
42
|
+
" v - Add point\n"
|
|
43
|
+
" x - Finalize contour\n"
|
|
44
|
+
" u - Undo last contour\n"
|
|
45
|
+
" z - Finish & show areas\n")
|
|
46
|
+
|
|
47
|
+
while True:
|
|
48
|
+
frame = self.display.copy()
|
|
49
|
+
|
|
50
|
+
for cnt in self.contours:
|
|
51
|
+
cv2.polylines(frame, [cnt], isClosed=True, color=(255, 0, 255), thickness=2)
|
|
52
|
+
|
|
53
|
+
if self.current_contour:
|
|
54
|
+
pts = self.current_contour + [self.current_mouse_pos]
|
|
55
|
+
for i in range(1, len(pts)):
|
|
56
|
+
cv2.line(frame, pts[i - 1], pts[i], (0, 255, 255), 1)
|
|
57
|
+
|
|
58
|
+
cv2.circle(frame, self.current_mouse_pos, 5, (0, 255, 0), -1)
|
|
59
|
+
|
|
60
|
+
self.draw_contour_indexes(frame)
|
|
61
|
+
self.draw_contour_lengths(frame)
|
|
62
|
+
|
|
63
|
+
cv2.imshow("Contour Drawing", frame)
|
|
64
|
+
key = cv2.waitKey(1) & 0xFF
|
|
65
|
+
|
|
66
|
+
if key == ord('c'): # Start new contour
|
|
67
|
+
self.current_contour = []
|
|
68
|
+
self.drawing = True
|
|
69
|
+
print("Started new contour.")
|
|
70
|
+
|
|
71
|
+
elif key == ord('v') and self.drawing: # Add point
|
|
72
|
+
self.current_contour.append(self.current_mouse_pos)
|
|
73
|
+
print(f"Added point: {self.current_mouse_pos}")
|
|
74
|
+
|
|
75
|
+
elif key == ord('x') and self.drawing: # Finalize
|
|
76
|
+
if len(self.current_contour) >= 3:
|
|
77
|
+
self.contours.append(np.array(self.current_contour, dtype=np.int32))
|
|
78
|
+
print("Contour finalized.")
|
|
79
|
+
else:
|
|
80
|
+
print("Contour discarded (not enough points).")
|
|
81
|
+
self.current_contour = []
|
|
82
|
+
self.drawing = False
|
|
83
|
+
|
|
84
|
+
elif key == ord('u') and self.contours: # Undo
|
|
85
|
+
self.contours.pop()
|
|
86
|
+
print("Last contour removed.")
|
|
87
|
+
|
|
88
|
+
elif key == ord('z'): # Finish
|
|
89
|
+
cv2.destroyWindow("Contour Drawing")
|
|
90
|
+
break
|
|
91
|
+
|
|
92
|
+
self.print_area_summary()
|
|
93
|
+
time.sleep(5)
|
|
94
|
+
cv2.destroyAllWindows()
|
|
95
|
+
|
|
96
|
+
def draw_contour_indexes(self, frame):
|
|
97
|
+
for idx, cnt in enumerate(self.contours):
|
|
98
|
+
M = cv2.moments(cnt)
|
|
99
|
+
if M["m00"] != 0:
|
|
100
|
+
cx = int(M["m10"] / M["m00"])
|
|
101
|
+
cy = int(M["m01"] / M["m00"])
|
|
102
|
+
cv2.putText(frame, str(idx + 1), (cx - 10, cy + 10), cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0, 255, 0), 3)
|
|
103
|
+
|
|
104
|
+
def draw_contour_lengths(self, frame):
|
|
105
|
+
for cnt in self.contours:
|
|
106
|
+
points = cnt.reshape(-1, 2)
|
|
107
|
+
for i in range(len(points)):
|
|
108
|
+
p1 = points[i]
|
|
109
|
+
p2 = points[(i + 1) % len(points)]
|
|
110
|
+
dist = int(np.linalg.norm(p1 - p2))
|
|
111
|
+
mid = ((p1[0] + p2[0]) // 2, (p1[1] + p2[1]) // 2)
|
|
112
|
+
cv2.putText(frame, f"{dist}px", mid, cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 255), 1)
|
|
113
|
+
|
|
114
|
+
if self.current_contour:
|
|
115
|
+
pts = self.current_contour + [self.current_mouse_pos]
|
|
116
|
+
for i in range(len(pts) - 1):
|
|
117
|
+
cv2.line(frame, pts[i], pts[i + 1], (0, 255, 0), 1)
|
|
118
|
+
|
|
119
|
+
dist = int(np.linalg.norm(np.array(pts[i]) - np.array(pts[i + 1])))
|
|
120
|
+
mid = ((pts[i][0] + pts[i + 1][0]) // 2, (pts[i][1] + pts[i + 1][1]) // 2)
|
|
121
|
+
cv2.putText(frame, f"{dist}px", mid, cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1)
|
|
122
|
+
|
|
123
|
+
def print_area_summary(self):
|
|
124
|
+
info("🧮 Contour Areas")
|
|
125
|
+
for i, cnt in enumerate(self.contours):
|
|
126
|
+
area = cv2.contourArea(cnt)
|
|
127
|
+
info(f"Contour {i+1}: Area = {area:.2f}")
|
|
128
|
+
|
|
129
|
+
def save(self, path):
|
|
130
|
+
np.save(path, np.array(self.contours, dtype=object))
|
|
131
|
+
info(f"Contours saved to: {path}")
|
|
132
|
+
|
|
133
|
+
def load(self, path):
|
|
134
|
+
if os.path.exists(path):
|
|
135
|
+
loaded = np.load(path, allow_pickle=True)
|
|
136
|
+
self.contours = list(loaded)
|
|
137
|
+
info(f"Contours loaded from: {path}")
|
|
138
|
+
self.print_area_summary()
|
|
139
|
+
else:
|
|
140
|
+
info(f"File not found: {path}")
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
if __name__ == "__main__":
|
|
144
|
+
ui = MapContoursUI(os.environ["PATH_IMAGE"])
|
|
145
|
+
ui.load(os.environ["PATH_SAVE_CONTOURS"])
|
|
146
|
+
ui.draw()
|
|
147
|
+
ui.save(os.environ["PATH_SAVE_CONTOURS"])
|
|
@@ -9,9 +9,6 @@
|
|
|
9
9
|
# 2024
|
|
10
10
|
#
|
|
11
11
|
|
|
12
|
-
import os
|
|
13
|
-
import time
|
|
14
|
-
import cv2
|
|
15
12
|
import base64
|
|
16
13
|
import requests
|
|
17
14
|
|
|
@@ -56,6 +53,7 @@ class PredictorRemoteClient:
|
|
|
56
53
|
return data
|
|
57
54
|
|
|
58
55
|
def image_encoded(self, image=None, resize_to=(256, 256), local_path=None):
|
|
56
|
+
import cv2
|
|
59
57
|
if local_path is not None:
|
|
60
58
|
image = cv2.imread(local_path)
|
|
61
59
|
if resize_to is not None:
|
|
@@ -116,7 +116,7 @@ sciveo/monitoring/__init__.py
|
|
|
116
116
|
sciveo/monitoring/monitor.py
|
|
117
117
|
sciveo/monitoring/start.py
|
|
118
118
|
sciveo/monitoring/watchdog/__init__.py
|
|
119
|
-
sciveo/monitoring/watchdog/
|
|
119
|
+
sciveo/monitoring/watchdog/base.py
|
|
120
120
|
sciveo/network/__init__.py
|
|
121
121
|
sciveo/network/camera.py
|
|
122
122
|
sciveo/network/sniffer.py
|
|
@@ -143,6 +143,8 @@ sciveo/tools/timers.py
|
|
|
143
143
|
sciveo/tools/aws/__init__.py
|
|
144
144
|
sciveo/tools/aws/priority_queue.py
|
|
145
145
|
sciveo/tools/aws/s3.py
|
|
146
|
+
sciveo/tools/draw/__init__.py
|
|
147
|
+
sciveo/tools/draw/contours.py
|
|
146
148
|
test/test_complexity.py
|
|
147
149
|
test/test_compress.py
|
|
148
150
|
test/test_configuration.py
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Pavlin Georgiev, Softel Labs
|
|
3
|
-
#
|
|
4
|
-
# This is a proprietary file and may not be copied,
|
|
5
|
-
# distributed, or modified without express permission
|
|
6
|
-
# from the owner. For licensing inquiries, please
|
|
7
|
-
# contact pavlin@softel.bg.
|
|
8
|
-
#
|
|
9
|
-
# 2025
|
|
10
|
-
#
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
import psutil
|
|
14
|
-
import subprocess
|
|
15
|
-
import time
|
|
16
|
-
import threading
|
|
17
|
-
|
|
18
|
-
from sciveo.tools.daemon import *
|
|
19
|
-
from sciveo.tools.logger import *
|
|
20
|
-
from sciveo.tools.simple_counter import RunCounter
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class MemoryWatchDogDaemon(DaemonBase):
|
|
24
|
-
def __init__(self, threshold_percent=90, period=5, command="echo '⚠️ Low Memory!'"):
|
|
25
|
-
super().__init__(period=period)
|
|
26
|
-
self.threshold_percent = threshold_percent
|
|
27
|
-
self.command = command
|
|
28
|
-
self.used_percent = 0
|
|
29
|
-
self.printer = RunCounter(60, lambda: debug(f"Memory usage: {self.used_percent}%", f"threshold: {self.threshold_percent}%"))
|
|
30
|
-
|
|
31
|
-
def loop(self):
|
|
32
|
-
mem = psutil.virtual_memory()
|
|
33
|
-
self.used_percent = mem.percent
|
|
34
|
-
self.printer.run()
|
|
35
|
-
if self.used_percent > self.threshold_percent:
|
|
36
|
-
warning(f"⚠️ Memory usage {self.used_percent}% exceeded {self.threshold_percent}%, executing command: {self.command}")
|
|
37
|
-
subprocess.run(self.command, shell=True)
|
sciveo-0.1.57/sciveo/version.py
DELETED
|
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
|
{sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/audio/audio_extractor_process.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
|
{sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/sci/time_series/__init__.py
RENAMED
|
File without changes
|
{sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/sci/time_series/predictor.py
RENAMED
|
File without changes
|
{sciveo-0.1.57 → sciveo-0.1.59}/sciveo/media/pipelines/processors/sci/time_series/trainer.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
|