sciveo 0.1.53__tar.gz → 0.1.54__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.53 → sciveo-0.1.54}/PKG-INFO +2 -2
- sciveo-0.1.54/sciveo/media/tools/video_interactive.py +138 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/timers.py +13 -2
- sciveo-0.1.54/sciveo/version.py +2 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo.egg-info/PKG-INFO +2 -2
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo.egg-info/SOURCES.txt +1 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo.egg-info/requires.txt +21 -17
- {sciveo-0.1.53 → sciveo-0.1.54}/setup.py +2 -2
- sciveo-0.1.53/sciveo/version.py +0 -2
- {sciveo-0.1.53 → sciveo-0.1.54}/README.md +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/api/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/api/base.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/api/predictors.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/api/server.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/api/upload.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/cli.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/common/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/common/configuration.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/common/model.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/common/optimizers.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/common/sampling.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/content/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/content/dataset.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/content/experiment.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/content/project.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/content/runner.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/ml/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/ml/base.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/ml/encoders/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/ml/encoders/base.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/ml/encoders/normalizer.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/ml/nlp/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/ml/nlp/search.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/ml/time_series/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/ml/time_series/dataset.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/ml/time_series/predictor.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/ml/time_series/trainer.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/ml/time_series/window_generator.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/base.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/job_daemon.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/layouts/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/layouts/base.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/pipeline.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/postprocessors/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/postprocessors/base.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/postprocessors/default.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/audio/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/audio/audio.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/audio/audio_extractor_process.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/aws.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/base.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/file/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/file/archive.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/image/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/image/album.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/image/album_in_image.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/image/depth_esimation.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/image/embeddings.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/image/filters.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/image/generators.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/image/histogram.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/image/mask.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/image/object_detection.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/image/resize.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/image/segmentation.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/image/watermark.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/media_info.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/nlp/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/nlp/address.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/qr.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/sci/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/sci/base.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/sci/dataset.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/sci/time_series/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/sci/time_series/predictor.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/sci/time_series/trainer.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/tpu_base.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/video/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/video/generators.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/video/motion_detection.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/video/resize.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/video/video_album.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/video/video_frames.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/video/video_resample.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/queues.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/server.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/web/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/web/server.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/tools/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/tools/nvr.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/base.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/dataset/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/dataset/object_detection.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/evaluation/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/evaluation/object_detection.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/images/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/images/base.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/images/description.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/images/embeddings.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/images/object_detection.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/images/segmentation.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/images/tools.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/images/transformers.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/nlp/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/nlp/embeddings.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/nlp/tokenizers/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/nlp/tokenizers/bpe.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/video/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/ml/video/description.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/monitoring/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/monitoring/monitor.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/monitoring/start.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/monitoring/watchdog/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/monitoring/watchdog/memory.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/network/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/network/camera.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/network/sniffer.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/network/tools.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/array.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/aws/__init__.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/aws/priority_queue.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/aws/s3.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/common.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/complexity.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/compress.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/configuration.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/crypto.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/daemon.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/formating.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/hardware.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/http.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/logger.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/os.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/queue.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/random.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/remote.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/simple_counter.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo/tools/synchronized.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo.egg-info/dependency_links.txt +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo.egg-info/entry_points.txt +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/sciveo.egg-info/top_level.txt +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/setup.cfg +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/test/test_complexity.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/test/test_compress.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/test/test_configuration.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/test/test_crypto.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/test/test_ml_datasets.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/test/test_monitoring.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/test/test_runner.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/test/test_sampling.py +0 -0
- {sciveo-0.1.53 → sciveo-0.1.54}/test/test_tokenizers.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sciveo
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.54
|
|
4
4
|
Description-Content-Type: text/markdown
|
|
5
5
|
Provides-Extra: mon
|
|
6
6
|
Provides-Extra: net
|
|
@@ -8,7 +8,7 @@ Provides-Extra: server
|
|
|
8
8
|
Provides-Extra: media
|
|
9
9
|
Provides-Extra: media-ml
|
|
10
10
|
Provides-Extra: all
|
|
11
|
-
Provides-Extra:
|
|
11
|
+
Provides-Extra: ml
|
|
12
12
|
|
|
13
13
|
# SCIVEO - ML/AI and Scientific tools
|
|
14
14
|
|
|
@@ -0,0 +1,138 @@
|
|
|
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
|
+
# 2024
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
import os
|
|
13
|
+
import time
|
|
14
|
+
import cv2
|
|
15
|
+
import threading
|
|
16
|
+
import numpy as np
|
|
17
|
+
|
|
18
|
+
from sciveo.tools.logger import *
|
|
19
|
+
from sciveo.tools.timers import FPSCounter
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class BaseInteractiveVideoPlayer:
|
|
23
|
+
def __init__(self, path_video, tag):
|
|
24
|
+
self.path_video = path_video
|
|
25
|
+
self.file_name = os.path.basename(self.path_video)
|
|
26
|
+
self.file_name_base = filename_without_ext = os.path.splitext(self.file_name)[0]
|
|
27
|
+
self.path_base = os.path.dirname(self.path_video)
|
|
28
|
+
self.tag = tag
|
|
29
|
+
self.frame_tag = f"Video {tag}"
|
|
30
|
+
|
|
31
|
+
self.cap = None
|
|
32
|
+
self.frame = None
|
|
33
|
+
self.frame_id = 0
|
|
34
|
+
self.result = None
|
|
35
|
+
self.progress_lock = threading.Lock()
|
|
36
|
+
self.frame_lock = threading.Lock()
|
|
37
|
+
self.ui_video_progress_tag = "video time progress"
|
|
38
|
+
|
|
39
|
+
self.fps_ui = FPSCounter(tag="ui", period=1, print_period=600)
|
|
40
|
+
self.fps_read = FPSCounter(tag="read", period=1, print_period=600)
|
|
41
|
+
|
|
42
|
+
self.stop_threads = False
|
|
43
|
+
self.threads = [
|
|
44
|
+
threading.Thread(target=self.read, daemon=True)
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
def callback_video_progress(self, x):
|
|
48
|
+
# debug("callback_video_progress", x)
|
|
49
|
+
with self.frame_lock:
|
|
50
|
+
# self.frame_id = cv2.getTrackbarPos(self.ui_video_progress_tag, self.frame_tag)
|
|
51
|
+
self.frame_id = x
|
|
52
|
+
|
|
53
|
+
def ui_controls(self, min_val, max_val):
|
|
54
|
+
cv2.createTrackbar(self.ui_video_progress_tag, self.frame_tag, min_val, max_val, self.callback_video_progress)
|
|
55
|
+
|
|
56
|
+
def process_frame(self, frame):
|
|
57
|
+
return {}
|
|
58
|
+
|
|
59
|
+
def read(self):
|
|
60
|
+
while not self.stop_threads:
|
|
61
|
+
self.fps_read.update()
|
|
62
|
+
with self.progress_lock:
|
|
63
|
+
current_frame_id = self.frame_id
|
|
64
|
+
self.cap.set(cv2.CAP_PROP_POS_FRAMES, int(current_frame_id + 1))
|
|
65
|
+
ret, current_frame = self.cap.read()
|
|
66
|
+
if not ret:
|
|
67
|
+
break
|
|
68
|
+
|
|
69
|
+
current_result = self.process_frame(current_frame)
|
|
70
|
+
|
|
71
|
+
with self.frame_lock:
|
|
72
|
+
self.frame = current_frame.copy()
|
|
73
|
+
self.result = current_result
|
|
74
|
+
|
|
75
|
+
with self.progress_lock:
|
|
76
|
+
self.frame_id += 1
|
|
77
|
+
if self.frame_id >= self.video_frame_count:
|
|
78
|
+
self.frame_id = 0
|
|
79
|
+
cv2.setTrackbarPos(self.ui_video_progress_tag, self.frame_tag, self.frame_id)
|
|
80
|
+
|
|
81
|
+
def draw(self, frame, result):
|
|
82
|
+
cv2.putText(frame, f"R[{result}]", (30, 80), cv2.FONT_HERSHEY_SIMPLEX, 1.3, (0, 255, 255), 2)
|
|
83
|
+
|
|
84
|
+
def run(self, max_display_width=1024):
|
|
85
|
+
cv2.namedWindow(self.frame_tag, cv2.WINDOW_NORMAL)
|
|
86
|
+
|
|
87
|
+
self.cap = cv2.VideoCapture(self.path_video)
|
|
88
|
+
|
|
89
|
+
self.video_fps = self.cap.get(cv2.CAP_PROP_FPS)
|
|
90
|
+
self.video_frame_count = int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT))
|
|
91
|
+
self.video_duration_sec = self.video_frame_count / self.video_fps
|
|
92
|
+
debug("run", self.path_video, self.tag, "fps", self.video_fps, "count", self.video_frame_count, "duration", self.video_duration_sec)
|
|
93
|
+
|
|
94
|
+
self.ui_controls(0, self.video_frame_count)
|
|
95
|
+
|
|
96
|
+
for thread in self.threads:
|
|
97
|
+
thread.start()
|
|
98
|
+
|
|
99
|
+
while self.cap.isOpened():
|
|
100
|
+
self.fps_ui.update()
|
|
101
|
+
current_frame = None
|
|
102
|
+
original_current_frame = None
|
|
103
|
+
current_result = None
|
|
104
|
+
with self.frame_lock:
|
|
105
|
+
if self.frame is not None:
|
|
106
|
+
current_frame = self.frame.copy()
|
|
107
|
+
original_current_frame = self.frame.copy()
|
|
108
|
+
current_result = self.result.copy()
|
|
109
|
+
|
|
110
|
+
if current_frame is not None:
|
|
111
|
+
cv2.putText(current_frame, f"FPS read {round(self.fps_read.value, 1)} ui {round(self.fps_ui.value, 1)} T {round(self.frame_id / self.video_fps, 3)}s", (30, 40), cv2.FONT_HERSHEY_SIMPLEX, 1.3, (0, 255, 0), 4)
|
|
112
|
+
self.draw(current_frame, current_result)
|
|
113
|
+
height, width = current_frame.shape[:2]
|
|
114
|
+
if width > max_display_width:
|
|
115
|
+
display_width = max_display_width
|
|
116
|
+
display_height = int(height * (max_display_width / width))
|
|
117
|
+
cv2.resizeWindow(self.frame_tag, display_width, display_height)
|
|
118
|
+
cv2.imshow(self.frame_tag, current_frame)
|
|
119
|
+
|
|
120
|
+
key = cv2.waitKey(1) & 0xFF
|
|
121
|
+
if key == ord("q"):
|
|
122
|
+
self.stop_threads = True
|
|
123
|
+
for thread in self.threads:
|
|
124
|
+
thread.join()
|
|
125
|
+
break
|
|
126
|
+
elif key == ord("p"):
|
|
127
|
+
if original_current_frame is not None:
|
|
128
|
+
frame_path = os.path.join(self.path_base, f"{self.file_name_base}-{self.frame_id}.png")
|
|
129
|
+
cv2.imwrite(frame_path, original_current_frame)
|
|
130
|
+
debug(f"saved frame {self.frame_id} to {frame_path}")
|
|
131
|
+
|
|
132
|
+
self.cap.release()
|
|
133
|
+
cv2.destroyAllWindows()
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
if __name__ == "__main__":
|
|
137
|
+
video_player = BaseInteractiveVideoPlayer(os.environ["PATH_VIDEO_FILE"], "base video player")
|
|
138
|
+
video_player.run()
|
|
@@ -15,19 +15,30 @@ from sciveo.tools.logger import *
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class FPSCounter:
|
|
18
|
-
def __init__(self, period=
|
|
18
|
+
def __init__(self, period=1, tag="", print_period=1, printer=debug):
|
|
19
19
|
self.period = period
|
|
20
|
+
self.print_period = print_period
|
|
21
|
+
self.printer = printer
|
|
22
|
+
self.print_n = 0
|
|
20
23
|
self.tag = tag
|
|
21
24
|
self.n = 0
|
|
22
25
|
self.t1 = time.time()
|
|
26
|
+
self.value = 0
|
|
27
|
+
|
|
28
|
+
def print(self):
|
|
29
|
+
self.print_n += 1
|
|
30
|
+
if self.print_n > self.print_period:
|
|
31
|
+
self.printer(self.tag, "FPS", self.value)
|
|
32
|
+
self.print_n = 0
|
|
23
33
|
|
|
24
34
|
def update(self):
|
|
25
35
|
self.n += 1
|
|
26
36
|
t2 = time.time()
|
|
27
37
|
if t2 - self.t1 > self.period:
|
|
28
|
-
|
|
38
|
+
self.value = self.n / (t2 - self.t1)
|
|
29
39
|
self.n = 0
|
|
30
40
|
self.t1 = time.time()
|
|
41
|
+
self.print()
|
|
31
42
|
|
|
32
43
|
|
|
33
44
|
class TimerExec:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sciveo
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.54
|
|
4
4
|
Description-Content-Type: text/markdown
|
|
5
5
|
Provides-Extra: mon
|
|
6
6
|
Provides-Extra: net
|
|
@@ -8,7 +8,7 @@ Provides-Extra: server
|
|
|
8
8
|
Provides-Extra: media
|
|
9
9
|
Provides-Extra: media-ml
|
|
10
10
|
Provides-Extra: all
|
|
11
|
-
Provides-Extra:
|
|
11
|
+
Provides-Extra: ml
|
|
12
12
|
|
|
13
13
|
# SCIVEO - ML/AI and Scientific tools
|
|
14
14
|
|
|
@@ -91,6 +91,7 @@ sciveo/media/pipelines/web/__init__.py
|
|
|
91
91
|
sciveo/media/pipelines/web/server.py
|
|
92
92
|
sciveo/media/tools/__init__.py
|
|
93
93
|
sciveo/media/tools/nvr.py
|
|
94
|
+
sciveo/media/tools/video_interactive.py
|
|
94
95
|
sciveo/ml/__init__.py
|
|
95
96
|
sciveo/ml/base.py
|
|
96
97
|
sciveo/ml/dataset/__init__.py
|
|
@@ -5,6 +5,10 @@ requests>=0.0.0
|
|
|
5
5
|
psutil>=0.0.0
|
|
6
6
|
netifaces>=0.0.0
|
|
7
7
|
scapy>=0.0.0
|
|
8
|
+
fastapi>=0.0.0
|
|
9
|
+
uvicorn[standard]>=0.0.0
|
|
10
|
+
flask>=0.0.0
|
|
11
|
+
waitress>=0.0.0
|
|
8
12
|
|
|
9
13
|
[media]
|
|
10
14
|
scikit-learn>=0.0.0
|
|
@@ -25,10 +29,26 @@ ffmpeg-python>=0.0.0
|
|
|
25
29
|
opencv-python-headless>=0.0.0
|
|
26
30
|
opencv-contrib-python-headless>=0.0.0
|
|
27
31
|
|
|
28
|
-
[media-
|
|
32
|
+
[media-ml]
|
|
33
|
+
tensorflow>=0.0.0
|
|
34
|
+
keras>=0.0.0
|
|
35
|
+
torch>=0.0.0
|
|
36
|
+
torchvision>=0.0.0
|
|
37
|
+
diffusers>=0.0.0
|
|
38
|
+
transformers>=0.0.0
|
|
39
|
+
sentence_transformers>=0.0.0
|
|
40
|
+
accelerate>=0.0.0
|
|
41
|
+
annoy>=0.0.0
|
|
42
|
+
ultralytics>=0.0.0
|
|
43
|
+
|
|
44
|
+
[ml]
|
|
29
45
|
psutil>=0.0.0
|
|
30
46
|
netifaces>=0.0.0
|
|
31
47
|
scapy>=0.0.0
|
|
48
|
+
fastapi>=0.0.0
|
|
49
|
+
uvicorn[standard]>=0.0.0
|
|
50
|
+
flask>=0.0.0
|
|
51
|
+
waitress>=0.0.0
|
|
32
52
|
scikit-learn>=0.0.0
|
|
33
53
|
scipy>=0.0.0
|
|
34
54
|
scikit-video>=0.0.0
|
|
@@ -46,22 +66,6 @@ tqdm>=0.0.0
|
|
|
46
66
|
ffmpeg-python>=0.0.0
|
|
47
67
|
opencv-python-headless>=0.0.0
|
|
48
68
|
opencv-contrib-python-headless>=0.0.0
|
|
49
|
-
fastapi>=0.0.0
|
|
50
|
-
uvicorn[standard]>=0.0.0
|
|
51
|
-
flask>=0.0.0
|
|
52
|
-
waitress>=0.0.0
|
|
53
|
-
tensorflow>=0.0.0
|
|
54
|
-
keras>=0.0.0
|
|
55
|
-
torch>=0.0.0
|
|
56
|
-
torchvision>=0.0.0
|
|
57
|
-
diffusers>=0.0.0
|
|
58
|
-
transformers>=0.0.0
|
|
59
|
-
sentence_transformers>=0.0.0
|
|
60
|
-
accelerate>=0.0.0
|
|
61
|
-
annoy>=0.0.0
|
|
62
|
-
ultralytics>=0.0.0
|
|
63
|
-
|
|
64
|
-
[media-ml]
|
|
65
69
|
tensorflow>=0.0.0
|
|
66
70
|
keras>=0.0.0
|
|
67
71
|
torch>=0.0.0
|
|
@@ -39,8 +39,8 @@ extras_require = {
|
|
|
39
39
|
]
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
extras_require['all'] = extras_require['mon'] + extras_require['net']
|
|
43
|
-
extras_require['
|
|
42
|
+
extras_require['all'] = extras_require['mon'] + extras_require['net'] + extras_require['server']
|
|
43
|
+
extras_require['ml'] = extras_require['all'] + extras_require['media'] + extras_require['media-ml']
|
|
44
44
|
|
|
45
45
|
setup(
|
|
46
46
|
name='sciveo',
|
sciveo-0.1.53/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
|
|
File without changes
|
{sciveo-0.1.53 → sciveo-0.1.54}/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.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/sci/time_series/__init__.py
RENAMED
|
File without changes
|
{sciveo-0.1.53 → sciveo-0.1.54}/sciveo/media/pipelines/processors/sci/time_series/predictor.py
RENAMED
|
File without changes
|
{sciveo-0.1.53 → sciveo-0.1.54}/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
|
|
File without changes
|
|
File without changes
|