sciveo 0.1.79__tar.gz → 0.1.81__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. {sciveo-0.1.79 → sciveo-0.1.81}/PKG-INFO +1 -1
  2. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/cli.py +2 -2
  3. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/cam.py +15 -8
  4. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/draw.py +8 -4
  5. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/gst_server.py +19 -5
  6. sciveo-0.1.81/sciveo/media/capture/rpi.py +57 -0
  7. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/configuration.py +6 -4
  8. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/daemon.py +2 -2
  9. sciveo-0.1.81/sciveo/version.py +2 -0
  10. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo.egg-info/PKG-INFO +1 -1
  11. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo.egg-info/SOURCES.txt +1 -0
  12. sciveo-0.1.79/sciveo/version.py +0 -2
  13. {sciveo-0.1.79 → sciveo-0.1.81}/README.md +0 -0
  14. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/__init__.py +0 -0
  15. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/api/__init__.py +0 -0
  16. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/api/base.py +0 -0
  17. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/api/predictors.py +0 -0
  18. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/api/server.py +0 -0
  19. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/api/upload.py +0 -0
  20. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/common/__init__.py +0 -0
  21. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/common/configuration.py +0 -0
  22. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/common/model.py +0 -0
  23. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/common/optimizers.py +0 -0
  24. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/common/sampling.py +0 -0
  25. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/content/__init__.py +0 -0
  26. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/content/dataset.py +0 -0
  27. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/content/experiment.py +0 -0
  28. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/content/project.py +0 -0
  29. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/content/runner.py +0 -0
  30. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/db/__init__.py +0 -0
  31. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/db/read_table.py +0 -0
  32. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/__init__.py +0 -0
  33. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/__init__.py +0 -0
  34. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/games/__init__.py +0 -0
  35. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/games/asteroids/__init__.py +0 -0
  36. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/games/asteroids/asteroid.py +0 -0
  37. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/games/asteroids/base_move.py +0 -0
  38. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/games/asteroids/circle.py +0 -0
  39. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/games/asteroids/game.py +0 -0
  40. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/games/asteroids/geometrics.py +0 -0
  41. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/games/asteroids/gravity_ball.py +0 -0
  42. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/games/asteroids/laser.py +0 -0
  43. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/games/asteroids/rocket.py +0 -0
  44. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/games/asteroids/space_asteroids.py +0 -0
  45. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/games/asteroids/volume_bar.py +0 -0
  46. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/motion_detection.py +0 -0
  47. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/nvr.py +0 -0
  48. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/readers.py +0 -0
  49. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/capture/rtsp.py +0 -0
  50. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/ml/__init__.py +0 -0
  51. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/ml/base.py +0 -0
  52. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/ml/encoders/__init__.py +0 -0
  53. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/ml/encoders/base.py +0 -0
  54. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/ml/encoders/normalizer.py +0 -0
  55. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/ml/nlp/__init__.py +0 -0
  56. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/ml/nlp/search.py +0 -0
  57. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/ml/time_series/__init__.py +0 -0
  58. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/ml/time_series/dataset.py +0 -0
  59. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/ml/time_series/predictor.py +0 -0
  60. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/ml/time_series/trainer.py +0 -0
  61. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/ml/time_series/window_generator.py +0 -0
  62. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/__init__.py +0 -0
  63. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/base.py +0 -0
  64. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/job_daemon.py +0 -0
  65. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/layouts/__init__.py +0 -0
  66. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/layouts/base.py +0 -0
  67. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/pipeline.py +0 -0
  68. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/postprocessors/__init__.py +0 -0
  69. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/postprocessors/base.py +0 -0
  70. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/postprocessors/default.py +0 -0
  71. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/__init__.py +0 -0
  72. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/audio/__init__.py +0 -0
  73. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/audio/audio.py +0 -0
  74. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/audio/audio_extractor_process.py +0 -0
  75. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/aws.py +0 -0
  76. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/base.py +0 -0
  77. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/file/__init__.py +0 -0
  78. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/file/archive.py +0 -0
  79. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/image/__init__.py +0 -0
  80. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/image/album.py +0 -0
  81. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/image/album_in_image.py +0 -0
  82. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/image/depth_esimation.py +0 -0
  83. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/image/embeddings.py +0 -0
  84. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/image/filters.py +0 -0
  85. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/image/generators.py +0 -0
  86. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/image/histogram.py +0 -0
  87. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/image/mask.py +0 -0
  88. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/image/object_detection.py +0 -0
  89. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/image/resize.py +0 -0
  90. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/image/segmentation.py +0 -0
  91. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/image/watermark.py +0 -0
  92. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/media_info.py +0 -0
  93. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/nlp/__init__.py +0 -0
  94. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/nlp/address.py +0 -0
  95. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/qr.py +0 -0
  96. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/sci/__init__.py +0 -0
  97. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/sci/base.py +0 -0
  98. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/sci/dataset.py +0 -0
  99. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/sci/time_series/__init__.py +0 -0
  100. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/sci/time_series/predictor.py +0 -0
  101. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/sci/time_series/trainer.py +0 -0
  102. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/tpu_base.py +0 -0
  103. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/video/__init__.py +0 -0
  104. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/video/generators.py +0 -0
  105. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/video/motion_detection.py +0 -0
  106. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/video/resize.py +0 -0
  107. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/video/video_album.py +0 -0
  108. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/video/video_frames.py +0 -0
  109. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/processors/video/video_resample.py +0 -0
  110. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/queues.py +0 -0
  111. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/server.py +0 -0
  112. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/web/__init__.py +0 -0
  113. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/pipelines/web/server.py +0 -0
  114. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/tools/__init__.py +0 -0
  115. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/media/tools/video_interactive.py +0 -0
  116. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/__init__.py +0 -0
  117. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/base.py +0 -0
  118. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/dataset/__init__.py +0 -0
  119. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/dataset/object_detection.py +0 -0
  120. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/evaluation/__init__.py +0 -0
  121. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/evaluation/markdown.py +0 -0
  122. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/evaluation/object_detection.py +0 -0
  123. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/images/__init__.py +0 -0
  124. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/images/base.py +0 -0
  125. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/images/description.py +0 -0
  126. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/images/embeddings.py +0 -0
  127. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/images/object_detection.py +0 -0
  128. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/images/tools.py +0 -0
  129. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/images/transformers.py +0 -0
  130. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/nlp/__init__.py +0 -0
  131. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/nlp/embeddings.py +0 -0
  132. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/nlp/tokenizers/__init__.py +0 -0
  133. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/nlp/tokenizers/bpe.py +0 -0
  134. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/video/__init__.py +0 -0
  135. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/ml/video/description.py +0 -0
  136. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/monitoring/__init__.py +0 -0
  137. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/monitoring/monitor.py +0 -0
  138. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/monitoring/power/__init__.py +0 -0
  139. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/monitoring/power/ems300.py +0 -0
  140. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/monitoring/power/sim.py +0 -0
  141. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/monitoring/power/tools.py +0 -0
  142. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/monitoring/start.py +0 -0
  143. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/monitoring/watchdog/__init__.py +0 -0
  144. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/monitoring/watchdog/base.py +0 -0
  145. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/monitoring/watchdog/process.py +0 -0
  146. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/network/__init__.py +0 -0
  147. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/network/camera.py +0 -0
  148. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/network/sniffer.py +0 -0
  149. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/network/tools.py +0 -0
  150. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/__init__.py +0 -0
  151. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/array.py +0 -0
  152. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/aws/__init__.py +0 -0
  153. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/aws/priority_queue.py +0 -0
  154. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/aws/s3.py +0 -0
  155. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/common.py +0 -0
  156. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/complexity.py +0 -0
  157. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/compress.py +0 -0
  158. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/crypto.py +0 -0
  159. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/draw/__init__.py +0 -0
  160. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/draw/contours.py +0 -0
  161. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/formating.py +0 -0
  162. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/hardware.py +0 -0
  163. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/http.py +0 -0
  164. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/logger.py +0 -0
  165. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/os.py +0 -0
  166. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/queue.py +0 -0
  167. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/random.py +0 -0
  168. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/remote.py +0 -0
  169. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/simple_counter.py +0 -0
  170. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/synchronized.py +0 -0
  171. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/timers.py +0 -0
  172. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/tools/totp.py +0 -0
  173. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/web/__init__.py +0 -0
  174. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo/web/common.py +0 -0
  175. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo.egg-info/dependency_links.txt +0 -0
  176. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo.egg-info/entry_points.txt +0 -0
  177. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo.egg-info/requires.txt +0 -0
  178. {sciveo-0.1.79 → sciveo-0.1.81}/sciveo.egg-info/top_level.txt +0 -0
  179. {sciveo-0.1.79 → sciveo-0.1.81}/setup.cfg +0 -0
  180. {sciveo-0.1.79 → sciveo-0.1.81}/setup.py +0 -0
  181. {sciveo-0.1.79 → sciveo-0.1.81}/test/test_complexity.py +0 -0
  182. {sciveo-0.1.79 → sciveo-0.1.81}/test/test_compress.py +0 -0
  183. {sciveo-0.1.79 → sciveo-0.1.81}/test/test_configuration.py +0 -0
  184. {sciveo-0.1.79 → sciveo-0.1.81}/test/test_crypto.py +0 -0
  185. {sciveo-0.1.79 → sciveo-0.1.81}/test/test_eval_markdown.py +0 -0
  186. {sciveo-0.1.79 → sciveo-0.1.81}/test/test_ml_datasets.py +0 -0
  187. {sciveo-0.1.79 → sciveo-0.1.81}/test/test_monitoring.py +0 -0
  188. {sciveo-0.1.79 → sciveo-0.1.81}/test/test_runner.py +0 -0
  189. {sciveo-0.1.79 → sciveo-0.1.81}/test/test_sampling.py +0 -0
  190. {sciveo-0.1.79 → sciveo-0.1.81}/test/test_tokenizers.py +0 -0
  191. {sciveo-0.1.79 → sciveo-0.1.81}/test/test_totp.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sciveo
3
- Version: 0.1.79
3
+ Version: 0.1.81
4
4
  Description-Content-Type: text/markdown
5
5
  Provides-Extra: mon
6
6
  Provides-Extra: net
@@ -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, list_draw=data)
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, list_draw=data)
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,28 @@ class CaptureBase(DaemonBase):
46
46
  pass
47
47
 
48
48
  def loop(self):
49
- with self.lock_frame:
50
- self.read_frame()
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.cap = cv2.VideoCapture(cam_id)
58
- debug(cam_id, "warming...")
56
+ self.init_cam()
57
+
58
+ def init_cam(self):
59
+ debug(self.src, "starting...")
60
+ self.cap = cv2.VideoCapture(self.src)
59
61
  time.sleep(1)
62
+ debug(self.src, "started")
60
63
 
61
64
  def close(self):
62
65
  self.cap.release()
63
66
 
64
67
  def read_frame(self):
65
- ret, self.frame = self.cap.read()
68
+ ret, frame = self.cap.read()
69
+ with self.lock_frame:
70
+ self.frame = frame
66
71
 
67
72
 
68
73
  class PredictorCameraDaemon(DaemonBase):
@@ -142,8 +147,10 @@ class ScreenDaemon(CaptureBase):
142
147
 
143
148
  def read_frame(self):
144
149
  sct_img = self.sct.grab(self.monitor)
145
- self.frame = np.array(sct_img)
146
- self.frame = cv2.cvtColor(self.frame, cv2.COLOR_BGRA2BGR)
150
+ frame = np.array(sct_img)
151
+ frame = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR)
152
+ with self.lock_frame:
153
+ self.frame = frame
147
154
 
148
155
 
149
156
  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, tag):
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, tag):
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, self.color, self.thickness, cv2.LINE_AA)
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
 
@@ -18,6 +18,7 @@ from gi.repository import Gst, GObject, GstRtspServer, GLib
18
18
  Gst.init(None)
19
19
 
20
20
  from sciveo.tools.logger import *
21
+ from sciveo.tools.timers import FPSCounter
21
22
  from sciveo.media.capture.draw import *
22
23
  from sciveo.media.capture.cam import CameraDaemon
23
24
 
@@ -30,6 +31,7 @@ class RTSPFactoryBase(GstRtspServer.RTSPMediaFactory):
30
31
  self.fps = fps
31
32
  self.appsrc_name = appsrc_name
32
33
  self.set_shared(True)
34
+ self.fps_next_frame = FPSCounter(period=10, tag=f"{appsrc_name} ({self.width}x{self.height}@{self.fps})")
33
35
 
34
36
  def do_create_element(self, url):
35
37
  pipeline_str = (
@@ -114,28 +116,40 @@ class ColorBarFactory(RTSPFactoryBase):
114
116
  self.gen = ColorBarsGenerator(width=width, height=height)
115
117
 
116
118
  def next_frame(self):
119
+ self.fps_next_frame.update()
117
120
  return self.gen.next_frame()
118
121
 
119
122
 
120
123
  class CamFactory(ColorBarFactory):
121
- def __init__(self, cam_id, width, height, fps, list_draw={}):
124
+ def __init__(self, cam_id, width, height, fps, configuration={}):
122
125
  super().__init__(width, height, fps, appsrc_name=f"cam{cam_id}")
123
- self.cam = CameraDaemon(cam_id=cam_id)
124
- self.cam.start()
125
- self.list_draw = list_draw
126
+ self.cam_id = cam_id
127
+ self.configuration = configuration
126
128
  self.list_draw_processors = {
127
129
  "none": DrawNone(),
128
130
  "dt": DrawDateTime(),
129
131
  }
130
132
 
133
+ self.init_cam()
134
+ self.cam.start()
135
+
136
+ def init_cam(self):
137
+ if "RPI" in self.configuration:
138
+ from sciveo.media.capture.rpi import RPICamera
139
+ self.cam = RPICamera(cam_id=self.cam_id, width=self.width, height=self.height)
140
+ else:
141
+ self.cam = CameraDaemon(cam_id=self.cam_id)
142
+
131
143
  def next_frame(self):
132
144
  frame = self.cam.read()
133
145
  if frame is None:
134
146
  frame = super().next_frame()
135
147
 
136
- for k, v in self.list_draw.items():
148
+ for k, v in self.configuration.get("draw", {}).items():
137
149
  self.list_draw_processors.get(k, DrawNone())(frame, v)
138
150
 
151
+ self.fps_next_frame.update()
152
+
139
153
  return frame
140
154
 
141
155
 
@@ -0,0 +1,57 @@
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
+ self.width = width
25
+ self.height = height
26
+ super().__init__(cam_id=cam_id, period=period)
27
+
28
+ def init_cam(self):
29
+ debug(self.src, "starting...")
30
+
31
+ self.picam2 = Picamera2()
32
+ config = self.picam2.create_video_configuration(
33
+ main={
34
+ "size": (self.width, self.height),
35
+ "format": "RGB888"
36
+ },
37
+ buffer_count=4
38
+ )
39
+ self.picam2.configure(config)
40
+ self.picam2.start()
41
+
42
+ time.sleep(1)
43
+ debug(self.src, "started")
44
+
45
+ def close(self):
46
+ self.picam2.stop()
47
+
48
+ def read_frame(self):
49
+ frame = self.picam2.capture_array()
50
+ cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
51
+ with self.lock_frame:
52
+ self.frame = frame
53
+
54
+
55
+ class RPICameraFactory(CamFactory):
56
+ def init_cam(self):
57
+ 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
- error("Exception", e)
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("sciveo_", "")
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
- error(e)
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
- error(e)
83
+ exception(e)
84
84
 
85
85
 
86
86
  class TasksDaemon(DaemonBase):
@@ -0,0 +1,2 @@
1
+
2
+ __version__ = '0.1.81'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sciveo
3
- Version: 0.1.79
3
+ Version: 0.1.81
4
4
  Description-Content-Type: text/markdown
5
5
  Provides-Extra: mon
6
6
  Provides-Extra: net
@@ -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
@@ -1,2 +0,0 @@
1
-
2
- __version__ = '0.1.79'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes