viso-sdk-python 1.1.15__tar.gz → 1.1.17__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 (151) hide show
  1. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/CHANGELOG.md +172 -3
  2. viso_sdk_python-1.1.17/PKG-INFO +144 -0
  3. viso_sdk_python-1.1.17/README.md +94 -0
  4. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/requirements-test.txt +1 -0
  5. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/requirements.txt +2 -0
  6. viso_sdk_python-1.1.17/setup.cfg +16 -0
  7. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/setup.py +12 -5
  8. viso_sdk_python-1.1.17/tests/conftest.py +43 -0
  9. viso_sdk_python-1.1.17/tests/integration/test_status.py +77 -0
  10. {viso_sdk_python-1.1.15/tests → viso_sdk_python-1.1.17/tests/unit}/test_flow.py +3 -3
  11. viso_sdk_python-1.1.17/tests/unit/test_logger.py +79 -0
  12. viso_sdk_python-1.1.17/tests/unit/test_model_fetch.py +146 -0
  13. viso_sdk_python-1.1.17/tests/unit/test_redis_utils.py +127 -0
  14. viso_sdk_python-1.1.17/tests/unit/test_redis_wrapper.py +96 -0
  15. viso_sdk_python-1.1.17/tests/unit/test_stream_cleanup.py +183 -0
  16. viso_sdk_python-1.1.17/tests/unit/test_trace_malloc.py +157 -0
  17. viso_sdk_python-1.1.17/tests/unit/test_viso_data.py +106 -0
  18. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/__init__.c +55 -53
  19. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/__init__.py +2 -0
  20. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/_version.c +9 -9
  21. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/_version.py +1 -1
  22. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/constants/__init__.c +355 -41
  23. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/constants/__init__.py +4 -0
  24. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/constants/variables.c +135 -98
  25. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/constants/variables.py +1 -1
  26. viso_sdk_python-1.1.17/viso_sdk/debug/__init__.c +4890 -0
  27. viso_sdk_python-1.1.17/viso_sdk/debug/__init__.py +2 -0
  28. viso_sdk_python-1.1.17/viso_sdk/debug/trace_malloc.c +14951 -0
  29. viso_sdk_python-1.1.17/viso_sdk/debug/trace_malloc.py +155 -0
  30. viso_sdk_python-1.1.17/viso_sdk/detection/__init__.c +4956 -0
  31. viso_sdk_python-1.1.17/viso_sdk/detection/__init__.py +10 -0
  32. viso_sdk_python-1.1.17/viso_sdk/detection/model_utils.c +10782 -0
  33. viso_sdk_python-1.1.17/viso_sdk/detection/model_utils.py +179 -0
  34. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/detection/object.c +2274 -1241
  35. viso_sdk_python-1.1.17/viso_sdk/detection/object.py +139 -0
  36. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/logging/__init__.c +64 -30
  37. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/logging/__init__.py +1 -0
  38. viso_sdk_python-1.1.17/viso_sdk/logging/log_id.c +11869 -0
  39. viso_sdk_python-1.1.17/viso_sdk/logging/log_id.py +146 -0
  40. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/logging/logger.c +434 -412
  41. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/logging/logger.py +3 -2
  42. {viso_sdk_python-1.1.15/viso_sdk/detection → viso_sdk_python-1.1.17/viso_sdk/model}/__init__.c +35 -35
  43. viso_sdk_python-1.1.17/viso_sdk/model/__init__.py +0 -0
  44. viso_sdk_python-1.1.17/viso_sdk/model/fetch.c +18970 -0
  45. viso_sdk_python-1.1.17/viso_sdk/model/fetch.py +329 -0
  46. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/mqtt/mqtt_wrapper.c +534 -462
  47. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/mqtt/mqtt_wrapper.py +7 -4
  48. viso_sdk_python-1.1.17/viso_sdk/py.typed +0 -0
  49. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/redis/__init__.c +60 -32
  50. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/redis/__init__.py +1 -0
  51. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/redis/redis_wrapper.c +1965 -1163
  52. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/redis/redis_wrapper.py +45 -12
  53. viso_sdk_python-1.1.17/viso_sdk/redis/stream_cleanup.c +12251 -0
  54. viso_sdk_python-1.1.17/viso_sdk/redis/stream_cleanup.py +200 -0
  55. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/redis/utils.c +1147 -840
  56. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/redis/utils.py +39 -34
  57. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/redis/viso_data.c +315 -349
  58. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/redis/viso_data.py +5 -3
  59. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/status/status_logger.c +916 -895
  60. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/status/status_logger.py +14 -7
  61. viso_sdk_python-1.1.17/viso_sdk_python.egg-info/PKG-INFO +144 -0
  62. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk_python.egg-info/SOURCES.txt +25 -4
  63. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk_python.egg-info/requires.txt +2 -0
  64. viso_sdk_python-1.1.15/PKG-INFO +0 -95
  65. viso_sdk_python-1.1.15/README.md +0 -47
  66. viso_sdk_python-1.1.15/setup.cfg +0 -8
  67. viso_sdk_python-1.1.15/tests/conftest.py +0 -11
  68. viso_sdk_python-1.1.15/tests/sample.png +0 -0
  69. viso_sdk_python-1.1.15/tests/test_status.py +0 -64
  70. viso_sdk_python-1.1.15/tests/test_status_logger.py +0 -29
  71. viso_sdk_python-1.1.15/viso_sdk/detection/object.py +0 -82
  72. viso_sdk_python-1.1.15/viso_sdk_python.egg-info/PKG-INFO +0 -95
  73. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/AUTHORS +0 -0
  74. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/COPYING +0 -0
  75. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/MANIFEST.in +0 -0
  76. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/Makefile +0 -0
  77. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/__init__.py +0 -0
  78. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/conf.py +0 -0
  79. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/ext/__init__.py +0 -0
  80. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/ext/docstrings.py +0 -0
  81. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/ext/manager_tmpl.j2 +0 -0
  82. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/index.rst +0 -0
  83. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/make.bat +0 -0
  84. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/modules.rst +0 -0
  85. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk._version.rst +0 -0
  86. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.constants.constants.rst +0 -0
  87. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.constants.modules.rst +0 -0
  88. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.constants.rst +0 -0
  89. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.constants.variables.rst +0 -0
  90. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.edge.common.rst +0 -0
  91. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.edge.rst +0 -0
  92. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.logging.logger.rst +0 -0
  93. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.logging.rst +0 -0
  94. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.model.download.rst +0 -0
  95. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.model.rst +0 -0
  96. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.mqtt.mqtt_wrapper.rst +0 -0
  97. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.mqtt.rst +0 -0
  98. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.mqtt.utils.rst +0 -0
  99. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.nodered.flow.rst +0 -0
  100. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.nodered.rst +0 -0
  101. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.redis.redis_wrapper.rst +0 -0
  102. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.redis.rst +0 -0
  103. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.rst +0 -0
  104. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.status.rst +0 -0
  105. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/docs/source/viso_sdk.status.status_logger.rst +0 -0
  106. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/pyproject.toml +0 -0
  107. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/requirements-dev.txt +0 -0
  108. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/requirements-docker.txt +0 -0
  109. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/requirements-docs.txt +0 -0
  110. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/requirements-lint.txt +0 -0
  111. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/tests/__init__.py +0 -0
  112. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/tests/fixtures/flow.json +0 -0
  113. {viso_sdk_python-1.1.15/tests/meta → viso_sdk_python-1.1.17/tests/integration}/__init__.py +0 -0
  114. {viso_sdk_python-1.1.15/tests/smoke → viso_sdk_python-1.1.17/tests/meta}/__init__.py +0 -0
  115. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/tests/meta/test_ensure_type_hints.py +0 -0
  116. {viso_sdk_python-1.1.15/viso_sdk/detection → viso_sdk_python-1.1.17/tests/smoke}/__init__.py +0 -0
  117. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/tests/smoke/test_dists.py +0 -0
  118. {viso_sdk_python-1.1.15/viso_sdk/detection/utils → viso_sdk_python-1.1.17/tests/unit}/__init__.py +0 -0
  119. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/tox.ini +0 -0
  120. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/constants/constants.c +0 -0
  121. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/constants/constants.py +0 -0
  122. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/constants/modules.c +0 -0
  123. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/constants/modules.py +0 -0
  124. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/detection/utils/__init__.c +0 -0
  125. {viso_sdk_python-1.1.15/viso_sdk/edge → viso_sdk_python-1.1.17/viso_sdk/detection/utils}/__init__.py +0 -0
  126. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/detection/utils/nms.c +0 -0
  127. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/detection/utils/nms.py +0 -0
  128. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/edge/__init__.c +0 -0
  129. /viso_sdk_python-1.1.15/viso_sdk/py.typed → /viso_sdk_python-1.1.17/viso_sdk/edge/__init__.py +0 -0
  130. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/edge/common.c +0 -0
  131. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/edge/common.py +0 -0
  132. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/mqtt/__init__.c +0 -0
  133. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/mqtt/__init__.py +0 -0
  134. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/mqtt/utils.c +0 -0
  135. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/mqtt/utils.py +0 -0
  136. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/nodered/__init__.c +0 -0
  137. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/nodered/__init__.py +0 -0
  138. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/nodered/flow.c +0 -0
  139. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/nodered/flow.py +0 -0
  140. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/roi/__init__.c +0 -0
  141. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/roi/__init__.py +0 -0
  142. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/roi/polygon_roi_manager.c +0 -0
  143. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/roi/polygon_roi_manager.py +0 -0
  144. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/status/__init__.c +0 -0
  145. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/status/__init__.py +0 -0
  146. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/structures/__init__.c +0 -0
  147. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/structures/__init__.py +0 -0
  148. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/structures/rollingq.c +0 -0
  149. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk/structures/rollingq.py +0 -0
  150. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk_python.egg-info/dependency_links.txt +0 -0
  151. {viso_sdk_python-1.1.15 → viso_sdk_python-1.1.17}/viso_sdk_python.egg-info/top_level.txt +0 -0
@@ -2,16 +2,89 @@
2
2
 
3
3
  <!--next-version-placeholder-->
4
4
 
5
+ ## v1.1.17
6
+
7
+ ### Performance Optimizations
8
+
9
+ - **`requirements.txt` / `setup.py`**: Add `orjson>=3.9.0` dependency for 30-50% faster JSON serialization
10
+ - **`status/status_logger.py`**: Replace `json` with `orjson` and eliminate duplicate serialization (serialize once per loop iteration, reuse for MQTT/Redis/logging) — reduces CPU usage by 40-60%
11
+ - **`redis/redis_wrapper.py`**: Implement Redis connection pooling with `max_connections` based on worker count for 20-40% better throughput
12
+ - **`redis/redis_wrapper.py`**: Replace `json` with `orjson` for 30-50% faster serialization/deserialization
13
+ - **`redis/utils.py`**: Optimize `img_to_str()` to return bytes directly instead of unnecessary latin-1 encode/decode cycles
14
+ - **`redis/utils.py`**: Refactor `resize()` to calculate target dimensions once and perform single resize operation (avoid double resize)
15
+
16
+ ### Enhancements
17
+
18
+ - **`CONTRIBUTING.md`** (new): Add comprehensive developer documentation including setup, testing workflows (unit/integration/all), CI pipeline details, build instructions, code quality guidelines, and release checklist
19
+ - **`README.md`**: Simplify for public/production use - moved developer-specific content to CONTRIBUTING.md, added usage examples, kept only essential project information
20
+ - **`mqtt/mqtt_wrapper.py`**: Update to MQTT callback API VERSION2 (paho-mqtt 2.x) to fix deprecation warning
21
+ - **`mqtt/mqtt_wrapper.py`**: Update callback signatures for `_on_connect()` and `_on_publish()` to handle `reason_code` and `properties` parameters
22
+ - **`model/fetch.py`**: Add `filter='data'` parameter to `tar.extractall()` for Python 3.12+ compatibility with fallback for older versions
23
+ - **`tests/unit/test_trace_malloc.py`** (new): Add comprehensive unit tests for `TraceMallocManager` (13 tests covering debug on/off, snapshot management, comparison logic, custom logger support)
24
+ - **`scripts/test_tracemalloc.py`** (new): Add standalone test script for validating memory profiling functionality with 4 test scenarios
25
+
26
+ ### Fix
27
+
28
+ - `logging/logger.py`: Fix ANSI escape code typo in `bold_red` (`\x1b[31a;1m` → `\x1b[31;1m`) that caused CRITICAL log
29
+ lines to render incorrectly
30
+ - `logging/logger.py`: Fix `get_logger()` clearing and re-adding handlers on every call for the same name; now returns
31
+ the existing logger immediately if handlers are already attached
32
+ - `redis/utils.py`: Fix `resize()` always resizing even when target size matched — tuple vs list comparison (
33
+ `== [h, w]` → `== (h, w)`)
34
+ - `redis/utils.py`: Fix `img_to_str(encoder=None)` raising `UnicodeDecodeError` on arbitrary image bytes; raw bytes are
35
+ now encoded/decoded with `latin-1` for a lossless round-trip
36
+ - `redis/utils.py`: Replace deprecated `np.fromstring` with `np.frombuffer` in `str_to_img`
37
+ - `redis/viso_data.py`: Fix `Meta.to_dict()` generating a fresh `time.time()` timestamp instead of returning the stored
38
+ `self.ts`
39
+ - `redis/stream_cleanup.py`: Replace direct `_redis_client.delete()` access with the public
40
+ `redis_wrapper.delete_data()` API
41
+
42
+ ### Enhancements
43
+
44
+ - `redis/redis_wrapper.py`: Remove orphaned local variable `_img_arr = None` in `RedisWrapper.__init__`
45
+ - `setup.py` / `requirements.txt`: Add missing `python-magic` dependency to `install_requires`
46
+ - `constants/variables.py`: Centralise `TOKEN_FILE` path constant (moved from `model/fetch.py`)
47
+ - `model/fetch.py`: Add full type annotations (`Optional[str]`, `bool`, `None`) and Google-style docstrings to all
48
+ public functions; add module-level docstring documenting consumed environment variables
49
+ - `debug/trace_malloc.py` (new): Add `viso_sdk.debug` package with `TraceMallocManager` — a `threading.Thread` subclass
50
+ wrapping `tracemalloc` and `gc` for memory-leak diagnostics in long-running containers; fixes mutable default logger
51
+ argument and uninitialised snapshot attributes when `debug=False`
52
+ - `logging/log_id.py` (new): Add `LogIDGenerator`, `ErrorType`, and `EventType` to `viso_sdk.logging` for structured,
53
+ thread-safe correlation IDs across events, errors, and sessions; exported via `viso_sdk.logging` public API
54
+
55
+ ## v1.1.16
56
+
57
+ ### Features
58
+
59
+ - Add `StreamCleanupManager` class and `clear_stream_redis_keys()` helper to `viso_sdk.redis` for discovering and
60
+ clearing Redis KV stores across Node-RED flow graphs
61
+ - Add `model_utils` module to `viso_sdk.detection` with `ModelArchitecture`, `YoloModelFilesInfo`, `FasterRcnnBackbone`,
62
+ `detect_model_architecture()`, and `check_model_architecture()` utilities
63
+
64
+ ### Enhancements
65
+
66
+ - `Detection.__init__`: support list-typed `roi_id`/`roi_name`, auto-normalize pixel-space bounding boxes using
67
+ `frame_sz` parameter
68
+ - `Detection`: add `to_tlbr()` and `to_xyah()` bounding box conversion methods
69
+ - Export `StreamCleanupManager` and `clear_stream_redis_keys` in `viso_sdk.redis` public API
70
+ - Export detection utilities (`BaseDetect`, `Detection`, `filter_iou_threshold`, `filter_labels`, `ModelArchitecture`,
71
+ etc.) in `viso_sdk.detection` public API
72
+
5
73
  ## v1.1.15
74
+
6
75
  ### fix
76
+
7
77
  - Add ROI overlap detection feature to identify objects present in multiple ROIs simultaneously
8
78
 
9
79
  ## v1.1.14
80
+
10
81
  ### Fix
82
+
11
83
  - Fix ROI assignment bug where objects retained first ROI info when moving between ROIs
12
84
  - Fix staticmethod decorator conflict in `_assign_roi_info` helper method
13
85
 
14
86
  ### Enhancements
87
+
15
88
  - Refactor duplicated ROI assignment code into `_assign_roi_info` static method
16
89
  - Remove console handler to prevent duplicate logging to syslog/journal
17
90
  - Add dynamic log level control with `set_log_level()` function
@@ -21,190 +94,286 @@
21
94
  - Add comprehensive docstring to `exception_traceback` function
22
95
 
23
96
  ### Breaking Changes
97
+
24
98
  - Default log level changed to WARNING (minimal logs) - use `set_minimal_logging(False)` for INFO logs
25
99
  - Console/stdout logging disabled by default - only enabled when log level is INFO or DEBUG
26
100
  - Logs now only written to disk files by default (not visible in `podman logs` unless verbose mode enabled)
27
101
 
28
102
  ## v1.1.13
103
+
29
104
  ### Enhancements
105
+
30
106
  - `FlowAPIWrapper`: read `NODE_RED_HOST` env var for k8s compatibility; falls back to `127.0.0.1` when not set
31
107
  - `RedisWrapper`: read `REDIS_HOST` env var for k8s compatibility; falls back to `localhost` when not set
32
108
  - `MqttWrapper`: read `MQTT_HOST` env var for k8s compatibility; falls back to `127.0.0.1` when not set
33
109
 
34
110
  ## v1.1.12
111
+
35
112
  ### Fix
36
- - Fix metadata update methods to handle falsy values (0, False) correctly in MetaSource, MetaModule, and MetaFrameFormat classes. Previously, output_port_idx=0 was being filtered out during metadata propagation.
113
+
114
+ - Fix metadata update methods to handle falsy values (0, False) correctly in MetaSource, MetaModule, and MetaFrameFormat
115
+ classes. Previously, output_port_idx=0 was being filtered out during metadata propagation.
37
116
 
38
117
  ## v1.1.11
118
+
39
119
  ### Enhancements
120
+
40
121
  - Increase log file size to 50MB
41
122
 
42
123
  ## v1.1.10
124
+
43
125
  ### Enhancements
126
+
44
127
  - remove visualization scripts and font
45
128
  - remove pillow package
46
129
 
47
130
  ## v1.1.8
131
+
48
132
  ### Enhancements
133
+
49
134
  - Add thread pool executors to handle redis requests
50
135
  - Add redis frame TTL
51
136
 
52
137
  ## v1.1.7
138
+
53
139
  ### Fix
140
+
54
141
  - Revert deletion of redis frames which caused issue with multiple consumers
55
142
 
56
143
  ## v1.1.6
144
+
57
145
  ### Fix
146
+
58
147
  - Fix bug with importing nonexisted data structures
59
148
 
60
149
  ## v1.1.5
150
+
61
151
  ### Enhancements
152
+
62
153
  - Redis frames are deleted once pulled to avoid processing twice
63
154
  - New data structures have been added (RQueue) to improve performance
64
155
  - Add new constant variables
65
156
 
66
157
  ## v1.1.4
158
+
67
159
  ### Enhancements
160
+
68
161
  - add available devices in the AARCH64 architecture
69
162
 
70
163
  ## v1.1.3
164
+
71
165
  ### Enhancements
166
+
72
167
  - remove opencv-contrib-python and update opencv-python-headless to 4.10.0
73
168
 
74
169
  ## v1.1.2
170
+
75
171
  ### Enhancements
172
+
76
173
  - upgrade opencv version to 4.10.0
174
+
77
175
  ### Features
176
+
78
177
  - add new modules in constants.modules
79
178
  - add publish key values in the constants.constants
80
179
 
81
180
  ## v1.0.8
181
+
82
182
  ### Fix
183
+
83
184
  - fix issue - cannot find video-feed when using video-feed-ip(usb, videofile) source
185
+
84
186
  ### Enhancements
187
+
85
188
  - updated documents
189
+
86
190
  ### Features
191
+
87
192
  - add new modules in constants.modules
88
193
 
89
194
  ## v1.0.7
195
+
90
196
  ### Fix
197
+
91
198
  - inherit viso_data.meta object
92
199
 
93
200
  ## v1.0.6
201
+
94
202
  ### Fix
203
+
95
204
  - standard TensorRT spell as lowercase() -> tensorrt
96
205
 
97
206
  ## v1.0.5
207
+
98
208
  ### Fix
209
+
99
210
  - indicate numpy version for fixing - ImportError: numpy.core.multiarray failed to import
100
211
 
101
212
  ## v1.0.4
213
+
102
214
  ### Fix
215
+
103
216
  - viso_data.meta.source.update() - Fix attribute error when new attribute comes
104
217
 
105
218
  ## v1.0.2
219
+
106
220
  ### Enhancements
221
+
107
222
  - viso_data() - split into sub dataclasses MetaSource(), MetaModule(), MetaFrameFormat()
108
223
 
109
224
  ## v1.0.1
225
+
110
226
  ### Enhancements
227
+
111
228
  - viso_data(), default version is set 1
229
+
112
230
  ### Features
231
+
113
232
  - integrate viso_data into redis_utils
233
+
114
234
  ### Fix
235
+
115
236
  - status_logger using new redis_utils
116
237
  - redis_wrapper decoding bytes to str
117
238
 
118
239
  ## v1.0.0 = v0.2.15
119
240
 
120
241
  ## v0.2.15
242
+
121
243
  ### Features
244
+
122
245
  - soft merge redis_meta with redis_encoding
123
246
 
124
247
  ## v0.2.14
248
+
125
249
  ### Enhancements
250
+
126
251
  - add instance object for detection result
252
+
127
253
  ### Fix
254
+
128
255
  - indicate proper paho-mqtt version
129
256
 
130
257
  ## v0.2.12/v0.2.13
258
+
131
259
  ### Enhancements
260
+
132
261
  - add member functions into __init__.py (redis and mqtt)
262
+
133
263
  ### Fix
264
+
134
265
  - remove func redis_wrapper.gen_redis_key_status()
135
266
 
136
267
  ## v0.2.11
268
+
137
269
  ### Enhancements
270
+
138
271
  - remove pillow version
139
272
 
140
273
  ## v0.2.10
274
+
141
275
  ### Enhancements
276
+
142
277
  - update to python3.10
143
278
 
144
279
  ## v0.2.9
280
+
145
281
  ### Enhancements
282
+
146
283
  - more detailed visualization parameters
147
284
 
148
285
  ## v0.2.7(v0.2.8)
286
+
149
287
  ### Enhancements
288
+
150
289
  - constants - add common keys for object tracking/recognition
151
290
  - visualization:
152
- - add draw_tracking_objects
153
- - ignore empty object lists on visualization function
291
+ - add draw_tracking_objects
292
+ - ignore empty object lists on visualization function
154
293
 
155
294
  ## v0.2.6
295
+
156
296
  ### Fix
297
+
157
298
  - update other viz functions (vis_obj, vis_roi) using updated utils.put_text()
158
299
 
159
300
  ## v0.2.5
301
+
160
302
  ### Fix
303
+
161
304
  - update function to calculate padding in the case of multi-line text
162
305
  - add new framework TensorRT
163
306
  - update utils.put_text() parameter names
164
307
 
165
308
  ## v0.2.4
309
+
166
310
  ### Features
311
+
167
312
  - sphinx autodoc
168
313
 
169
314
  ## v0.2.3
315
+
170
316
  ### Features
317
+
171
318
  - added drawer function for (line-type) roi objects
319
+
172
320
  ### Fix
321
+
173
322
  - visualize.utils.put_text() - correct padding calculation
174
323
  - visualize.utils.put_text() - treat multi-line text too
175
324
  - visualize.utils.put_text() - added option for center align
176
325
 
177
326
  ## v0.2.2
327
+
178
328
  ### Features
329
+
179
330
  - new declaration of modules
331
+
180
332
  ### Fix
333
+
181
334
  - VizObj, VizRoi - missed arguments (text_color)
182
335
  - update default shadow_color with pillow RGBA format(255, 0, 0, 255) = RED
183
336
 
184
337
  ## v0.2.1
338
+
185
339
  ### Fix
340
+
186
341
  - update default shadow_color with pillow RGBA format(255, 0, 0, 255) = RED
187
342
 
188
343
  ## v0.2.0
344
+
189
345
  ### Features
346
+
190
347
  - new declaration of modules
191
348
  - added CHANGELOG.md
349
+
192
350
  ### Fix
351
+
193
352
  - VizObj, VizRoi - missed arguments (text_color)
194
353
  - alpha channel value type, float to integer
195
354
 
196
355
  ## v0.1.3
356
+
197
357
  ### Enhancements
358
+
198
359
  - Update visualization for dynamic fonts
360
+
199
361
  ### Fix
362
+
200
363
  - init_font() - the case of not existing font_name
201
364
 
202
365
  ## v0.1.2
366
+
203
367
  ### Enhancements
368
+
204
369
  - upgrade opencv version to 4.6.0
370
+
205
371
  ### Fix
372
+
206
373
  - fix font_path
207
374
 
208
375
  ## v0.1.0
376
+
209
377
  ### Fix
378
+
210
379
  - fix color order from BGR to RGB
@@ -0,0 +1,144 @@
1
+ Metadata-Version: 2.4
2
+ Name: viso-sdk-python
3
+ Version: 1.1.17
4
+ Summary: VisoSDK: A Python SDK for use in Viso containers
5
+ Home-page: https://gitlab.com/TopKamera/03_edge/Base/viso-sdk-python-public.git
6
+ Author: support@viso.ai
7
+ Author-email: support@viso.ai
8
+ License: LGPLv3
9
+ Classifier: Development Status :: 5 - Production/Stable
10
+ Classifier: Environment :: Console
11
+ Classifier: Intended Audience :: System Administrators
12
+ Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
13
+ Classifier: Natural Language :: English
14
+ Classifier: Operating System :: POSIX
15
+ Classifier: Programming Language :: Python
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.6
18
+ Classifier: Programming Language :: Python :: 3.7
19
+ Classifier: Programming Language :: Python :: 3.8
20
+ Classifier: Programming Language :: Python :: 3.9
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Requires-Python: >=3.6.0
23
+ Description-Content-Type: text/markdown
24
+ License-File: COPYING
25
+ License-File: AUTHORS
26
+ Requires-Dist: requests
27
+ Requires-Dist: requests-toolbelt
28
+ Requires-Dist: setuptools
29
+ Requires-Dist: paho-mqtt
30
+ Requires-Dist: redis
31
+ Requires-Dist: opencv-contrib-python-headless~=4.10.0
32
+ Requires-Dist: cython~=3.0.2
33
+ Requires-Dist: numpy~=1.26.2
34
+ Requires-Dist: six~=1.16.0
35
+ Requires-Dist: traceback2~=1.4.0
36
+ Requires-Dist: shapely~=2.0.7
37
+ Requires-Dist: python-magic
38
+ Requires-Dist: orjson>=3.9.0
39
+ Dynamic: author
40
+ Dynamic: author-email
41
+ Dynamic: classifier
42
+ Dynamic: description
43
+ Dynamic: description-content-type
44
+ Dynamic: home-page
45
+ Dynamic: license
46
+ Dynamic: license-file
47
+ Dynamic: requires-dist
48
+ Dynamic: requires-python
49
+ Dynamic: summary
50
+
51
+ # viso-sdk-python
52
+
53
+ **viso-sdk-python** is a Python SDK providing shared utilities for [viso.ai](https://viso.ai) edge containers. It covers logging, Redis/MQTT communication, model fetching, ROI handling, detection structures, and more.
54
+
55
+ Licensed under [LGPLv3](https://www.gnu.org/licenses/lgpl-3.0.html).
56
+
57
+ ---
58
+
59
+ ## Requirements
60
+
61
+ - **Python** >= 3.6
62
+ - **System library**: `libmagic1` (required by the `model` module)
63
+
64
+ ```shell
65
+ apt-get install libmagic1
66
+ ```
67
+
68
+ ---
69
+
70
+ ## Installation
71
+
72
+ ```shell
73
+ pip install viso-sdk-python
74
+ ```
75
+
76
+ ---
77
+
78
+ ## Modules
79
+
80
+ | Module | Description |
81
+ |---|---|
82
+ | `viso_sdk.constants` | Shared constants and environment-driven configuration |
83
+ | `viso_sdk.model` | Model fetching, extraction, and type detection |
84
+ | `viso_sdk.logging` | Centralised logger factory |
85
+ | `viso_sdk.redis` | Redis stream wrapper and cleanup utilities |
86
+ | `viso_sdk.mqtt` | MQTT client wrapper |
87
+ | `viso_sdk.roi` | Region-of-interest helpers |
88
+ | `viso_sdk.detection` | Detection result structures |
89
+ | `viso_sdk.edge` | Edge device utilities |
90
+ | `viso_sdk.status` | Container status reporting |
91
+ | `viso_sdk.nodered` | Node-RED integration helpers |
92
+
93
+ ---
94
+
95
+ ## Usage Examples
96
+
97
+ ### Redis Communication
98
+
99
+ ```python
100
+ from viso_sdk.redis import RedisWrapper, VisoData
101
+
102
+ # Initialize Redis wrapper
103
+ redis = RedisWrapper(host="localhost", port=6379)
104
+
105
+ # Write data
106
+ redis.write_data("my_key", {"status": "active"})
107
+
108
+ # Read data
109
+ data = redis.read_viso_data("my_key")
110
+ ```
111
+
112
+ ### MQTT Messaging
113
+
114
+ ```python
115
+ from viso_sdk.mqtt import MqttWrapper
116
+
117
+ # Initialize MQTT client
118
+ mqtt = MqttWrapper()
119
+
120
+ # Publish message
121
+ mqtt.publish(topic="device/status", message='{"state": "online"}')
122
+ ```
123
+
124
+ ### Logging
125
+
126
+ ```python
127
+ from viso_sdk.logging import get_logger
128
+
129
+ logger = get_logger("MyModule")
130
+ logger.info("Application started")
131
+ logger.error("An error occurred")
132
+ ```
133
+
134
+ ---
135
+
136
+ ## Contributing
137
+
138
+ Contributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, testing guidelines, and CI pipeline information.
139
+
140
+ ---
141
+
142
+ ## License
143
+
144
+ Licensed under [LGPLv3](https://www.gnu.org/licenses/lgpl-3.0.html).
@@ -0,0 +1,94 @@
1
+ # viso-sdk-python
2
+
3
+ **viso-sdk-python** is a Python SDK providing shared utilities for [viso.ai](https://viso.ai) edge containers. It covers logging, Redis/MQTT communication, model fetching, ROI handling, detection structures, and more.
4
+
5
+ Licensed under [LGPLv3](https://www.gnu.org/licenses/lgpl-3.0.html).
6
+
7
+ ---
8
+
9
+ ## Requirements
10
+
11
+ - **Python** >= 3.6
12
+ - **System library**: `libmagic1` (required by the `model` module)
13
+
14
+ ```shell
15
+ apt-get install libmagic1
16
+ ```
17
+
18
+ ---
19
+
20
+ ## Installation
21
+
22
+ ```shell
23
+ pip install viso-sdk-python
24
+ ```
25
+
26
+ ---
27
+
28
+ ## Modules
29
+
30
+ | Module | Description |
31
+ |---|---|
32
+ | `viso_sdk.constants` | Shared constants and environment-driven configuration |
33
+ | `viso_sdk.model` | Model fetching, extraction, and type detection |
34
+ | `viso_sdk.logging` | Centralised logger factory |
35
+ | `viso_sdk.redis` | Redis stream wrapper and cleanup utilities |
36
+ | `viso_sdk.mqtt` | MQTT client wrapper |
37
+ | `viso_sdk.roi` | Region-of-interest helpers |
38
+ | `viso_sdk.detection` | Detection result structures |
39
+ | `viso_sdk.edge` | Edge device utilities |
40
+ | `viso_sdk.status` | Container status reporting |
41
+ | `viso_sdk.nodered` | Node-RED integration helpers |
42
+
43
+ ---
44
+
45
+ ## Usage Examples
46
+
47
+ ### Redis Communication
48
+
49
+ ```python
50
+ from viso_sdk.redis import RedisWrapper, VisoData
51
+
52
+ # Initialize Redis wrapper
53
+ redis = RedisWrapper(host="localhost", port=6379)
54
+
55
+ # Write data
56
+ redis.write_data("my_key", {"status": "active"})
57
+
58
+ # Read data
59
+ data = redis.read_viso_data("my_key")
60
+ ```
61
+
62
+ ### MQTT Messaging
63
+
64
+ ```python
65
+ from viso_sdk.mqtt import MqttWrapper
66
+
67
+ # Initialize MQTT client
68
+ mqtt = MqttWrapper()
69
+
70
+ # Publish message
71
+ mqtt.publish(topic="device/status", message='{"state": "online"}')
72
+ ```
73
+
74
+ ### Logging
75
+
76
+ ```python
77
+ from viso_sdk.logging import get_logger
78
+
79
+ logger = get_logger("MyModule")
80
+ logger.info("Application started")
81
+ logger.error("An error occurred")
82
+ ```
83
+
84
+ ---
85
+
86
+ ## Contributing
87
+
88
+ Contributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, testing guidelines, and CI pipeline information.
89
+
90
+ ---
91
+
92
+ ## License
93
+
94
+ Licensed under [LGPLv3](https://www.gnu.org/licenses/lgpl-3.0.html).
@@ -3,3 +3,4 @@ pytest
3
3
  pytest-console-scripts
4
4
  pytest-cov
5
5
  responses
6
+ setuptools-cythonize
@@ -11,3 +11,5 @@ opencv-contrib-python-headless~=4.10.0
11
11
  six~=1.16.0
12
12
  traceback2~=1.4.0
13
13
  shapely~=2.0.7
14
+ python-magic
15
+ orjson>=3.9.0
@@ -0,0 +1,16 @@
1
+ [build_sphinx]
2
+ warning-is-error = 1
3
+ keep-going = 1
4
+
5
+ [tool:pytest]
6
+ markers =
7
+ integration: marks tests that require external services (Redis, MQTT) -- run with docker-compose
8
+ testpaths = tests
9
+ python_files = test_*.py
10
+ python_classes = Test*
11
+ python_functions = test_*
12
+
13
+ [egg_info]
14
+ tag_build =
15
+ tag_date = 0
16
+
@@ -1,8 +1,13 @@
1
1
  #!/usr/bin/python
2
2
  # -*- coding: utf-8 -*-
3
+ import os
3
4
  from setuptools import find_packages, setup
4
- from Cython.Build import cythonize
5
- from setuptools_cythonize import get_cmdclass
5
+
6
+ USE_CYTHON = os.environ.get("USE_CYTHON", "1") != "0"
7
+
8
+ if USE_CYTHON:
9
+ from Cython.Build import cythonize
10
+ from setuptools_cythonize import get_cmdclass
6
11
 
7
12
  from codecs import open
8
13
  from os import path
@@ -30,7 +35,7 @@ with open("requirements.txt") as f:
30
35
 
31
36
  setup(
32
37
  name="viso-sdk-python",
33
- cmdclass=get_cmdclass(),
38
+ cmdclass=get_cmdclass() if USE_CYTHON else {},
34
39
  version=__version__,
35
40
  description="VisoSDK: A Python SDK for use in Viso containers",
36
41
  long_description=readme,
@@ -53,7 +58,9 @@ setup(
53
58
  "numpy~=1.26.2",
54
59
  "six~=1.16.0",
55
60
  "traceback2~=1.4.0",
56
- "shapely~=2.0.7"
61
+ "shapely~=2.0.7",
62
+ "python-magic",
63
+ "orjson>=3.9.0"
57
64
  ],
58
65
  package_data={"viso_sdk": ["assets/*", "assets/*/*"]},
59
66
  python_requires=">=3.6.0",
@@ -74,7 +81,7 @@ setup(
74
81
  "Programming Language :: Python :: 3.9",
75
82
  "Programming Language :: Python :: 3.10",
76
83
  ],
77
- ext_modules=cythonize("viso_sdk/**/*.py", compiler_directives={"language_level": "3"}),
84
+ ext_modules=cythonize("viso_sdk/**/*.py", compiler_directives={"language_level": "3"}) if USE_CYTHON else [],
78
85
  # options={"bdist_wheel": {"universal": True}},
79
86
  # extras_require={
80
87
  # "autocompletion": ["argcomplete>=1.10.0,<3"],