sciveo 0.1.78__tar.gz → 0.1.80__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.78 → sciveo-0.1.80}/PKG-INFO +1 -1
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/cli.py +2 -2
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/cam.py +14 -8
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/draw.py +8 -4
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/gst_server.py +21 -11
- sciveo-0.1.80/sciveo/media/capture/rpi.py +55 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/configuration.py +6 -4
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/daemon.py +2 -2
- sciveo-0.1.80/sciveo/version.py +2 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo.egg-info/PKG-INFO +1 -1
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo.egg-info/SOURCES.txt +1 -0
- sciveo-0.1.78/sciveo/version.py +0 -2
- {sciveo-0.1.78 → sciveo-0.1.80}/README.md +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/api/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/api/base.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/api/predictors.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/api/server.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/api/upload.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/common/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/common/configuration.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/common/model.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/common/optimizers.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/common/sampling.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/content/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/content/dataset.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/content/experiment.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/content/project.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/content/runner.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/db/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/db/read_table.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/games/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/games/asteroids/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/games/asteroids/asteroid.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/games/asteroids/base_move.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/games/asteroids/circle.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/games/asteroids/game.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/games/asteroids/geometrics.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/games/asteroids/gravity_ball.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/games/asteroids/laser.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/games/asteroids/rocket.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/games/asteroids/space_asteroids.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/games/asteroids/volume_bar.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/motion_detection.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/nvr.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/readers.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/capture/rtsp.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/ml/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/ml/base.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/ml/encoders/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/ml/encoders/base.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/ml/encoders/normalizer.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/ml/nlp/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/ml/nlp/search.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/ml/time_series/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/ml/time_series/dataset.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/ml/time_series/predictor.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/ml/time_series/trainer.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/ml/time_series/window_generator.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/base.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/job_daemon.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/layouts/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/layouts/base.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/pipeline.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/postprocessors/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/postprocessors/base.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/postprocessors/default.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/audio/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/audio/audio.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/audio/audio_extractor_process.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/aws.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/base.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/file/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/file/archive.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/image/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/image/album.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/image/album_in_image.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/image/depth_esimation.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/image/embeddings.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/image/filters.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/image/generators.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/image/histogram.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/image/mask.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/image/object_detection.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/image/resize.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/image/segmentation.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/image/watermark.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/media_info.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/nlp/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/nlp/address.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/qr.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/sci/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/sci/base.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/sci/dataset.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/sci/time_series/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/sci/time_series/predictor.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/sci/time_series/trainer.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/tpu_base.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/video/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/video/generators.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/video/motion_detection.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/video/resize.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/video/video_album.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/video/video_frames.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/video/video_resample.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/queues.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/server.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/web/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/web/server.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/tools/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/tools/video_interactive.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/base.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/dataset/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/dataset/object_detection.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/evaluation/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/evaluation/markdown.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/evaluation/object_detection.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/images/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/images/base.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/images/description.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/images/embeddings.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/images/object_detection.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/images/tools.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/images/transformers.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/nlp/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/nlp/embeddings.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/nlp/tokenizers/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/nlp/tokenizers/bpe.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/video/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/ml/video/description.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/monitoring/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/monitoring/monitor.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/monitoring/power/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/monitoring/power/ems300.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/monitoring/power/sim.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/monitoring/power/tools.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/monitoring/start.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/monitoring/watchdog/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/monitoring/watchdog/base.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/monitoring/watchdog/process.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/network/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/network/camera.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/network/sniffer.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/network/tools.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/array.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/aws/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/aws/priority_queue.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/aws/s3.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/common.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/complexity.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/compress.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/crypto.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/draw/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/draw/contours.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/formating.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/hardware.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/http.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/logger.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/os.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/queue.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/random.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/remote.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/simple_counter.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/synchronized.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/timers.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/tools/totp.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/web/__init__.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo/web/common.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo.egg-info/dependency_links.txt +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo.egg-info/entry_points.txt +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo.egg-info/requires.txt +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/sciveo.egg-info/top_level.txt +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/setup.cfg +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/setup.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/test/test_complexity.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/test/test_compress.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/test/test_configuration.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/test/test_crypto.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/test/test_eval_markdown.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/test/test_ml_datasets.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/test/test_monitoring.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/test/test_runner.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/test/test_sampling.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/test/test_tokenizers.py +0 -0
- {sciveo-0.1.78 → sciveo-0.1.80}/test/test_totp.py +0 -0
|
@@ -116,13 +116,13 @@ def main():
|
|
|
116
116
|
from sciveo.media.capture.gst_server import CamFactory, ColorBarFactory
|
|
117
117
|
data = json.loads(args.data_json)
|
|
118
118
|
if args.src_id is not None:
|
|
119
|
-
server = CamFactory(args.src_id, args.width, args.height, args.fps,
|
|
119
|
+
server = CamFactory(args.src_id, args.width, args.height, args.fps, configuration=data)
|
|
120
120
|
elif args.src is not None:
|
|
121
121
|
if "color" in args.src:
|
|
122
122
|
server = ColorBarFactory(args.width, args.height, args.fps)
|
|
123
123
|
else:
|
|
124
124
|
# warning("RTSP src", args.src, "not recognised")
|
|
125
|
-
server = CamFactory(args.src, args.width, args.height, args.fps,
|
|
125
|
+
server = CamFactory(args.src, args.width, args.height, args.fps, configuration=data)
|
|
126
126
|
server.serve(host=args.host, port=args.port, stream=args.stream)
|
|
127
127
|
elif args.command == 'media-server':
|
|
128
128
|
from sciveo.media.pipelines.server import __START_SCIVEO_MEDIA_SERVER__
|
|
@@ -46,23 +46,27 @@ class CaptureBase(DaemonBase):
|
|
|
46
46
|
pass
|
|
47
47
|
|
|
48
48
|
def loop(self):
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
self.fps.update()
|
|
49
|
+
self.read_frame()
|
|
50
|
+
self.fps.update()
|
|
52
51
|
|
|
53
52
|
|
|
54
53
|
class CameraDaemon(CaptureBase):
|
|
55
54
|
def __init__(self, cam_id=0, period=0):
|
|
56
55
|
super().__init__(src=cam_id, tag="cam", period=period)
|
|
57
|
-
self.
|
|
58
|
-
|
|
56
|
+
self.init_cam()
|
|
57
|
+
|
|
58
|
+
def init_cam(self):
|
|
59
|
+
self.cap = cv2.VideoCapture(self.src)
|
|
60
|
+
debug(self.src, "warming...")
|
|
59
61
|
time.sleep(1)
|
|
60
62
|
|
|
61
63
|
def close(self):
|
|
62
64
|
self.cap.release()
|
|
63
65
|
|
|
64
66
|
def read_frame(self):
|
|
65
|
-
ret,
|
|
67
|
+
ret, frame = self.cap.read()
|
|
68
|
+
with self.lock_frame:
|
|
69
|
+
self.frame = frame
|
|
66
70
|
|
|
67
71
|
|
|
68
72
|
class PredictorCameraDaemon(DaemonBase):
|
|
@@ -142,8 +146,10 @@ class ScreenDaemon(CaptureBase):
|
|
|
142
146
|
|
|
143
147
|
def read_frame(self):
|
|
144
148
|
sct_img = self.sct.grab(self.monitor)
|
|
145
|
-
|
|
146
|
-
|
|
149
|
+
frame = np.array(sct_img)
|
|
150
|
+
frame = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR)
|
|
151
|
+
with self.lock_frame:
|
|
152
|
+
self.frame = frame
|
|
147
153
|
|
|
148
154
|
|
|
149
155
|
if __name__ == '__main__':
|
|
@@ -16,7 +16,7 @@ from sciveo.tools.logger import *
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class DrawNone:
|
|
19
|
-
def __call__(self, frame,
|
|
19
|
+
def __call__(self, frame, configuration):
|
|
20
20
|
return frame
|
|
21
21
|
|
|
22
22
|
class DrawDateTime:
|
|
@@ -34,7 +34,7 @@ class DrawDateTime:
|
|
|
34
34
|
self.font = font
|
|
35
35
|
self.font_scale_factor = font_scale_factor
|
|
36
36
|
|
|
37
|
-
def __call__(self, frame,
|
|
37
|
+
def __call__(self, frame, configuration):
|
|
38
38
|
"""
|
|
39
39
|
Draws date/time (or custom text) on the frame.
|
|
40
40
|
|
|
@@ -45,9 +45,13 @@ class DrawDateTime:
|
|
|
45
45
|
if frame is None or len(frame.shape) < 2:
|
|
46
46
|
return frame # invalid frame
|
|
47
47
|
|
|
48
|
+
tag = configuration.get("tag", "")
|
|
49
|
+
|
|
48
50
|
h, w = frame.shape[:2]
|
|
49
51
|
|
|
50
|
-
font_scale = max(0.2, h * self.font_scale_factor)
|
|
52
|
+
font_scale = configuration.get("font_scale", max(0.2, h * self.font_scale_factor))
|
|
53
|
+
color = configuration.get("color", self.color)
|
|
54
|
+
thickness = configuration.get("thickness", self.thickness)
|
|
51
55
|
|
|
52
56
|
date_text = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
53
57
|
draw_text = f"{tag} {date_text}"
|
|
@@ -56,7 +60,7 @@ class DrawDateTime:
|
|
|
56
60
|
x = min(max(self.position[0], 0), w - 1)
|
|
57
61
|
y = min(max(self.position[1] + int(font_scale * 20), int(font_scale * 20)), h - 1)
|
|
58
62
|
|
|
59
|
-
cv2.putText(frame, draw_text, (x, y), self.font, font_scale,
|
|
63
|
+
cv2.putText(frame, draw_text, (x, y), self.font, font_scale, color, thickness, cv2.LINE_AA)
|
|
60
64
|
return frame
|
|
61
65
|
|
|
62
66
|
|
|
@@ -23,16 +23,17 @@ from sciveo.media.capture.cam import CameraDaemon
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
class RTSPFactoryBase(GstRtspServer.RTSPMediaFactory):
|
|
26
|
-
def __init__(self, width, height, fps):
|
|
26
|
+
def __init__(self, width, height, fps, appsrc_name="rtspvideo"):
|
|
27
27
|
super().__init__()
|
|
28
28
|
self.width = width
|
|
29
29
|
self.height = height
|
|
30
30
|
self.fps = fps
|
|
31
|
+
self.appsrc_name = appsrc_name
|
|
31
32
|
self.set_shared(True)
|
|
32
33
|
|
|
33
34
|
def do_create_element(self, url):
|
|
34
35
|
pipeline_str = (
|
|
35
|
-
f"appsrc name=
|
|
36
|
+
f"appsrc name={self.appsrc_name} is-live=true block=true format=time "
|
|
36
37
|
f"caps=video/x-raw,format=BGR,width={self.width},height={self.height},framerate={self.fps}/1 "
|
|
37
38
|
"! videoconvert "
|
|
38
39
|
"! x264enc tune=zerolatency speed-preset=ultrafast "
|
|
@@ -41,7 +42,7 @@ class RTSPFactoryBase(GstRtspServer.RTSPMediaFactory):
|
|
|
41
42
|
return Gst.parse_launch(pipeline_str)
|
|
42
43
|
|
|
43
44
|
def do_configure(self, rtsp_media):
|
|
44
|
-
self.appsrc = rtsp_media.get_element().get_child_by_name(
|
|
45
|
+
self.appsrc = rtsp_media.get_element().get_child_by_name(self.appsrc_name)
|
|
45
46
|
self.appsrc.connect("need-data", self.on_need_data)
|
|
46
47
|
self.timestamp = 0
|
|
47
48
|
|
|
@@ -108,8 +109,8 @@ class ColorBarsGenerator:
|
|
|
108
109
|
|
|
109
110
|
|
|
110
111
|
class ColorBarFactory(RTSPFactoryBase):
|
|
111
|
-
def __init__(self, width, height, fps):
|
|
112
|
-
super().__init__(width, height, fps)
|
|
112
|
+
def __init__(self, width, height, fps, appsrc_name="colorbar"):
|
|
113
|
+
super().__init__(width, height, fps, appsrc_name=appsrc_name)
|
|
113
114
|
self.gen = ColorBarsGenerator(width=width, height=height)
|
|
114
115
|
|
|
115
116
|
def next_frame(self):
|
|
@@ -117,22 +118,31 @@ class ColorBarFactory(RTSPFactoryBase):
|
|
|
117
118
|
|
|
118
119
|
|
|
119
120
|
class CamFactory(ColorBarFactory):
|
|
120
|
-
def __init__(self, cam_id, width, height, fps,
|
|
121
|
-
super().__init__(width, height, fps)
|
|
122
|
-
self.
|
|
123
|
-
self.
|
|
124
|
-
self.list_draw = list_draw
|
|
121
|
+
def __init__(self, cam_id, width, height, fps, configuration={}):
|
|
122
|
+
super().__init__(width, height, fps, appsrc_name=f"cam{cam_id}")
|
|
123
|
+
self.cam_id = cam_id
|
|
124
|
+
self.configuration = configuration
|
|
125
125
|
self.list_draw_processors = {
|
|
126
126
|
"none": DrawNone(),
|
|
127
127
|
"dt": DrawDateTime(),
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
+
self.init_cam()
|
|
131
|
+
self.cam.start()
|
|
132
|
+
|
|
133
|
+
def init_cam(self):
|
|
134
|
+
if "RPI" in self.configuration:
|
|
135
|
+
from sciveo.media.capture.rpi import RPICamera
|
|
136
|
+
self.cam = RPICamera(cam_id=self.cam_id, width=self.width, height=self.height)
|
|
137
|
+
else:
|
|
138
|
+
self.cam = CameraDaemon(cam_id=self.cam_id)
|
|
139
|
+
|
|
130
140
|
def next_frame(self):
|
|
131
141
|
frame = self.cam.read()
|
|
132
142
|
if frame is None:
|
|
133
143
|
frame = super().next_frame()
|
|
134
144
|
|
|
135
|
-
for k, v in self.
|
|
145
|
+
for k, v in self.configuration.get("draw", {}).items():
|
|
136
146
|
self.list_draw_processors.get(k, DrawNone())(frame, v)
|
|
137
147
|
|
|
138
148
|
return frame
|
|
@@ -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
|
+
# 2024
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
import time
|
|
13
|
+
import numpy as np
|
|
14
|
+
import cv2
|
|
15
|
+
from picamera2 import Picamera2
|
|
16
|
+
|
|
17
|
+
from sciveo.tools.logger import *
|
|
18
|
+
from sciveo.media.capture.cam import CameraDaemon
|
|
19
|
+
from sciveo.media.capture.gst_server import CamFactory
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class RPICamera(CameraDaemon):
|
|
23
|
+
def __init__(self, cam_id=0, width=640, height=480, period=0):
|
|
24
|
+
super().__init__(cam_id=cam_id, period=period)
|
|
25
|
+
self.width = width
|
|
26
|
+
self.height = height
|
|
27
|
+
|
|
28
|
+
def init_cam(self):
|
|
29
|
+
self.picam2 = Picamera2()
|
|
30
|
+
config = self.picam2.create_video_configuration(
|
|
31
|
+
main={
|
|
32
|
+
"size": (self.width, self.height),
|
|
33
|
+
"format": "RGB888"
|
|
34
|
+
},
|
|
35
|
+
buffer_count=4
|
|
36
|
+
)
|
|
37
|
+
self.picam2.configure(config)
|
|
38
|
+
self.picam2.start()
|
|
39
|
+
|
|
40
|
+
debug(self.src, "warming...")
|
|
41
|
+
time.sleep(1)
|
|
42
|
+
|
|
43
|
+
def close(self):
|
|
44
|
+
self.picam2.stop()
|
|
45
|
+
|
|
46
|
+
def read_frame(self):
|
|
47
|
+
frame = self.picam2.capture_array()
|
|
48
|
+
cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
|
|
49
|
+
with self.lock_frame:
|
|
50
|
+
self.frame = frame
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class RPICameraFactory(CamFactory):
|
|
54
|
+
def init_cam(self):
|
|
55
|
+
self.cam = RPICamera(cam_id=self.cam_id, width=self.width, height=self.height)
|
|
@@ -13,6 +13,8 @@ import os
|
|
|
13
13
|
import json
|
|
14
14
|
import threading
|
|
15
15
|
|
|
16
|
+
from sciveo.tools.logger import *
|
|
17
|
+
|
|
16
18
|
|
|
17
19
|
class GlobalConfiguration:
|
|
18
20
|
config = None
|
|
@@ -20,8 +22,8 @@ class GlobalConfiguration:
|
|
|
20
22
|
|
|
21
23
|
def __init__(self, name) -> None:
|
|
22
24
|
home = os.path.expanduser('~')
|
|
23
|
-
self.name = name
|
|
24
|
-
self.base_path = os.path.join(home, f'.{name}')
|
|
25
|
+
self.name = name.lower()
|
|
26
|
+
self.base_path = os.path.join(home, f'.{self.name}')
|
|
25
27
|
self.data = {}
|
|
26
28
|
|
|
27
29
|
self.default = {
|
|
@@ -33,7 +35,7 @@ class GlobalConfiguration:
|
|
|
33
35
|
self.read_local_files()
|
|
34
36
|
self.read_environment()
|
|
35
37
|
except Exception as e:
|
|
36
|
-
|
|
38
|
+
exception(e)
|
|
37
39
|
|
|
38
40
|
@staticmethod
|
|
39
41
|
def get(name='sciveo', reload=False):
|
|
@@ -52,7 +54,7 @@ class GlobalConfiguration:
|
|
|
52
54
|
return self.data.get(key, self.default.get(key, None))
|
|
53
55
|
|
|
54
56
|
def save_kv(self, key, value):
|
|
55
|
-
key = key.strip().lower().replace("
|
|
57
|
+
key = key.strip().lower().replace(f"{self.name}_", "")
|
|
56
58
|
value = value.strip()
|
|
57
59
|
self.data[key] = value
|
|
58
60
|
|
|
@@ -73,14 +73,14 @@ class DaemonBase:
|
|
|
73
73
|
try:
|
|
74
74
|
self.loop()
|
|
75
75
|
except Exception as e:
|
|
76
|
-
|
|
76
|
+
exception(e)
|
|
77
77
|
time.sleep(self.period)
|
|
78
78
|
|
|
79
79
|
def safe_run(self):
|
|
80
80
|
try:
|
|
81
81
|
self.run()
|
|
82
82
|
except Exception as e:
|
|
83
|
-
|
|
83
|
+
exception(e)
|
|
84
84
|
|
|
85
85
|
|
|
86
86
|
class TasksDaemon(DaemonBase):
|
|
@@ -34,6 +34,7 @@ sciveo/media/capture/gst_server.py
|
|
|
34
34
|
sciveo/media/capture/motion_detection.py
|
|
35
35
|
sciveo/media/capture/nvr.py
|
|
36
36
|
sciveo/media/capture/readers.py
|
|
37
|
+
sciveo/media/capture/rpi.py
|
|
37
38
|
sciveo/media/capture/rtsp.py
|
|
38
39
|
sciveo/media/capture/games/__init__.py
|
|
39
40
|
sciveo/media/capture/games/asteroids/__init__.py
|
sciveo-0.1.78/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.78 → sciveo-0.1.80}/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.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/sci/time_series/__init__.py
RENAMED
|
File without changes
|
{sciveo-0.1.78 → sciveo-0.1.80}/sciveo/media/pipelines/processors/sci/time_series/predictor.py
RENAMED
|
File without changes
|
{sciveo-0.1.78 → sciveo-0.1.80}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|