SatVision 0.0.1__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 (85) hide show
  1. satvision-0.0.1/.github/actions/setup/action.yml +30 -0
  2. satvision-0.0.1/.github/workflows/docs-build.yml +23 -0
  3. satvision-0.0.1/.github/workflows/docs-deploy-main.yml +35 -0
  4. satvision-0.0.1/.github/workflows/docs-deploy.yml +43 -0
  5. satvision-0.0.1/.github/workflows/pypi-publish.yml +44 -0
  6. satvision-0.0.1/.github/workflows/static-checks.yml +23 -0
  7. satvision-0.0.1/.gitignore +224 -0
  8. satvision-0.0.1/AGENTS.md +21 -0
  9. satvision-0.0.1/CONTRIBUTING.md +50 -0
  10. satvision-0.0.1/LICENSE.md +25 -0
  11. satvision-0.0.1/NOTES.md +7 -0
  12. satvision-0.0.1/PKG-INFO +124 -0
  13. satvision-0.0.1/README.md +92 -0
  14. satvision-0.0.1/RELEASES.md +39 -0
  15. satvision-0.0.1/dev/licenseheader_swissarmedforces.tmpl +2 -0
  16. satvision-0.0.1/docs/configuration.md +14 -0
  17. satvision-0.0.1/docs/index.md +21 -0
  18. satvision-0.0.1/justfile +90 -0
  19. satvision-0.0.1/mkdocs.yml +25 -0
  20. satvision-0.0.1/pyproject.toml +96 -0
  21. satvision-0.0.1/scripts/coffeepot.jpg +0 -0
  22. satvision-0.0.1/scripts/predict_resnet_grpc.py +101 -0
  23. satvision-0.0.1/scripts/predict_resnet_mixedprecision.py +61 -0
  24. satvision-0.0.1/server/docker-compose.yml +50 -0
  25. satvision-0.0.1/server/generate_models.py +65 -0
  26. satvision-0.0.1/server/grafana/provisioning/dashboards/dashboard.yml +16 -0
  27. satvision-0.0.1/server/grafana/provisioning/dashboards/triton-dashboard.json +1072 -0
  28. satvision-0.0.1/server/grafana/provisioning/datasources/prometheus.yml +13 -0
  29. satvision-0.0.1/server/model_repository/resnet152_onnx/config.pbtxt +18 -0
  30. satvision-0.0.1/server/model_repository/resnet152_trt/config.pbtxt +18 -0
  31. satvision-0.0.1/server/prometheus.yml +12 -0
  32. satvision-0.0.1/setup.cfg +4 -0
  33. satvision-0.0.1/src/SatVision.egg-info/PKG-INFO +124 -0
  34. satvision-0.0.1/src/SatVision.egg-info/SOURCES.txt +83 -0
  35. satvision-0.0.1/src/SatVision.egg-info/dependency_links.txt +1 -0
  36. satvision-0.0.1/src/SatVision.egg-info/requires.txt +27 -0
  37. satvision-0.0.1/src/SatVision.egg-info/top_level.txt +1 -0
  38. satvision-0.0.1/src/py.typed +0 -0
  39. satvision-0.0.1/src/satvis/__init__.py +10 -0
  40. satvision-0.0.1/src/satvis/_checkpointing/state.py +4 -0
  41. satvision-0.0.1/src/satvis/_checkpointing/weights.py +100 -0
  42. satvision-0.0.1/src/satvis/_commands.py +29 -0
  43. satvision-0.0.1/src/satvis/_data/classification_dataset.py +320 -0
  44. satvision-0.0.1/src/satvis/_data/pyarrow_schemas.py +36 -0
  45. satvision-0.0.1/src/satvis/_decorators.py +32 -0
  46. satvision-0.0.1/src/satvis/_dependency.py +10 -0
  47. satvision-0.0.1/src/satvis/_distributed_helpers.py +23 -0
  48. satvision-0.0.1/src/satvis/_env.py +95 -0
  49. satvision-0.0.1/src/satvis/_file_helpers.py +35 -0
  50. satvision-0.0.1/src/satvis/_models/classification/_dummy_model/config.py +70 -0
  51. satvision-0.0.1/src/satvis/_models/classification/_dummy_model/inference_model.py +99 -0
  52. satvision-0.0.1/src/satvis/_models/classification/_dummy_model/train_model.py +20 -0
  53. satvision-0.0.1/src/satvis/_models/classification/_dummy_model/transform.py +20 -0
  54. satvision-0.0.1/src/satvis/_models/classification/classification_inference_model.py +376 -0
  55. satvision-0.0.1/src/satvis/_models/classification/resnet/assets/imagenet_classes.json +1002 -0
  56. satvision-0.0.1/src/satvis/_models/classification/resnet/config.py +128 -0
  57. satvision-0.0.1/src/satvis/_models/classification/resnet/inference_model.py +168 -0
  58. satvision-0.0.1/src/satvis/_models/classification/resnet/transform.py +21 -0
  59. satvision-0.0.1/src/satvis/_models/embedding/_dummy_model/config.py +32 -0
  60. satvision-0.0.1/src/satvis/_models/embedding/_dummy_model/inference_model.py +108 -0
  61. satvision-0.0.1/src/satvis/_models/embedding/_dummy_model/transform.py +18 -0
  62. satvision-0.0.1/src/satvis/_models/embedding/embedding_inference_model.py +196 -0
  63. satvision-0.0.1/src/satvis/_models/embedding/siglip2/config.py +60 -0
  64. satvision-0.0.1/src/satvis/_models/embedding/siglip2/inference_model.py +73 -0
  65. satvision-0.0.1/src/satvis/_models/embedding/siglip2/transform.py +24 -0
  66. satvision-0.0.1/src/satvis/_models/export_helpers.py +141 -0
  67. satvision-0.0.1/src/satvis/_models/inference_helpers.py +165 -0
  68. satvision-0.0.1/src/satvis/_models/inference_model.py +361 -0
  69. satvision-0.0.1/src/satvis/_models/model_helpers.py +15 -0
  70. satvision-0.0.1/src/satvis/_models/registry.py +65 -0
  71. satvision-0.0.1/src/satvis/_models/train_model.py +43 -0
  72. satvision-0.0.1/src/satvis/_num_constants.py +6 -0
  73. satvision-0.0.1/src/satvis/_pydantic.py +23 -0
  74. satvision-0.0.1/src/satvis/_torchamp_helpers.py +33 -0
  75. satvision-0.0.1/src/satvis/_training/trainer.py +6 -0
  76. satvision-0.0.1/src/satvis/_transforms/transform_base.py +31 -0
  77. satvision-0.0.1/src/satvis/_transforms/val_transform.py +58 -0
  78. satvision-0.0.1/src/satvis/_types.py +71 -0
  79. satvision-0.0.1/tests/_data/test_classification_imagenet_dataset.py +138 -0
  80. satvision-0.0.1/tests/_models/classification/test_classification__dummy_model.py +33 -0
  81. satvision-0.0.1/tests/_models/classification/test_classification_resnet.py +137 -0
  82. satvision-0.0.1/tests/conftest.py +47 -0
  83. satvision-0.0.1/tests/test__decorators.py +98 -0
  84. satvision-0.0.1/tests/test__env.py +159 -0
  85. satvision-0.0.1/uv.lock +5066 -0
@@ -0,0 +1,30 @@
1
+ ##
2
+ ## SPDX-License-Identifier: MIT
3
+ ## Copyright (c) 2025–2026 Oblt Lionel Peer, Swiss Armed Forces
4
+ ##
5
+ name: Setup environment
6
+ description: Install uv, just, project dependencies, and add venv to PATH
7
+
8
+ inputs:
9
+ install-cmd:
10
+ description: just recipe to run for dependency installation
11
+ required: true
12
+
13
+ runs:
14
+ using: composite
15
+ steps:
16
+ - name: Set up uv
17
+ uses: astral-sh/setup-uv@v7
18
+ with:
19
+ cache-local-path: /root/.cache/uv
20
+
21
+ - name: Set up just
22
+ uses: extractions/setup-just@v3
23
+
24
+ - name: Install dependencies
25
+ run: just ${{ inputs.install-cmd }}
26
+ shell: bash
27
+
28
+ - name: Add venv to PATH
29
+ run: echo "$GITHUB_WORKSPACE/.venv/bin" >> $GITHUB_PATH
30
+ shell: bash
@@ -0,0 +1,23 @@
1
+ ##
2
+ ## SPDX-License-Identifier: MIT
3
+ ## Copyright (c) 2025–2026 Oblt Lionel Peer, Swiss Armed Forces
4
+ ##
5
+ name: docs-check
6
+
7
+ on:
8
+ pull_request:
9
+
10
+ jobs:
11
+ docs-check:
12
+ runs-on: self-hosted
13
+
14
+ steps:
15
+ - uses: actions/checkout@v6
16
+
17
+ - name: Setup environment
18
+ uses: ./.github/actions/setup
19
+ with:
20
+ install-cmd: install-dev
21
+
22
+ - name: Check docs build
23
+ run: just build-docs
@@ -0,0 +1,35 @@
1
+ ##
2
+ ## SPDX-License-Identifier: MIT
3
+ ## Copyright (c) 2025–2026 Oblt Lionel Peer, Swiss Armed Forces
4
+ ##
5
+ name: docs-deploy-main
6
+
7
+ on:
8
+ push:
9
+ branches:
10
+ - main
11
+ workflow_dispatch:
12
+
13
+ permissions:
14
+ contents: write
15
+
16
+ jobs:
17
+ docs-deploy-main:
18
+ runs-on: self-hosted
19
+ steps:
20
+ - uses: actions/checkout@v6
21
+ with:
22
+ fetch-depth: 0
23
+
24
+ - name: Setup environment
25
+ uses: ./.github/actions/setup
26
+ with:
27
+ install-cmd: install-dev
28
+
29
+ - name: Configure git
30
+ run: |
31
+ git config user.name "github-actions[bot]"
32
+ git config user.email "github-actions[bot]@users.noreply.github.com"
33
+
34
+ - name: Deploy main branch docs
35
+ run: just deploy-docs-main
@@ -0,0 +1,43 @@
1
+ ##
2
+ ## SPDX-License-Identifier: MIT
3
+ ## Copyright (c) 2025–2026 Oblt Lionel Peer, Swiss Armed Forces
4
+ ##
5
+ name: docs-deploy
6
+
7
+ on:
8
+ release:
9
+ types: [published]
10
+ workflow_dispatch:
11
+
12
+ permissions:
13
+ contents: write
14
+
15
+ jobs:
16
+ docs-deploy:
17
+ runs-on: self-hosted
18
+ steps:
19
+ - uses: actions/checkout@v6
20
+ with:
21
+ fetch-depth: 0
22
+
23
+ - name: Setup environment
24
+ uses: ./.github/actions/setup
25
+ with:
26
+ install-cmd: install-dev
27
+
28
+ - name: Configure git
29
+ run: |
30
+ git config user.name "github-actions[bot]"
31
+ git config user.email "github-actions[bot]@users.noreply.github.com"
32
+
33
+ - name: Check version matches tag
34
+ run: |
35
+ TAG_VERSION=${GITHUB_REF_NAME#v}
36
+ PKG_VERSION=$(python -c "from satvis import __version__; print(__version__)")
37
+ if [ "$TAG_VERSION" != "$PKG_VERSION" ]; then
38
+ echo "Tag version ($TAG_VERSION) does not match package version ($PKG_VERSION)"
39
+ exit 1
40
+ fi
41
+
42
+ - name: Deploy versioned docs
43
+ run: just deploy-docs ${GITHUB_REF_NAME#v} latest
@@ -0,0 +1,44 @@
1
+ ##
2
+ ## SPDX-License-Identifier: MIT
3
+ ## Copyright (c) 2025–2026 Oblt Lionel Peer, Swiss Armed Forces
4
+ ##
5
+ name: pypi-publish
6
+
7
+ on:
8
+ release:
9
+ types: [published]
10
+ workflow_dispatch:
11
+
12
+ permissions:
13
+ id-token: write # required for OIDC trusted publishing
14
+ contents: read # required for actions/checkout
15
+
16
+ jobs:
17
+ pypi-publish:
18
+ runs-on: self-hosted
19
+ environment: pypi # ties to the trusted publisher config on PyPI
20
+ steps:
21
+ - uses: actions/checkout@v6
22
+ with:
23
+ fetch-depth: 0
24
+
25
+ - name: Setup environment
26
+ uses: ./.github/actions/setup
27
+ with:
28
+ install-cmd: install-dev
29
+
30
+ - name: Check version matches tag
31
+ run: |
32
+ TAG_VERSION=${GITHUB_REF_NAME#v}
33
+ PKG_VERSION=$(python -c "from satvis import __version__; print(__version__)")
34
+ if [ "$TAG_VERSION" != "$PKG_VERSION" ]; then
35
+ echo "Tag version ($TAG_VERSION) does not match package version ($PKG_VERSION)"
36
+ exit 1
37
+ fi
38
+
39
+ - name: Build
40
+ run: uv build
41
+
42
+ - name: Publish to PyPI
43
+ run: uv publish
44
+ # uv publish auto-detects OIDC in GitHub Actions — no token needed
@@ -0,0 +1,23 @@
1
+ ##
2
+ ## SPDX-License-Identifier: MIT
3
+ ## Copyright (c) 2025–2026 Oblt Lionel Peer, Swiss Armed Forces
4
+ ##
5
+ name: format-check
6
+
7
+ on:
8
+ pull_request:
9
+
10
+ jobs:
11
+ format-check:
12
+ runs-on: self-hosted
13
+
14
+ steps:
15
+ - uses: actions/checkout@v6
16
+
17
+ - name: Setup environment
18
+ uses: ./.github/actions/setup
19
+ with:
20
+ install-cmd: install-dev
21
+
22
+ - name: Run format check
23
+ run: just format-check
@@ -0,0 +1,224 @@
1
+ # Triton model files
2
+ *.plan
3
+
4
+ # ONNX model files
5
+ *.onnx
6
+
7
+ # Byte-compiled / optimized / DLL files
8
+ __pycache__/
9
+ *.py[codz]
10
+ *$py.class
11
+
12
+ # C extensions
13
+ *.so
14
+
15
+ # Distribution / packaging
16
+ .Python
17
+ build/
18
+ develop-eggs/
19
+ dist/
20
+ downloads/
21
+ eggs/
22
+ .eggs/
23
+ lib/
24
+ lib64/
25
+ parts/
26
+ sdist/
27
+ var/
28
+ wheels/
29
+ share/python-wheels/
30
+ *.egg-info/
31
+ .installed.cfg
32
+ *.egg
33
+ MANIFEST
34
+
35
+ # PyInstaller
36
+ # Usually these files are written by a python script from a template
37
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
38
+ *.manifest
39
+ *.spec
40
+
41
+ # Installer logs
42
+ pip-log.txt
43
+ pip-delete-this-directory.txt
44
+
45
+ # Unit test / coverage reports
46
+ htmlcov/
47
+ .tox/
48
+ .nox/
49
+ .coverage
50
+ .coverage.*
51
+ .cache
52
+ nosetests.xml
53
+ coverage.xml
54
+ *.cover
55
+ *.py.cover
56
+ .hypothesis/
57
+ .pytest_cache/
58
+ cover/
59
+
60
+ # Translations
61
+ *.mo
62
+ *.pot
63
+
64
+ # Django stuff:
65
+ *.log
66
+ local_settings.py
67
+ db.sqlite3
68
+ db.sqlite3-journal
69
+
70
+ # Flask stuff:
71
+ instance/
72
+ .webassets-cache
73
+
74
+ # Scrapy stuff:
75
+ .scrapy
76
+
77
+ # Sphinx documentation
78
+ docs/_build/
79
+
80
+ # PyBuilder
81
+ .pybuilder/
82
+ target/
83
+
84
+ # Jupyter Notebook
85
+ .ipynb_checkpoints
86
+
87
+ # IPython
88
+ profile_default/
89
+ ipython_config.py
90
+
91
+ # pyenv
92
+ # For a library or package, you might want to ignore these files since the code is
93
+ # intended to run in multiple environments; otherwise, check them in:
94
+ # .python-version
95
+
96
+ # pipenv
97
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
98
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
99
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
100
+ # install all needed dependencies.
101
+ # Pipfile.lock
102
+
103
+ # UV
104
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
105
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
106
+ # commonly ignored for libraries.
107
+ # uv.lock
108
+
109
+ # poetry
110
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
111
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
112
+ # commonly ignored for libraries.
113
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
114
+ # poetry.lock
115
+ # poetry.toml
116
+
117
+ # pdm
118
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
119
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
120
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
121
+ # pdm.lock
122
+ # pdm.toml
123
+ .pdm-python
124
+ .pdm-build/
125
+
126
+ # pixi
127
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
128
+ # pixi.lock
129
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
130
+ # in the .venv directory. It is recommended not to include this directory in version control.
131
+ .pixi
132
+
133
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
134
+ __pypackages__/
135
+
136
+ # Celery stuff
137
+ celerybeat-schedule
138
+ celerybeat.pid
139
+
140
+ # Redis
141
+ *.rdb
142
+ *.aof
143
+ *.pid
144
+
145
+ # RabbitMQ
146
+ mnesia/
147
+ rabbitmq/
148
+ rabbitmq-data/
149
+
150
+ # ActiveMQ
151
+ activemq-data/
152
+
153
+ # SageMath parsed files
154
+ *.sage.py
155
+
156
+ # Environments
157
+ .env
158
+ .envrc
159
+ .venv
160
+ env/
161
+ venv/
162
+ ENV/
163
+ env.bak/
164
+ venv.bak/
165
+
166
+ # Spyder project settings
167
+ .spyderproject
168
+ .spyproject
169
+
170
+ # Rope project settings
171
+ .ropeproject
172
+
173
+ # mkdocs documentation
174
+ /site
175
+
176
+ # mypy
177
+ .mypy_cache/
178
+ .dmypy.json
179
+ dmypy.json
180
+
181
+ # Pyre type checker
182
+ .pyre/
183
+
184
+ # pytype static type analyzer
185
+ .pytype/
186
+
187
+ # Cython debug symbols
188
+ cython_debug/
189
+
190
+ # PyCharm
191
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
192
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
193
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
194
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
195
+ # .idea/
196
+
197
+ # Abstra
198
+ # Abstra is an AI-powered process automation framework.
199
+ # Ignore directories containing user credentials, local state, and settings.
200
+ # Learn more at https://abstra.io/docs
201
+ .abstra/
202
+
203
+ # Visual Studio Code
204
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
205
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
206
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
207
+ # you could uncomment the following to ignore the entire vscode folder
208
+ .vscode/
209
+
210
+ # Ruff stuff:
211
+ .ruff_cache/
212
+
213
+ # PyPI configuration file
214
+ .pypirc
215
+
216
+ # Marimo
217
+ marimo/_static/
218
+ marimo/_lsp/
219
+ __marimo__/
220
+
221
+ # Streamlit
222
+ .streamlit/secrets.toml# pixi environments
223
+ .pixi/*
224
+ !.pixi/config.toml
@@ -0,0 +1,21 @@
1
+ <!--
2
+ SPDX-License-Identifier: MIT
3
+ Copyright (c) 2025–2026 Oblt Lionel Peer, Swiss Armed Forces
4
+ -->
5
+ ## General Guidelines
6
+ - Our code is fully typed and typechecked with mypy. Type ignores should be avoided at all cost.
7
+ - Never use positional arguments, unless a function only takes a single argument.
8
+ - Never try to expose something to the top-level `__init__` file. Public interfaces are holy and should only be created after careful consideration.
9
+ - Import classes directly instead of calling them via their module, potentially renaming them if necessary.
10
+ - For functions, import the modules, not the functions directly and also not potential subpackages. Also rename modules if necessary.
11
+
12
+ ## Unit Testing
13
+ - Unit testing is done with pytest.
14
+ - Every function of the code should be covered with a minmal set of unit tests. At this point where things are still bound to change a lot, we should not go crazy and only check basic functionality. Otherwise development will be delayed.
15
+ - Unit tests covering methods of a single class (or a specific) should be grouped inside a class.
16
+ - Singular functions should generally not be grouped in classes.
17
+ - Follow common pytest best practices. This means make use of the builtin fixtures such as the tempfile.
18
+ - Use double underscores for additional test descriptions, i.e. `test_function_name__additional_description`.
19
+ - Avoid mocking. Operations that use I/O should be implemented using temporary files and directories. Use pytest's integrated fixture.
20
+ - When changing something in unit tests, never simultaneously change something in the corresponding code.
21
+ - Avoid comments for the sake of comments in tests. Leave them away if not bringing any benefit.
@@ -0,0 +1,50 @@
1
+ <!--
2
+ SPDX-License-Identifier: MIT
3
+ Copyright (c) 2025–2026 Oblt Lionel Peer, Swiss Armed Forces
4
+ -->
5
+
6
+ # Contributing
7
+
8
+ ## Getting Started
9
+
10
+ ### Installing Just
11
+
12
+ This project uses [Just](https://github.com/casey/just) as a command runner.
13
+
14
+ **Installation:**
15
+ Follow the [Just installation guide](https://github.com/casey/just?tab=readme-ov-file#installation).
16
+
17
+ **Shell autocomplete:**
18
+ For autocompletion, follow the [Just shell completion guide](https://github.com/casey/just?tab=readme-ov-file#shell-completion-scripts).
19
+
20
+ ### Installing `uv` Package Manager
21
+
22
+ This project uses the `uv` package manager, which can be installed via `just`.
23
+
24
+ ```bash
25
+ just install-uv
26
+ ```
27
+
28
+ ### Installing Dependencies
29
+
30
+ Run the following command to install all dependencies:
31
+
32
+ ```bash
33
+ just install
34
+ ```
35
+
36
+ This will install dependencies using Python 3.13 with all extras in a new virtual
37
+ environment. To activate the virtual environment, run:
38
+
39
+ ```bash
40
+ source .venv/bin/activate
41
+ ```
42
+
43
+ ## Development Workflow
44
+
45
+ Run `just --list` to see all available commands, including:
46
+ - `just test` - Run tests
47
+ - `just format` - Format code and apply license headers
48
+ - `just lint` - Run linter
49
+ - `just typecheck` - Run type checker
50
+ - `just all-checks` - Run all checks (lint, typecheck, tests)
@@ -0,0 +1,25 @@
1
+ <!--
2
+ SPDX-License-Identifier: MIT
3
+ Copyright (c) 2025–2026 Oblt Lionel Peer, Swiss Armed Forces
4
+ -->
5
+ MIT License
6
+
7
+ Copyright (c) 2025 Oblt Lionel Peer, Swiss Armed Forces
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ SOFTWARE.
@@ -0,0 +1,7 @@
1
+ <!--
2
+ SPDX-License-Identifier: MIT
3
+ Copyright (c) 2025–2026 Oblt Lionel Peer, Swiss Armed Forces
4
+ -->
5
+ ## Interesting Projects
6
+ - modality translation: from SAR to RGB and vice versa
7
+ - super resolution
@@ -0,0 +1,124 @@
1
+ Metadata-Version: 2.4
2
+ Name: SatVision
3
+ Version: 0.0.1
4
+ Summary: Opinionated Inference Framework for Remote Sensing Deep Learning Applications.
5
+ Author: Oblt Lionel Peer, Swiss Armed Forces
6
+ Requires-Python: >=3.10
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE.md
9
+ Requires-Dist: jaxtyping>=0.3.3
10
+ Requires-Dist: beartype>=0.22.2
11
+ Requires-Dist: torch>=2.2.0
12
+ Requires-Dist: lightning-utilities>=0.15.2
13
+ Requires-Dist: pydantic>=2.12.4
14
+ Requires-Dist: torchvision>=0.24.1
15
+ Requires-Dist: einops>=0.8.1
16
+ Requires-Dist: polars>=1.37.0
17
+ Requires-Dist: pyarrow>=22.0.0
18
+ Requires-Dist: scipy>=1.15.3
19
+ Requires-Dist: tqdm>=4.67.1
20
+ Provides-Extra: notebook
21
+ Requires-Dist: jupyter>=1.1.1; extra == "notebook"
22
+ Provides-Extra: onnx
23
+ Requires-Dist: onnx>=1.19.1; extra == "onnx"
24
+ Requires-Dist: onnxscript>=0.5.3; extra == "onnx"
25
+ Provides-Extra: tensorrt-cu12
26
+ Requires-Dist: tensorrt-cu12==10.9.0.34; extra == "tensorrt-cu12"
27
+ Provides-Extra: transformers
28
+ Requires-Dist: transformers>=4.57.1; extra == "transformers"
29
+ Provides-Extra: triton-client
30
+ Requires-Dist: tritonclient[all]<=2.60.0; extra == "triton-client"
31
+ Dynamic: license-file
32
+
33
+ <!--
34
+ SPDX-License-Identifier: MIT
35
+ Copyright (c) 2025–2026 Oblt Lionel Peer, Swiss Armed Forces
36
+ -->
37
+ # SatVision
38
+ [![docs-build](https://github.com/liopeer/SatVis/actions/workflows/docs-build.yml/badge.svg)](https://github.com/liopeer/SatVis/actions/workflows/docs-build.yml)
39
+ [![docs-deploy](https://github.com/liopeer/SatVis/actions/workflows/docs-deploy.yml/badge.svg)](https://github.com/liopeer/SatVis/actions/workflows/docs-deploy.yml)
40
+ [![docs-deploy-main](https://github.com/liopeer/SatVis/actions/workflows/docs-deploy-main.yml/badge.svg)](https://github.com/liopeer/SatVis/actions/workflows/docs-deploy-main.yml)
41
+ [![pypi-publish](https://github.com/liopeer/SatVis/actions/workflows/pypi-publish.yml/badge.svg)](https://github.com/liopeer/SatVis/actions/workflows/pypi-publish.yml)
42
+ [![static-checks](https://github.com/liopeer/SatVis/actions/workflows/static-checks.yml/badge.svg)](https://github.com/liopeer/SatVis/actions/workflows/static-checks.yml)
43
+
44
+ An opinionated framework for deploying computer vison models on remote sensing imagery.
45
+
46
+ ## Getting Started
47
+ ### Install `uv`
48
+ ```bash
49
+ just install-uv
50
+ ```
51
+
52
+ ### Install Core Dependencies
53
+ ```bash
54
+ just install
55
+ ```
56
+
57
+ ### Install Development Dependencies
58
+ ```bash
59
+ just install-all
60
+ ```
61
+
62
+ ## Triton Server
63
+ Requirements:
64
+ - NVIDIA Driver >= 570
65
+ - Docker CUDA Toolkit
66
+
67
+ Installation:
68
+ ```bash
69
+ just install
70
+ ```
71
+ which will install `tensorrt==10.9.0.34`. [This is the version that is compatible](https://docs.nvidia.com/deeplearning/frameworks/support-matrix/index.html#framework-matrix-2025) with
72
+ Nvidia Triton Server `nvcr.io/nvidia/tritonserver:25.03-py3` and driver>=570.
73
+
74
+ Creating the models for Triton Inference Server (to be executed on the actual server with GPU access):
75
+ ```bash
76
+ python server/generate_models.py
77
+ ```
78
+
79
+ Running the server:
80
+ ```bash
81
+ docker compose -f server/docker-compose.yml up -d
82
+ ```
83
+
84
+ ## Sending Inference Requests with ResNet
85
+ ```bash
86
+ python scripts/predict.py
87
+ ```
88
+
89
+ ## RoadMap
90
+ ### Q4 2025
91
+ - [ ] Core PyTorch Framework with Inference and ONNX Export:
92
+ - [x] Classification
93
+ - [ ] Image Embeddings
94
+ - [ ] Language Embeddings
95
+ - [ ] TensorRT Export
96
+ - [x] FP32/FP16 export
97
+ - [ ] verification
98
+ - [ ] Model Serving
99
+ - [x] Nvidia Triton server with kserver API
100
+ - [ ] Model Zoo for classification and embeddings
101
+ - [ ] Documentation of REST API
102
+ - [ ] Basic CI/CD
103
+ - [ ] Inference server to container registry
104
+ - [ ] Unit tests with pytest and coverage
105
+
106
+ ### Q1 2026
107
+ - [ ] Model Training
108
+ - [ ] Panoptic Segmentation
109
+ - [ ] CLIP-style training for image and language embeddings
110
+ - [ ] Multi-Spectral / Hyperspectral support
111
+ - [ ] I/O for various formats (GeoTIFF, HDF5, NetCDF)
112
+ - [ ] Data Augmentation for multi-spectral data
113
+ - [ ] Models
114
+ - [ ] Documentation for Python API
115
+
116
+ ### Q2 2026
117
+ - [ ] Model Quantization
118
+ - [ ] Int8 PTQ (Post Training Quantization) with calibration
119
+
120
+ ### Small Projects
121
+ - PostGIS sampler for PyTorch DataLoader
122
+
123
+ ## Maintainers
124
+ - Oblt Lionel Peer (lionel.peer@gmail.com)