imaging-server-kit 0.1.2__tar.gz → 0.2.0__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.
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/.gitignore +8 -1
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/PKG-INFO +35 -12
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/README.md +19 -4
- imaging_server_kit-0.2.0/docs/_static/cellpose_example.mp4 +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_toc.yml +2 -3
- imaging_server_kit-0.2.0/docs/assets/threshold_qubalab.png +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/index.md +11 -11
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/00_getting_started.md +21 -15
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/01_algorithm.ipynb +4 -28
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/02_samples.ipynb +1 -1
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/03_metadata.ipynb +1 -1
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/04_multialgo.ipynb +1 -1
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/05_streams.ipynb +6 -4
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/06_tiled.ipynb +7 -16
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/07_server.md +8 -9
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/sections/08_python.ipynb +57 -21
- imaging_server_kit-0.1.2/docs/sections/10_types.md → imaging_server_kit-0.2.0/docs/sections/09_layers.md +1 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/pyproject.toml +20 -18
- imaging_server_kit-0.2.0/src/imaging_server_kit/__init__.py +85 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/_version.py +24 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/cli.py +107 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/core/__init__.py +5 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/core/_etc.py +12 -49
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/core/algorithm.py +193 -120
- imaging_server_kit-0.2.0/src/imaging_server_kit/core/domain.py +140 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/core/errors.py +8 -20
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/core/multialgo.py +33 -39
- imaging_server_kit-0.2.0/src/imaging_server_kit/core/runner.py +264 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/core/stack.py +323 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/core/static/css/index.css +14 -3
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/core/static/css/info.css +0 -50
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/core/templates/index.html +6 -1
- imaging_server_kit-0.2.0/src/imaging_server_kit/core/tiling.py +352 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/demo/__init__.py +35 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/demo/examples.py +103 -78
- imaging_server_kit-0.2.0/src/imaging_server_kit/demo/tools.py +701 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/gui/__init__.py +2 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/gui/common/__init__.py +3 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/gui/common/parameter_panel.py +157 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/gui/common/runner_widget.py +167 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/gui/common/task_manager.py +45 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/gui/napari_serverkit/__init__.py +82 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/gui/napari_serverkit/extra_widgets.py +19 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/gui/napari_serverkit/napari.yaml +31 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/gui/napari_serverkit/napari_http_widget.py +8 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/gui/napari_serverkit/napari_stack.py +326 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/gui/napari_serverkit/napari_widget.py +267 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/gui/qupath_serverkit/__init__.py +76 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/gui/qupath_serverkit/qupath_bridge.py +475 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/gui/qupath_serverkit/qupath_http_widget.py +8 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/gui/qupath_serverkit/qupath_widget.py +315 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/merge/__init__.py +1 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/merge/_image_merger.py +178 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/merge/_mask_merger.py +447 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/merge/_object_merger.py +80 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/merge/common.py +16 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/merge/layer_merger.py +109 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/merge/merger.py +32 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/remote/__init__.py +34 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/remote/_boxes_serializer.py +46 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/remote/_image_serializer.py +23 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/remote/_mask_serializer.py +43 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/remote/_null_serializer.py +19 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/remote/_paths_serializer.py +32 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/remote/_points_serializer.py +65 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/remote/_tracks_serializer.py +31 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/remote/_vectors_serializer.py +50 -0
- {imaging_server_kit-0.1.2/src/imaging_server_kit/core → imaging_server_kit-0.2.0/src/imaging_server_kit/remote}/app.py +96 -159
- {imaging_server_kit-0.1.2/src/imaging_server_kit/core → imaging_server_kit-0.2.0/src/imaging_server_kit/remote}/client.py +60 -92
- {imaging_server_kit-0.1.2/src/imaging_server_kit/core → imaging_server_kit-0.2.0/src/imaging_server_kit/remote}/encoding.py +0 -15
- imaging_server_kit-0.2.0/src/imaging_server_kit/remote/layer_serializer.py +81 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/remote/meta_serializer.py +67 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/remote/serializer.py +33 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/remote/stack_serializer.py +25 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/remote/tile_serializer.py +20 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/types/__init__.py +18 -4
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/_bool.py +36 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/_boxes.py +131 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/_choice.py +54 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/_float.py +46 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/_image.py +205 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/_integer.py +46 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/_mask.py +362 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/_notification.py +47 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/_null.py +32 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/_paths.py +64 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/_points.py +133 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/_progress.py +62 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/_string.py +34 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/_tracks.py +54 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/_vectors.py +141 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/common.py +24 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/types/layer.py +319 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/validation/__init__.py +0 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/validation/_boxes_validator.py +30 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/validation/_image_validator.py +33 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/validation/_mask_validator.py +28 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/validation/_points_validator.py +23 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/validation/_vectors_validator.py +21 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/validation/layer_validator.py +34 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit/validation/validator.py +22 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit.egg-info/PKG-INFO +35 -12
- imaging_server_kit-0.2.0/src/imaging_server_kit.egg-info/SOURCES.txt +145 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit.egg-info/entry_points.txt +5 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit.egg-info/requires.txt +15 -4
- imaging_server_kit-0.2.0/src/imaging_server_kit.egg-info/scm_file_list.json +140 -0
- imaging_server_kit-0.2.0/src/imaging_server_kit.egg-info/scm_version.json +8 -0
- {imaging_server_kit-0.1.2/tests → imaging_server_kit-0.2.0/tests/core}/test_basic.py +17 -8
- imaging_server_kit-0.2.0/tests/core/test_results.py +35 -0
- {imaging_server_kit-0.1.2/tests → imaging_server_kit-0.2.0/tests/core}/test_streaming.py +2 -2
- imaging_server_kit-0.2.0/tests/core/test_tiling.py +393 -0
- imaging_server_kit-0.2.0/tests/merge/test_merging.py +32 -0
- imaging_server_kit-0.2.0/tests/remote/test_app.py +138 -0
- imaging_server_kit-0.2.0/tests/remote/test_client_server.py +122 -0
- imaging_server_kit-0.1.2/.dockerignore +0 -2
- imaging_server_kit-0.1.2/Dockerfile +0 -15
- imaging_server_kit-0.1.2/Dockerfile-GPU +0 -14
- imaging_server_kit-0.1.2/build.sh +0 -6
- imaging_server_kit-0.1.2/docs/sections/09_docker.md +0 -57
- imaging_server_kit-0.1.2/src/imaging_server_kit/__init__.py +0 -165
- imaging_server_kit-0.1.2/src/imaging_server_kit/_version.py +0 -34
- imaging_server_kit-0.1.2/src/imaging_server_kit/cli.py +0 -65
- imaging_server_kit-0.1.2/src/imaging_server_kit/core/__init__.py +0 -14
- imaging_server_kit-0.1.2/src/imaging_server_kit/core/results.py +0 -261
- imaging_server_kit-0.1.2/src/imaging_server_kit/core/runner.py +0 -211
- imaging_server_kit-0.1.2/src/imaging_server_kit/core/serialization.py +0 -70
- imaging_server_kit-0.1.2/src/imaging_server_kit/core/tiling.py +0 -146
- imaging_server_kit-0.1.2/src/imaging_server_kit/demo/__init__.py +0 -15
- imaging_server_kit-0.1.2/src/imaging_server_kit/template/cookiecutter.json +0 -5
- imaging_server_kit-0.1.2/src/imaging_server_kit/template/serverkit-{{cookiecutter.name}}/.dockerignore +0 -1
- imaging_server_kit-0.1.2/src/imaging_server_kit/template/serverkit-{{cookiecutter.name}}/.gitignore +0 -26
- imaging_server_kit-0.1.2/src/imaging_server_kit/template/serverkit-{{cookiecutter.name}}/Dockerfile +0 -15
- imaging_server_kit-0.1.2/src/imaging_server_kit/template/serverkit-{{cookiecutter.name}}/README.md +0 -34
- imaging_server_kit-0.1.2/src/imaging_server_kit/template/serverkit-{{cookiecutter.name}}/docker-compose.yml +0 -6
- imaging_server_kit-0.1.2/src/imaging_server_kit/template/serverkit-{{cookiecutter.name}}/main.py +0 -41
- imaging_server_kit-0.1.2/src/imaging_server_kit/template/serverkit-{{cookiecutter.name}}/requirements.txt +0 -1
- imaging_server_kit-0.1.2/src/imaging_server_kit/types/_bool.py +0 -46
- imaging_server_kit-0.1.2/src/imaging_server_kit/types/_boxes.py +0 -185
- imaging_server_kit-0.1.2/src/imaging_server_kit/types/_choice.py +0 -61
- imaging_server_kit-0.1.2/src/imaging_server_kit/types/_float.py +0 -59
- imaging_server_kit-0.1.2/src/imaging_server_kit/types/_image.py +0 -135
- imaging_server_kit-0.1.2/src/imaging_server_kit/types/_integer.py +0 -60
- imaging_server_kit-0.1.2/src/imaging_server_kit/types/_mask.py +0 -287
- imaging_server_kit-0.1.2/src/imaging_server_kit/types/_notification.py +0 -57
- imaging_server_kit-0.1.2/src/imaging_server_kit/types/_null.py +0 -45
- imaging_server_kit-0.1.2/src/imaging_server_kit/types/_paths.py +0 -82
- imaging_server_kit-0.1.2/src/imaging_server_kit/types/_points.py +0 -202
- imaging_server_kit-0.1.2/src/imaging_server_kit/types/_string.py +0 -46
- imaging_server_kit-0.1.2/src/imaging_server_kit/types/_tracks.py +0 -73
- imaging_server_kit-0.1.2/src/imaging_server_kit/types/_vectors.py +0 -194
- imaging_server_kit-0.1.2/src/imaging_server_kit/types/common.py +0 -49
- imaging_server_kit-0.1.2/src/imaging_server_kit/types/data_layer.py +0 -120
- imaging_server_kit-0.1.2/src/imaging_server_kit.egg-info/SOURCES.txt +0 -106
- imaging_server_kit-0.1.2/src/imaging_server_kit.egg-info/entry_points.txt +0 -2
- imaging_server_kit-0.1.2/tests/sample_images/blobs.tif +0 -0
- imaging_server_kit-0.1.2/tests/test_results.py +0 -32
- imaging_server_kit-0.1.2/tests/test_tiling.py +0 -144
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/.gitattributes +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/.github/workflows/deploy.yml +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/.github/workflows/publish.yml +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/CITATION.cff +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/LICENSE +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/MANIFEST.in +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_config.yml +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_static/oripy_threshold.mp4 +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_static/progressive_threshold.mp4 +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_static/server_napari.mp4 +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_static/stardist_blobs.mp4 +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_static/tiles.mp4 +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_static/tiling2.mp4 +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/_static/yolo-stream.mp4 +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/assets/demo_napari_screenshot.png +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/assets/gaussian_result.png +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/assets/meta_sc.png +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/assets/samples_sc.png +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/assets/screenshot_napari_threshold.png +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/assets/screenshot_server.png +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/assets/server_running.png +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/assets/threshold_qupath.png +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/docs/logo.ico +0 -0
- /imaging_server_kit-0.1.2/docs/sections/11_examples.md → /imaging_server_kit-0.2.0/docs/sections/10_examples.md +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/examples/readme.md +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/setup.cfg +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/core/templates/info.html +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/demo/sample_images/blobs.tif +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit/demo/sample_images/tracks.tif +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit.egg-info/dependency_links.txt +0 -0
- {imaging_server_kit-0.1.2 → imaging_server_kit-0.2.0}/src/imaging_server_kit.egg-info/top_level.txt +0 -0
- {imaging_server_kit-0.1.2/tests → imaging_server_kit-0.2.0/tests/core}/test_multialgo.py +0 -0
- {imaging_server_kit-0.1.2/src/imaging_server_kit/template/serverkit-{{cookiecutter.name}}/samples → imaging_server_kit-0.2.0/tests/sample_images}/blobs.tif +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: imaging-server-kit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Convert image processing functions to GUIs, FastAPI servers, and more.
|
|
5
5
|
Author-email: Mallory Wittwer <mallory.wittwer@epfl.ch>
|
|
6
6
|
License: Copyright (c) 2024, EPFL
|
|
@@ -39,50 +39,57 @@ Classifier: License :: OSI Approved :: BSD License
|
|
|
39
39
|
Classifier: Operating System :: OS Independent
|
|
40
40
|
Classifier: Programming Language :: Python
|
|
41
41
|
Classifier: Programming Language :: Python :: 3
|
|
42
|
-
Classifier: Programming Language :: Python :: 3 :: Only
|
|
43
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
44
42
|
Classifier: Programming Language :: Python :: 3.10
|
|
45
43
|
Classifier: Programming Language :: Python :: 3.11
|
|
46
44
|
Classifier: Programming Language :: Python :: 3.12
|
|
45
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
47
46
|
Classifier: Topic :: Scientific/Engineering :: Image Processing
|
|
48
|
-
Requires-Python: >=3.
|
|
47
|
+
Requires-Python: >=3.10
|
|
49
48
|
Description-Content-Type: text/markdown
|
|
50
49
|
License-File: LICENSE
|
|
51
50
|
Requires-Dist: numpy
|
|
51
|
+
Requires-Dist: pandas
|
|
52
52
|
Requires-Dist: tifffile
|
|
53
53
|
Requires-Dist: tqdm
|
|
54
54
|
Requires-Dist: pydantic>=2.0
|
|
55
55
|
Requires-Dist: scikit-image[optional]
|
|
56
56
|
Requires-Dist: jinja2
|
|
57
57
|
Requires-Dist: PyYAML
|
|
58
|
-
Requires-Dist: cookiecutter
|
|
59
|
-
Requires-Dist: opencv-contrib-python-headless
|
|
60
58
|
Requires-Dist: imantics
|
|
61
59
|
Requires-Dist: geojson
|
|
62
60
|
Requires-Dist: fastapi
|
|
63
61
|
Requires-Dist: uvicorn[standard]
|
|
64
62
|
Requires-Dist: python-multipart
|
|
65
63
|
Requires-Dist: msgpack
|
|
66
|
-
Requires-Dist:
|
|
64
|
+
Requires-Dist: networkx
|
|
65
|
+
Provides-Extra: napari
|
|
66
|
+
Requires-Dist: qtpy; extra == "napari"
|
|
67
|
+
Requires-Dist: napari[all]>=0.4.16; extra == "napari"
|
|
68
|
+
Requires-Dist: napari-toolkit; extra == "napari"
|
|
69
|
+
Requires-Dist: opencv-contrib-python-headless; extra == "napari"
|
|
70
|
+
Provides-Extra: qupath
|
|
71
|
+
Requires-Dist: imaging-server-kit[napari]; extra == "qupath"
|
|
72
|
+
Requires-Dist: qubalab>=0.2.0; extra == "qupath"
|
|
67
73
|
Provides-Extra: docs
|
|
68
74
|
Requires-Dist: jupyter-book<2.0; extra == "docs"
|
|
69
75
|
Requires-Dist: jupytext; extra == "docs"
|
|
70
76
|
Provides-Extra: test
|
|
71
77
|
Requires-Dist: pytest; extra == "test"
|
|
78
|
+
Requires-Dist: coverage; extra == "test"
|
|
79
|
+
Requires-Dist: httpx; extra == "test"
|
|
72
80
|
Provides-Extra: all
|
|
73
|
-
Requires-Dist: imaging-server-kit[docs,test]; extra == "all"
|
|
81
|
+
Requires-Dist: imaging-server-kit[docs,napari,qupath,test]; extra == "all"
|
|
74
82
|
Dynamic: license-file
|
|
75
83
|
|
|
76
|
-

|
|
77
84
|
# 🪐 Imaging Server Kit
|
|
78
85
|
|
|
79
86
|
Turn Python-based image processing workflows into **algorithms** that gain extra functionalities.
|
|
80
87
|
|
|
81
|
-
- [**Turn your algorithms into web servers**](https://imaging-server-kit.github.io/imaging-server-kit/sections/07_server.html) and run computations from [
|
|
88
|
+
- [**Turn your algorithms into web servers**](https://imaging-server-kit.github.io/imaging-server-kit/sections/07_server.html) and run computations from [Napari](https://napari.org/stable/), [QuPath](https://qupath.github.io/), or [Python](https://imaging-server-kit.github.io/imaging-server-kit/sections/08_python.html) via HTTP requests.
|
|
82
89
|
|
|
83
|
-
https://github.com/user-attachments/assets/
|
|
90
|
+
https://github.com/user-attachments/assets/0be819ea-fcc1-48ee-8fae-7265e63a00d4
|
|
84
91
|
|
|
85
|
-
- [**Generate dock widgets**](https://imaging-server-kit.github.io/imaging-server-kit/sections/01_algorithm.html) to run your algorithms interactively in Napari.
|
|
92
|
+
- [**Generate dock widgets**](https://imaging-server-kit.github.io/imaging-server-kit/sections/01_algorithm.html) to run your algorithms interactively in Napari or QuPath.
|
|
86
93
|
|
|
87
94
|
https://github.com/user-attachments/assets/1ff572f7-f159-4f5a-afd4-7a157de3d9f8
|
|
88
95
|
|
|
@@ -94,6 +101,10 @@ https://github.com/user-attachments/assets/47c2f734-5683-49d9-8aea-388c3a2bc16d
|
|
|
94
101
|
|
|
95
102
|
https://github.com/user-attachments/assets/a3f69a9f-fb68-4580-a804-6c57d5807b9a
|
|
96
103
|
|
|
104
|
+
## Development status
|
|
105
|
+
|
|
106
|
+
The Imaging Server Kit is being actively developed and is iterating rapidly. It is likely that there will be **compatibility-breaking changes** in future versions.
|
|
107
|
+
|
|
97
108
|
## Installation
|
|
98
109
|
|
|
99
110
|
Install the `imaging-server-kit` package with `pip`:
|
|
@@ -110,6 +121,18 @@ cd imaging-server-kit
|
|
|
110
121
|
pip install -e .
|
|
111
122
|
```
|
|
112
123
|
|
|
124
|
+
To use the **Napari-related functionalities**, you additionally have to install [`napari`](https://github.com/napari/napari) and [`napari-toolkit`](https://github.com/MIC-DKFZ/napari_toolkit) which are not included by default. Install the package with:
|
|
125
|
+
|
|
126
|
+
```sh
|
|
127
|
+
pip install "imaging-server-kit[napari]"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
To use the **QuPath-related functionalities**, you additionally have to install [`qubalab>=0.2.0`](https://pypi.org/project/qubalab/#history), which is not included by default. Install the package with:
|
|
131
|
+
|
|
132
|
+
```sh
|
|
133
|
+
pip install "imaging-server-kit[qupath]"
|
|
134
|
+
```
|
|
135
|
+
|
|
113
136
|
## Getting started
|
|
114
137
|
|
|
115
138
|
The documentation is available on [this page](https://imaging-server-kit.github.io/imaging-server-kit).
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-

|
|
2
1
|
# 🪐 Imaging Server Kit
|
|
3
2
|
|
|
4
3
|
Turn Python-based image processing workflows into **algorithms** that gain extra functionalities.
|
|
5
4
|
|
|
6
|
-
- [**Turn your algorithms into web servers**](https://imaging-server-kit.github.io/imaging-server-kit/sections/07_server.html) and run computations from [
|
|
5
|
+
- [**Turn your algorithms into web servers**](https://imaging-server-kit.github.io/imaging-server-kit/sections/07_server.html) and run computations from [Napari](https://napari.org/stable/), [QuPath](https://qupath.github.io/), or [Python](https://imaging-server-kit.github.io/imaging-server-kit/sections/08_python.html) via HTTP requests.
|
|
7
6
|
|
|
8
|
-
https://github.com/user-attachments/assets/
|
|
7
|
+
https://github.com/user-attachments/assets/0be819ea-fcc1-48ee-8fae-7265e63a00d4
|
|
9
8
|
|
|
10
|
-
- [**Generate dock widgets**](https://imaging-server-kit.github.io/imaging-server-kit/sections/01_algorithm.html) to run your algorithms interactively in Napari.
|
|
9
|
+
- [**Generate dock widgets**](https://imaging-server-kit.github.io/imaging-server-kit/sections/01_algorithm.html) to run your algorithms interactively in Napari or QuPath.
|
|
11
10
|
|
|
12
11
|
https://github.com/user-attachments/assets/1ff572f7-f159-4f5a-afd4-7a157de3d9f8
|
|
13
12
|
|
|
@@ -19,6 +18,10 @@ https://github.com/user-attachments/assets/47c2f734-5683-49d9-8aea-388c3a2bc16d
|
|
|
19
18
|
|
|
20
19
|
https://github.com/user-attachments/assets/a3f69a9f-fb68-4580-a804-6c57d5807b9a
|
|
21
20
|
|
|
21
|
+
## Development status
|
|
22
|
+
|
|
23
|
+
The Imaging Server Kit is being actively developed and is iterating rapidly. It is likely that there will be **compatibility-breaking changes** in future versions.
|
|
24
|
+
|
|
22
25
|
## Installation
|
|
23
26
|
|
|
24
27
|
Install the `imaging-server-kit` package with `pip`:
|
|
@@ -35,6 +38,18 @@ cd imaging-server-kit
|
|
|
35
38
|
pip install -e .
|
|
36
39
|
```
|
|
37
40
|
|
|
41
|
+
To use the **Napari-related functionalities**, you additionally have to install [`napari`](https://github.com/napari/napari) and [`napari-toolkit`](https://github.com/MIC-DKFZ/napari_toolkit) which are not included by default. Install the package with:
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
pip install "imaging-server-kit[napari]"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
To use the **QuPath-related functionalities**, you additionally have to install [`qubalab>=0.2.0`](https://pypi.org/project/qubalab/#history), which is not included by default. Install the package with:
|
|
48
|
+
|
|
49
|
+
```sh
|
|
50
|
+
pip install "imaging-server-kit[qupath]"
|
|
51
|
+
```
|
|
52
|
+
|
|
38
53
|
## Getting started
|
|
39
54
|
|
|
40
55
|
The documentation is available on [this page](https://imaging-server-kit.github.io/imaging-server-kit).
|
|
Binary file
|
|
Binary file
|
|
@@ -12,13 +12,13 @@ Server Kit algorithms are versatile objects that allow you run computations in a
|
|
|
12
12
|
|
|
13
13
|
For example, you can
|
|
14
14
|
|
|
15
|
-
- [**Turn your algorithm into a web server**](./sections/07_server.md), connect to it and run computations from [
|
|
15
|
+
- [**Turn your algorithm into a web server**](./sections/07_server.md), connect to it and run computations from [Napari](https://napari.org/stable/), [QuPath](https://qupath.github.io/), or [Python](./sections/08_python) via HTTP requests.
|
|
16
16
|
|
|
17
17
|
<video width=512 controls loop autoplay>
|
|
18
|
-
<source src="./_static/
|
|
18
|
+
<source src="./_static/cellpose_example.mp4" type="video/mp4">
|
|
19
19
|
</video>
|
|
20
20
|
|
|
21
|
-
- [**Generate a dock widget**](./sections/01_algorithm) to run your algorithm interactively in Napari.
|
|
21
|
+
- [**Generate a dock widget**](./sections/01_algorithm) to run your algorithm interactively in Napari or QuPath.
|
|
22
22
|
|
|
23
23
|
<video width=512 controls loop autoplay>
|
|
24
24
|
<source src="./_static/oripy_threshold.mp4" type="video/mp4">
|
|
@@ -36,9 +36,9 @@ For example, you can
|
|
|
36
36
|
<source src="./_static/yolo-stream.mp4" type="video/webm">
|
|
37
37
|
</video>
|
|
38
38
|
|
|
39
|
-
On top of that, you can
|
|
39
|
+
On top of that, you can provide [**samples**](./sections/02_samples) and automatically generate a [**documentation**](./sections/03_metadata) page for your algorithm that you can share with users.
|
|
40
40
|
|
|
41
|
-
This documentation will give you a conceptual overview of the package, and walk you through the steps to learn [how to create an algorithm](./sections/01_algorithm), and give you some [suggestions of use cases](./sections/
|
|
41
|
+
This documentation will give you a conceptual overview of the package, and walk you through the steps to learn [how to create an algorithm](./sections/01_algorithm), and give you some [suggestions of use cases](./sections/10_examples).
|
|
42
42
|
|
|
43
43
|
## Contents
|
|
44
44
|
|
|
@@ -61,17 +61,17 @@ cd imaging-server-kit
|
|
|
61
61
|
pip install -e .
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
**Napari
|
|
65
|
-
|
|
66
|
-
Install the [napari-serverkit](https://github.com/Imaging-Server-Kit/napari-serverkit) plugin with `pip` to enable all [Napari](https://napari.org/stable/)-related functionalities.
|
|
64
|
+
To use the **Napari-related functionalities**, you additionally have to install [`napari`](https://github.com/napari/napari) and [`napari-toolkit`](https://github.com/MIC-DKFZ/napari_toolkit) which are not included by default. Install the package with:
|
|
67
65
|
|
|
68
66
|
```sh
|
|
69
|
-
pip install napari
|
|
67
|
+
pip install "imaging-server-kit[napari]"
|
|
70
68
|
```
|
|
71
69
|
|
|
72
|
-
**QuPath
|
|
70
|
+
To use the **QuPath-related functionalities**, you additionally have to install [`qubalab>=0.2.0`](https://pypi.org/project/qubalab/#history), which is not included by default. Install the package with:
|
|
73
71
|
|
|
74
|
-
|
|
72
|
+
```sh
|
|
73
|
+
pip install "imaging-server-kit[qupath]"
|
|
74
|
+
```
|
|
75
75
|
|
|
76
76
|
## License
|
|
77
77
|
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
# Getting started
|
|
2
2
|
|
|
3
|
-
The following section will give you a first introduction to the Imaging Server Kit
|
|
4
|
-
|
|
5
|
-
## Prerequisites
|
|
6
|
-
|
|
7
|
-
Make sure to have installed the required packages:
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
pip install imaging-server-kit napari-serverkit
|
|
11
|
-
```
|
|
3
|
+
The following section will give you a first introduction to the Imaging Server Kit via **interactive demos**.
|
|
12
4
|
|
|
13
5
|
## Run the Napari demo
|
|
14
6
|
|
|
@@ -18,11 +10,11 @@ The Napari demo will give you a first idea of what the package can do. From a te
|
|
|
18
10
|
serverkit demo napari
|
|
19
11
|
```
|
|
20
12
|
|
|
21
|
-
This command should open a **Napari viewer** with the *Server Kit* plugin already loaded. In the *Algorithm* dropdown, you will see a list of
|
|
13
|
+
This command should open a **Napari viewer** with the *Imaging Server Kit* plugin already loaded. In the *Algorithm* dropdown, you will see a list of "demo" algorithms.
|
|
22
14
|
|
|
23
15
|

|
|
24
16
|
|
|
25
|
-
When you select an **algorithm**, the *Parameters* panel will update to display a list of tunable **parameters** for
|
|
17
|
+
When you select an **algorithm**, the *Parameters* panel will update to display a list of tunable **parameters** for this algorithm.
|
|
26
18
|
|
|
27
19
|
Most algorithms require an input image. You can **load a sample image** from the *Samples* dropdown. Once you have loaded an image, you can **run** the algorithm and visualize the results in the Napari viewer.
|
|
28
20
|
|
|
@@ -51,10 +43,10 @@ This launches a web server on your local machine at http://localhost:8000. If yo
|
|
|
51
43
|
While your server is running, you can connect to it directly from Napari. Open another terminal and run:
|
|
52
44
|
|
|
53
45
|
```
|
|
54
|
-
napari -w
|
|
46
|
+
napari -w imaging-server-kit
|
|
55
47
|
```
|
|
56
48
|
|
|
57
|
-
This is equivalent to opening the plugin in Napari from `Plugins > Server Kit
|
|
49
|
+
This is equivalent to opening the plugin in Napari from `Plugins > Imaging Server Kit > Connect to server`.
|
|
58
50
|
|
|
59
51
|
In the plugin panel, enter the server address (http://localhost:8000) and press *Connect*. The *Algorithm* dropdown will populate with the available algorithms. You can use them just like in the local case.
|
|
60
52
|
|
|
@@ -68,9 +60,23 @@ In this demo, both client and server run on your local machine, but keep in mind
|
|
|
68
60
|
|
|
69
61
|
### Connect from QuPath
|
|
70
62
|
|
|
71
|
-
You can also use Server Kit algorithms direction from QuPath, for segmentation and
|
|
63
|
+
You can also use Imaging Server Kit algorithms direction from QuPath via [QuBaLab](https://github.com/qupath/qubalab), for segmentation and bounding box detection tasks. To try this out, you can run the command:
|
|
64
|
+
|
|
65
|
+
```sh
|
|
66
|
+
serverkit qupath
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
This will bring up a user interface similar to the dock widget you used in Napari, with an extra field for connecting to QuPath via Py4J. Next, in a QuPath project:
|
|
70
|
+
|
|
71
|
+
- Open an image, for example `blobs.tif`.
|
|
72
|
+
- Draw a rectangular annotation in a region of interest (or use `Ctrl+Shift+A` to select the whole image).
|
|
73
|
+
- Assign a class to this annotation via the QuPath `Annotations` menu, for example the class `Region`.
|
|
74
|
+
|
|
75
|
+
After that, start a **Py4J** gateway from QuPath via the [qupath-extension-py4j](https://github.com/qupath/qupath-extension-py4j) (you can specify a token and port if needed). Then, click `Connect to QuPath` in the Imaging Server Kit window. The `Annotation` dropdown should now be filled with annotation class names (e.g., `Region`).
|
|
76
|
+
|
|
77
|
+
Finally, with your server still active on http://localhost:8000, click on `Connect` to discover and use the algorithms available on that server. For this demonstration, you should be able to run a simple threshold on an image in QuPath!
|
|
72
78
|
|
|
73
|
-

|
|
74
80
|
|
|
75
81
|
## Next steps
|
|
76
82
|
|
|
@@ -12,26 +12,6 @@
|
|
|
12
12
|
"In this section, we will cover the basics of how to create Server Kit algorithms."
|
|
13
13
|
]
|
|
14
14
|
},
|
|
15
|
-
{
|
|
16
|
-
"cell_type": "markdown",
|
|
17
|
-
"id": "2d1813a7",
|
|
18
|
-
"metadata": {},
|
|
19
|
-
"source": [
|
|
20
|
-
"## Prerequisites\n",
|
|
21
|
-
"\n",
|
|
22
|
-
"Before continuing, make sure to have installed the required packages:"
|
|
23
|
-
]
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"cell_type": "code",
|
|
27
|
-
"execution_count": null,
|
|
28
|
-
"id": "05618c50",
|
|
29
|
-
"metadata": {},
|
|
30
|
-
"outputs": [],
|
|
31
|
-
"source": [
|
|
32
|
-
"!pip install imaging-server-kit napari-serverkit"
|
|
33
|
-
]
|
|
34
|
-
},
|
|
35
15
|
{
|
|
36
16
|
"cell_type": "markdown",
|
|
37
17
|
"id": "04caf48c",
|
|
@@ -181,10 +161,6 @@
|
|
|
181
161
|
"\n",
|
|
182
162
|
"\n",
|
|
183
163
|
"\n",
|
|
184
|
-
"```{note}\n",
|
|
185
|
-
"`sk.to_napari()` will only be available if you have installed the [napari-serverkit](https://github.com/Imaging-Server-Kit/napari-serverkit) plugin.\n",
|
|
186
|
-
"```\n",
|
|
187
|
-
"\n",
|
|
188
164
|
"At this stage, the algorithm works, however a few things are not optimal. For example, users could enter a negative value for sigma, which would raise an error. To fix this, we need to **annotate parameters**."
|
|
189
165
|
]
|
|
190
166
|
},
|
|
@@ -229,7 +205,7 @@
|
|
|
229
205
|
"- `step` (for UI sliders)\n",
|
|
230
206
|
"- `name` (label next to the parameter)\n",
|
|
231
207
|
"\n",
|
|
232
|
-
"There are many more data layers available. For a full list, see: [Data layers](./
|
|
208
|
+
"There are many more data layers available. For a full list, see: [Data layers](./09_layers)\n",
|
|
233
209
|
"```\n",
|
|
234
210
|
"\n",
|
|
235
211
|
"While `parameters={}` is the most explicit and reliable annotation method, you can also use:\n",
|
|
@@ -363,7 +339,7 @@
|
|
|
363
339
|
"\n",
|
|
364
340
|
" # Return all annotated outputs\n",
|
|
365
341
|
" return (\n",
|
|
366
|
-
" sk.Image(blurred_image, name=\"Blurred\",
|
|
342
|
+
" sk.Image(blurred_image, name=\"Blurred\", colormap=\"viridis\"),\n",
|
|
367
343
|
" sk.Mask(mask, name=\"Binary mask\"), \n",
|
|
368
344
|
" sk.String(f\"Area fraction: {fract:.02f}\", name=\"Fraction of True pixels\"),\n",
|
|
369
345
|
" )\n",
|
|
@@ -379,7 +355,7 @@
|
|
|
379
355
|
"Notice that this algorithm \n",
|
|
380
356
|
"\n",
|
|
381
357
|
"- produces **several outputs** of different types: `sk.Image`, `sk.Mask`, `sk.String`.\n",
|
|
382
|
-
"- includes **metadata** in the outputs; for example, `
|
|
358
|
+
"- includes **metadata** in the outputs; for example, `colormap=\"viridis\"` is used to control the colormap used to display the image in Napari."
|
|
383
359
|
]
|
|
384
360
|
},
|
|
385
361
|
{
|
|
@@ -416,7 +392,7 @@
|
|
|
416
392
|
"name": "python",
|
|
417
393
|
"nbconvert_exporter": "python",
|
|
418
394
|
"pygments_lexer": "ipython3",
|
|
419
|
-
"version": "3.
|
|
395
|
+
"version": "3.13.14"
|
|
420
396
|
}
|
|
421
397
|
},
|
|
422
398
|
"nbformat": 4,
|
|
@@ -36,13 +36,15 @@
|
|
|
36
36
|
"outputs": [],
|
|
37
37
|
"source": [
|
|
38
38
|
"import imaging_server_kit as sk\n",
|
|
39
|
+
"import numpy as np\n",
|
|
39
40
|
"import time\n",
|
|
40
41
|
"\n",
|
|
41
42
|
"@sk.algorithm\n",
|
|
42
|
-
"def threshold_algo(image):\n",
|
|
43
|
-
" for threshold in
|
|
43
|
+
"def threshold_algo(image, steps=20):\n",
|
|
44
|
+
" for k, threshold in enumerate(np.linspace(0, 255, steps)): # Progressively increase the threshold value\n",
|
|
44
45
|
" mask = image > threshold\n",
|
|
45
46
|
" yield sk.Mask(mask), sk.String(f\"Threshold: {threshold}\") # <- \"Stream\" the outputs\n",
|
|
47
|
+
" yield sk.Progress(k, max_val=steps) # <- Update the progress bar\n",
|
|
46
48
|
" time.sleep(0.5)\n",
|
|
47
49
|
"\n",
|
|
48
50
|
"viewer = sk.to_napari(threshold_algo)\n",
|
|
@@ -104,7 +106,7 @@
|
|
|
104
106
|
"id": "d8d1138d",
|
|
105
107
|
"metadata": {},
|
|
106
108
|
"source": [
|
|
107
|
-
"In this example, the algorithm notifies the user that processing has started, then
|
|
109
|
+
"In this example, the algorithm notifies the user that processing has started, then yields a segmentation mask, and finally prints out the final measurement."
|
|
108
110
|
]
|
|
109
111
|
},
|
|
110
112
|
{
|
|
@@ -139,7 +141,7 @@
|
|
|
139
141
|
"name": "python",
|
|
140
142
|
"nbconvert_exporter": "python",
|
|
141
143
|
"pygments_lexer": "ipython3",
|
|
142
|
-
"version": "3.
|
|
144
|
+
"version": "3.13.14"
|
|
143
145
|
}
|
|
144
146
|
},
|
|
145
147
|
"nbformat": 4,
|
|
@@ -7,19 +7,11 @@
|
|
|
7
7
|
"source": [
|
|
8
8
|
"# Tiled inference\n",
|
|
9
9
|
"\n",
|
|
10
|
-
"Tiled inference
|
|
10
|
+
"Tiled inference can be used to run image processing filters, segmentation, or detection algorithms tile-by-tile instead of on the whole input image at once. The processed tiles are progressively assembled to form the final result.\n",
|
|
11
11
|
"\n",
|
|
12
|
-
"
|
|
12
|
+
"By default, this functionality is disabled; you can enable it by setting `tileable=True` when defining an algorithm.\n",
|
|
13
13
|
"\n",
|
|
14
|
-
"-
|
|
15
|
-
"- Users need to see the results appear progressively (if needed, they can cancel the process before it finishes).\n",
|
|
16
|
-
"- To apply a deep learning model with a fixed context window (input size) on images of varying sizes.\n",
|
|
17
|
-
"\n",
|
|
18
|
-
"All Server Kit algorithms are tileable. You can control the **tile size** (in pixels), **overlap** (fraction), processing **order** of the tiles (random or not), and the time delay introduced between processing of consecutive tiles. \n",
|
|
19
|
-
"\n",
|
|
20
|
-
"```{note}\n",
|
|
21
|
-
"Tiled inference is an **experimental feature**. We aren't fully done implementing and testing it yet. Expect some improvements in the near future!\n",
|
|
22
|
-
"```"
|
|
14
|
+
"When running an algiorithm tile-by-tile, you can adjust the **tile size** in pixels, the amount of **overlap** between tiles, and the **order** in which tiles are processed (random or not)."
|
|
23
15
|
]
|
|
24
16
|
},
|
|
25
17
|
{
|
|
@@ -41,7 +33,7 @@
|
|
|
41
33
|
"source": [
|
|
42
34
|
"import imaging_server_kit as sk\n",
|
|
43
35
|
"\n",
|
|
44
|
-
"@sk.algorithm\n",
|
|
36
|
+
"@sk.algorithm(tileable=True) # <- Set tileable=True\n",
|
|
45
37
|
"def threshold_algo(image, threshold=128):\n",
|
|
46
38
|
" mask = image > threshold\n",
|
|
47
39
|
" return sk.Mask(mask)\n",
|
|
@@ -71,8 +63,7 @@
|
|
|
71
63
|
"source": [
|
|
72
64
|
"## Summary\n",
|
|
73
65
|
"\n",
|
|
74
|
-
"- You can
|
|
75
|
-
"- This is only meaningful for embarassingly parallel tasks.\n",
|
|
66
|
+
"- You can enable running an algorithm tile-by-tile by setting `tileable=True` in the algorithm definition.\n",
|
|
76
67
|
"\n",
|
|
77
68
|
"## Next steps\n",
|
|
78
69
|
"\n",
|
|
@@ -81,7 +72,7 @@
|
|
|
81
72
|
},
|
|
82
73
|
{
|
|
83
74
|
"cell_type": "markdown",
|
|
84
|
-
"id": "
|
|
75
|
+
"id": "cc2ef706",
|
|
85
76
|
"metadata": {},
|
|
86
77
|
"source": []
|
|
87
78
|
}
|
|
@@ -102,7 +93,7 @@
|
|
|
102
93
|
"name": "python",
|
|
103
94
|
"nbconvert_exporter": "python",
|
|
104
95
|
"pygments_lexer": "ipython3",
|
|
105
|
-
"version": "3.
|
|
96
|
+
"version": "3.13.14"
|
|
106
97
|
}
|
|
107
98
|
},
|
|
108
99
|
"nbformat": 4,
|
|
@@ -2,11 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
Any Imaging Server Kit algorithm can be **served as a web API** using a built-in [FastAPI](https://fastapi.tiangolo.com/) server. This turns algorithms into web servers that you can interact with from Napari, QuPath, or Python via HTTP requests.
|
|
4
4
|
|
|
5
|
-
Serving an algorithm is particularly useful when:
|
|
6
|
-
|
|
7
|
-
- You want to run computations on a remote machine and visualize the results on your local machine.
|
|
8
|
-
- You want to use algorithms in **QuPath** via the `qupath-extension-serverkit` extension.
|
|
9
|
-
|
|
10
5
|
## Using `sk.serve`
|
|
11
6
|
|
|
12
7
|
Let's consider the threshold algorithm once again. You can serve this algorithm by passing it to `sk.serve()`.
|
|
@@ -42,13 +37,17 @@ Once the server is running, you can connect to it from Napari, QuPath, or direct
|
|
|
42
37
|
|
|
43
38
|
### Connecting from Napari
|
|
44
39
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
To try it out, open a new terminal window, start Napari, and then open the plugin from `Plugins > Server Kit (Napari Server Kit)`. In the `Server URL` field, enter: http://localhost:8000, and press *Connect*. You should see your threshold algorithm listed, with all related functionalities (load samples, run algorithm, access documentation) available.
|
|
40
|
+
You can connect to algorithm servers from Napari via the menu `Plugins > Imaging Server Kit > Connect to server`. In the `Server URL` field, enter: http://localhost:8000, and press *Connect*. You should see your threshold algorithm listed, with all related functionalities (load samples, run algorithm, access documentation) available.
|
|
48
41
|
|
|
49
42
|
### Connecting from QuPath
|
|
50
43
|
|
|
51
|
-
You can also connect to algorithm servers
|
|
44
|
+
You can also connect to algorithm servers and use algorithms via QuPath. From the terminal, run:
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
serverkit qupath
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
to bring up the QuPath connection panel. Algorithms compatible with QuPath include those that take a single image as input (interpreted as the QuPath image), and return segmentation masks or bounding boxes.
|
|
52
51
|
|
|
53
52
|
## Summary
|
|
54
53
|
|