telekinesis-dataengine 0.0.2__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.
- telekinesis_dataengine-0.0.2/LICENSE.txt +0 -0
- telekinesis_dataengine-0.0.2/PKG-INFO +150 -0
- telekinesis_dataengine-0.0.2/README.md +115 -0
- telekinesis_dataengine-0.0.2/pyproject.toml +70 -0
- telekinesis_dataengine-0.0.2/setup.cfg +4 -0
- telekinesis_dataengine-0.0.2/src/telekinesis/dataengine/__init__.py +43 -0
- telekinesis_dataengine-0.0.2/src/telekinesis/dataengine/detection/logger.py +908 -0
- telekinesis_dataengine-0.0.2/src/telekinesis/dataengine/detection/node.py +252 -0
- telekinesis_dataengine-0.0.2/src/telekinesis/dataengine/detection/utils.py +932 -0
- telekinesis_dataengine-0.0.2/src/telekinesis/dataengine/mcap/logger.py +256 -0
- telekinesis_dataengine-0.0.2/src/telekinesis_dataengine.egg-info/PKG-INFO +150 -0
- telekinesis_dataengine-0.0.2/src/telekinesis_dataengine.egg-info/SOURCES.txt +13 -0
- telekinesis_dataengine-0.0.2/src/telekinesis_dataengine.egg-info/dependency_links.txt +1 -0
- telekinesis_dataengine-0.0.2/src/telekinesis_dataengine.egg-info/requires.txt +16 -0
- telekinesis_dataengine-0.0.2/src/telekinesis_dataengine.egg-info/top_level.txt +1 -0
|
File without changes
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: telekinesis-dataengine
|
|
3
|
+
Version: 0.0.2
|
|
4
|
+
Summary: Data-collection logging (MCAP over Zenoh) and detection-dataset tooling (YOLO / RF-DETR) for the Telekinesis SDK.
|
|
5
|
+
Author-email: Telekinesis <support@telekinesis.ai>
|
|
6
|
+
License-Expression: LicenseRef-Proprietary
|
|
7
|
+
Project-URL: Homepage, https://telekinesis.ai
|
|
8
|
+
Project-URL: Documentation, https://docs.telekinesis.ai
|
|
9
|
+
Project-URL: Telekinesis Examples Repository, https://github.com/telekinesis-ai/telekinesis-examples
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
17
|
+
Requires-Python: >=3.10
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
License-File: LICENSE.txt
|
|
20
|
+
Requires-Dist: babyros>=0.1.6
|
|
21
|
+
Requires-Dist: mcap>=1.0.0
|
|
22
|
+
Requires-Dist: loguru>=0.5.0
|
|
23
|
+
Requires-Dist: numpy>=1.26.0
|
|
24
|
+
Requires-Dist: pillow>=9.0.0
|
|
25
|
+
Requires-Dist: pyyaml>=6.0
|
|
26
|
+
Requires-Dist: telekinesis-datatypes>=0.2.3
|
|
27
|
+
Provides-Extra: viz
|
|
28
|
+
Requires-Dist: fiftyone==1.17.0; extra == "viz"
|
|
29
|
+
Provides-Extra: dev
|
|
30
|
+
Requires-Dist: ruff==0.15.8; extra == "dev"
|
|
31
|
+
Requires-Dist: pylint==4.0.5; extra == "dev"
|
|
32
|
+
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pytest-cov>=5.0.0; extra == "dev"
|
|
34
|
+
Dynamic: license-file
|
|
35
|
+
|
|
36
|
+
<div align="center">
|
|
37
|
+
<p>
|
|
38
|
+
<a align="center" href="" target="_blank">
|
|
39
|
+
<img
|
|
40
|
+
width="100%"
|
|
41
|
+
src="https://telekinesis-public-assets.s3.us-east-1.amazonaws.com/Telekinesis+Banner.png"
|
|
42
|
+
>
|
|
43
|
+
</a>
|
|
44
|
+
</p>
|
|
45
|
+
|
|
46
|
+
<br>
|
|
47
|
+
|
|
48
|
+
[Telekinesis Examples](https://github.com/telekinesis-ai/telekinesis-examples)
|
|
49
|
+
<br>
|
|
50
|
+
|
|
51
|
+
[](https://pypi.org/project/telekinesis-dataengine/)
|
|
52
|
+
[](https://pypi.org/project/telekinesis-dataengine/)
|
|
53
|
+
[](https://pypi.org/project/telekinesis-dataengine/)
|
|
54
|
+
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
<p align="center">
|
|
58
|
+
<a href="https://github.com/telekinesis-ai">GitHub</a>
|
|
59
|
+
•
|
|
60
|
+
<a href="https://www.linkedin.com/company/telekinesis-ai/">LinkedIn</a>
|
|
61
|
+
•
|
|
62
|
+
<a href="https://x.com/telekinesis_ai">X</a>
|
|
63
|
+
•
|
|
64
|
+
<a href="https://discord.gg/7NnQ3bQHqm">Discord</a>
|
|
65
|
+
</p>
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
# Telekinesis Data Engine
|
|
69
|
+
|
|
70
|
+
Telekinesis Data Engine turns real-world, online-collected robot and perception data into standard, trainable datasets within the Telekinesis ecosystem.
|
|
71
|
+
|
|
72
|
+
## Features
|
|
73
|
+
|
|
74
|
+
It includes:
|
|
75
|
+
- MCAP logging: capture every publisher on the Zenoh network into a single self-describing `.mcap` file, and read it back into live objects
|
|
76
|
+
- Detection-dataset logging: write labelled frames straight to a trainable **YOLO** (Ultralytics) or **RF-DETR** (COCO) dataset, with automatic train/val/test routing
|
|
77
|
+
- Decoupled pub/sub writers so disk I/O never stalls the capture loop
|
|
78
|
+
- Lossless conversion and merging between the YOLO and COCO / RF-DETR layouts
|
|
79
|
+
- FiftyOne-based visualization of detection datasets
|
|
80
|
+
|
|
81
|
+
## Requirements
|
|
82
|
+
Current support for Python versions - `3.10`, `3.11`, `3.12`.
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
**Note**
|
|
86
|
+
- Telekinesis Data Engine is currently in its early development phase (pre-1.0).
|
|
87
|
+
- There will be continuous **version updates** which introduce new features and optimizations. To have the latest features, please always install or upgrade to the **latest version of the package.**
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
## Installation
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
pip install telekinesis-dataengine
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Example
|
|
97
|
+
|
|
98
|
+
Run a sample python code to quickly test your installation.
|
|
99
|
+
|
|
100
|
+
1. Create a `Python` file named `dataengine_example.py` in a directory of your choice, and copy paste the below:
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
import numpy as np
|
|
104
|
+
from telekinesis.dataengine import DetectionLogger
|
|
105
|
+
|
|
106
|
+
# Create a logger that writes an Ultralytics YOLO dataset.
|
|
107
|
+
# categories=None builds the class table dynamically from what you log.
|
|
108
|
+
logger = DetectionLogger.create("yolo", "results/demo_dataset", mode="overwrite")
|
|
109
|
+
|
|
110
|
+
# A labelled frame: a raw image (HxWxC) + COCO-style boxes [x, y, w, h].
|
|
111
|
+
image = np.zeros((480, 640, 3), dtype=np.uint8)
|
|
112
|
+
annotations = [{"category_id": 0, "bbox": [100, 120, 80, 60]}]
|
|
113
|
+
|
|
114
|
+
logger.log(image, annotations) # auto-routed 80/10/10 across train/val/test
|
|
115
|
+
logger.close() # writes images/, labels/, and data.yaml
|
|
116
|
+
|
|
117
|
+
print("Dataset written to results/demo_dataset")
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
2. On a terminal, navigate to the directory where `dataengine_example.py` was created, and run:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
python dataengine_example.py
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Expected output:
|
|
127
|
+
```bash
|
|
128
|
+
Dataset written to results/demo_dataset
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Swap `"yolo"` → `"rfdetr"` to emit a COCO dataset instead — the call sites stay the same.
|
|
132
|
+
|
|
133
|
+
You are now set up with Telekinesis Data Engine.
|
|
134
|
+
|
|
135
|
+
## Resources
|
|
136
|
+
|
|
137
|
+
- Examples
|
|
138
|
+
Runnable usage examples for the Telekinesis SDK: [Telekinesis Examples](https://github.com/telekinesis-ai/telekinesis-examples)
|
|
139
|
+
|
|
140
|
+
- Documentation
|
|
141
|
+
Full SDK documentation and usage details: [Telekinesis Documentation](https://docs.telekinesis.ai)
|
|
142
|
+
|
|
143
|
+
- Development
|
|
144
|
+
Building, testing, and contributing to this package: [DEVELOPMENT.md](DEVELOPMENT.md)
|
|
145
|
+
|
|
146
|
+
## Support
|
|
147
|
+
|
|
148
|
+
For issues and questions:
|
|
149
|
+
- Create an [issue](https://gitlab.com/telekinesis/data-engine/-/issues) in the GitLab repository.
|
|
150
|
+
- Contact the Telekinesis development team at support@telekinesis.ai or on [Discord](https://discord.com/invite/7NnQ3bQHqm).
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<p>
|
|
3
|
+
<a align="center" href="" target="_blank">
|
|
4
|
+
<img
|
|
5
|
+
width="100%"
|
|
6
|
+
src="https://telekinesis-public-assets.s3.us-east-1.amazonaws.com/Telekinesis+Banner.png"
|
|
7
|
+
>
|
|
8
|
+
</a>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<br>
|
|
12
|
+
|
|
13
|
+
[Telekinesis Examples](https://github.com/telekinesis-ai/telekinesis-examples)
|
|
14
|
+
<br>
|
|
15
|
+
|
|
16
|
+
[](https://pypi.org/project/telekinesis-dataengine/)
|
|
17
|
+
[](https://pypi.org/project/telekinesis-dataengine/)
|
|
18
|
+
[](https://pypi.org/project/telekinesis-dataengine/)
|
|
19
|
+
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<p align="center">
|
|
23
|
+
<a href="https://github.com/telekinesis-ai">GitHub</a>
|
|
24
|
+
•
|
|
25
|
+
<a href="https://www.linkedin.com/company/telekinesis-ai/">LinkedIn</a>
|
|
26
|
+
•
|
|
27
|
+
<a href="https://x.com/telekinesis_ai">X</a>
|
|
28
|
+
•
|
|
29
|
+
<a href="https://discord.gg/7NnQ3bQHqm">Discord</a>
|
|
30
|
+
</p>
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# Telekinesis Data Engine
|
|
34
|
+
|
|
35
|
+
Telekinesis Data Engine turns real-world, online-collected robot and perception data into standard, trainable datasets within the Telekinesis ecosystem.
|
|
36
|
+
|
|
37
|
+
## Features
|
|
38
|
+
|
|
39
|
+
It includes:
|
|
40
|
+
- MCAP logging: capture every publisher on the Zenoh network into a single self-describing `.mcap` file, and read it back into live objects
|
|
41
|
+
- Detection-dataset logging: write labelled frames straight to a trainable **YOLO** (Ultralytics) or **RF-DETR** (COCO) dataset, with automatic train/val/test routing
|
|
42
|
+
- Decoupled pub/sub writers so disk I/O never stalls the capture loop
|
|
43
|
+
- Lossless conversion and merging between the YOLO and COCO / RF-DETR layouts
|
|
44
|
+
- FiftyOne-based visualization of detection datasets
|
|
45
|
+
|
|
46
|
+
## Requirements
|
|
47
|
+
Current support for Python versions - `3.10`, `3.11`, `3.12`.
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
**Note**
|
|
51
|
+
- Telekinesis Data Engine is currently in its early development phase (pre-1.0).
|
|
52
|
+
- There will be continuous **version updates** which introduce new features and optimizations. To have the latest features, please always install or upgrade to the **latest version of the package.**
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
## Installation
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
pip install telekinesis-dataengine
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Example
|
|
62
|
+
|
|
63
|
+
Run a sample python code to quickly test your installation.
|
|
64
|
+
|
|
65
|
+
1. Create a `Python` file named `dataengine_example.py` in a directory of your choice, and copy paste the below:
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
import numpy as np
|
|
69
|
+
from telekinesis.dataengine import DetectionLogger
|
|
70
|
+
|
|
71
|
+
# Create a logger that writes an Ultralytics YOLO dataset.
|
|
72
|
+
# categories=None builds the class table dynamically from what you log.
|
|
73
|
+
logger = DetectionLogger.create("yolo", "results/demo_dataset", mode="overwrite")
|
|
74
|
+
|
|
75
|
+
# A labelled frame: a raw image (HxWxC) + COCO-style boxes [x, y, w, h].
|
|
76
|
+
image = np.zeros((480, 640, 3), dtype=np.uint8)
|
|
77
|
+
annotations = [{"category_id": 0, "bbox": [100, 120, 80, 60]}]
|
|
78
|
+
|
|
79
|
+
logger.log(image, annotations) # auto-routed 80/10/10 across train/val/test
|
|
80
|
+
logger.close() # writes images/, labels/, and data.yaml
|
|
81
|
+
|
|
82
|
+
print("Dataset written to results/demo_dataset")
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
2. On a terminal, navigate to the directory where `dataengine_example.py` was created, and run:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
python dataengine_example.py
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Expected output:
|
|
92
|
+
```bash
|
|
93
|
+
Dataset written to results/demo_dataset
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Swap `"yolo"` → `"rfdetr"` to emit a COCO dataset instead — the call sites stay the same.
|
|
97
|
+
|
|
98
|
+
You are now set up with Telekinesis Data Engine.
|
|
99
|
+
|
|
100
|
+
## Resources
|
|
101
|
+
|
|
102
|
+
- Examples
|
|
103
|
+
Runnable usage examples for the Telekinesis SDK: [Telekinesis Examples](https://github.com/telekinesis-ai/telekinesis-examples)
|
|
104
|
+
|
|
105
|
+
- Documentation
|
|
106
|
+
Full SDK documentation and usage details: [Telekinesis Documentation](https://docs.telekinesis.ai)
|
|
107
|
+
|
|
108
|
+
- Development
|
|
109
|
+
Building, testing, and contributing to this package: [DEVELOPMENT.md](DEVELOPMENT.md)
|
|
110
|
+
|
|
111
|
+
## Support
|
|
112
|
+
|
|
113
|
+
For issues and questions:
|
|
114
|
+
- Create an [issue](https://gitlab.com/telekinesis/data-engine/-/issues) in the GitLab repository.
|
|
115
|
+
- Contact the Telekinesis development team at support@telekinesis.ai or on [Discord](https://discord.com/invite/7NnQ3bQHqm).
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = [
|
|
3
|
+
"setuptools",
|
|
4
|
+
]
|
|
5
|
+
build-backend = "setuptools.build_meta"
|
|
6
|
+
|
|
7
|
+
[project]
|
|
8
|
+
name = "telekinesis-dataengine"
|
|
9
|
+
version = "0.0.2"
|
|
10
|
+
description = "Data-collection logging (MCAP over Zenoh) and detection-dataset tooling (YOLO / RF-DETR) for the Telekinesis SDK."
|
|
11
|
+
readme = "README.md"
|
|
12
|
+
requires-python = ">=3.10"
|
|
13
|
+
license = "LicenseRef-Proprietary"
|
|
14
|
+
license-files = [
|
|
15
|
+
"LICEN[CS]E*",
|
|
16
|
+
]
|
|
17
|
+
authors = [
|
|
18
|
+
{ name = "Telekinesis", email = "support@telekinesis.ai" },
|
|
19
|
+
]
|
|
20
|
+
classifiers = [
|
|
21
|
+
"Programming Language :: Python :: 3",
|
|
22
|
+
"Programming Language :: Python :: 3.10",
|
|
23
|
+
"Programming Language :: Python :: 3.11",
|
|
24
|
+
"Programming Language :: Python :: 3.12",
|
|
25
|
+
"Operating System :: OS Independent",
|
|
26
|
+
"Intended Audience :: Developers",
|
|
27
|
+
"Topic :: Software Development :: Libraries",
|
|
28
|
+
]
|
|
29
|
+
dependencies = [
|
|
30
|
+
# babyros is a local/editable Telekinesis package (not on a public index);
|
|
31
|
+
# install it separately, e.g. `pip install -e path/to/babyros`.
|
|
32
|
+
"babyros>=0.1.6",
|
|
33
|
+
"mcap>=1.0.0",
|
|
34
|
+
"loguru>=0.5.0",
|
|
35
|
+
"numpy>=1.26.0",
|
|
36
|
+
"pillow>=9.0.0",
|
|
37
|
+
"pyyaml>=6.0",
|
|
38
|
+
"telekinesis-datatypes>=0.2.3",
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
[project.optional-dependencies]
|
|
42
|
+
# FiftyOne is only needed by utils.visualize().
|
|
43
|
+
viz = [
|
|
44
|
+
"fiftyone==1.17.0",
|
|
45
|
+
]
|
|
46
|
+
dev = [
|
|
47
|
+
"ruff==0.15.8",
|
|
48
|
+
"pylint==4.0.5",
|
|
49
|
+
"pytest>=8.0.0",
|
|
50
|
+
"pytest-cov>=5.0.0",
|
|
51
|
+
]
|
|
52
|
+
|
|
53
|
+
[project.urls]
|
|
54
|
+
Homepage = "https://telekinesis.ai"
|
|
55
|
+
Documentation = "https://docs.telekinesis.ai"
|
|
56
|
+
"Telekinesis Examples Repository" = "https://github.com/telekinesis-ai/telekinesis-examples"
|
|
57
|
+
|
|
58
|
+
[tool.ruff]
|
|
59
|
+
line-length = 100
|
|
60
|
+
|
|
61
|
+
[tool.setuptools.packages.find]
|
|
62
|
+
where = [
|
|
63
|
+
"src",
|
|
64
|
+
]
|
|
65
|
+
namespaces = true
|
|
66
|
+
|
|
67
|
+
[tool.pytest.ini_options]
|
|
68
|
+
testpaths = ["tests"]
|
|
69
|
+
python_files = ["*_test.py"]
|
|
70
|
+
addopts = "-ra"
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"""Public API for the Telekinesis Data Engine.
|
|
2
|
+
|
|
3
|
+
Submodule imports are guarded because their third-party/runtime dependencies
|
|
4
|
+
(``mcap``, ``babyros``, ``telekinesis-datatypes``, Pillow) are optional: a
|
|
5
|
+
partial install should still expose whatever is usable. Any guarded import that
|
|
6
|
+
fails is logged at DEBUG so a genuine error (a bad import, a missing dependency,
|
|
7
|
+
a syntax-level ``ImportError``) is diagnosable instead of silently resurfacing
|
|
8
|
+
later as a misleading ``cannot import name '...'``. ``__all__`` lists only the
|
|
9
|
+
names that actually imported, so ``from telekinesis.dataengine import *`` never
|
|
10
|
+
raises for an unbound name.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from loguru import logger as _log
|
|
14
|
+
|
|
15
|
+
__all__: list[str] = []
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
from telekinesis.dataengine.mcap.logger import MCAPLogger
|
|
19
|
+
except ImportError as e:
|
|
20
|
+
_log.debug(f"MCAPLogger unavailable (optional deps missing?): {e}")
|
|
21
|
+
else:
|
|
22
|
+
__all__.append("MCAPLogger")
|
|
23
|
+
|
|
24
|
+
try:
|
|
25
|
+
from telekinesis.dataengine.detection.logger import (
|
|
26
|
+
DetectionLogger,
|
|
27
|
+
YoloDetectionLogger,
|
|
28
|
+
RfDetrDetectionLogger,
|
|
29
|
+
)
|
|
30
|
+
except ImportError as e:
|
|
31
|
+
_log.debug(f"detection loggers unavailable (optional deps missing?): {e}")
|
|
32
|
+
else:
|
|
33
|
+
__all__ += ["DetectionLogger", "YoloDetectionLogger", "RfDetrDetectionLogger"]
|
|
34
|
+
|
|
35
|
+
try:
|
|
36
|
+
from telekinesis.dataengine.detection.node import (
|
|
37
|
+
DetectionLoggerPublisher,
|
|
38
|
+
DetectionLoggerSubscriber,
|
|
39
|
+
)
|
|
40
|
+
except ImportError as e:
|
|
41
|
+
_log.debug(f"detection pub/sub nodes unavailable (optional deps missing?): {e}")
|
|
42
|
+
else:
|
|
43
|
+
__all__ += ["DetectionLoggerPublisher", "DetectionLoggerSubscriber"]
|