imaging-server-kit 0.0.11__tar.gz → 0.0.13__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 (127) hide show
  1. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/PKG-INFO +1 -1
  2. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/docs/sections/algorithm_server.md +1 -1
  3. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/_version.py +2 -2
  4. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/core/geometry.py +19 -18
  5. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/demo/threshold.py +2 -3
  6. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit.egg-info/PKG-INFO +1 -1
  7. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/.dockerignore +0 -0
  8. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/.gitattributes +0 -0
  9. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/.github/workflows/deploy.yml +0 -0
  10. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/.github/workflows/publish.yml +0 -0
  11. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/.gitignore +0 -0
  12. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/Dockerfile +0 -0
  13. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/Dockerfile-GPU +0 -0
  14. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/LICENSE +0 -0
  15. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/MANIFEST.in +0 -0
  16. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/README.md +0 -0
  17. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/build.sh +0 -0
  18. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/docs/_config.yml +0 -0
  19. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/docs/_toc.yml +0 -0
  20. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/docs/assets/screenshot_napari_threshold.png +0 -0
  21. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/docs/assets/screenshot_running_server.png +0 -0
  22. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/docs/index.md +0 -0
  23. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/docs/logo.ico +0 -0
  24. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/docs/sections/api_endpoints.md +0 -0
  25. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/docs/sections/authentication.md +0 -0
  26. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/docs/sections/client_apps.md +0 -0
  27. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/docs/sections/docker.md +0 -0
  28. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/docs/sections/examples.md +0 -0
  29. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/docs/sections/getting_started.md +0 -0
  30. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/docs/sections/multi_algo_server.md +0 -0
  31. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/basic/auto_threshold.py +0 -0
  32. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/basic/multi_algo.py +0 -0
  33. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/basic/sample_images/blobs.tif +0 -0
  34. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/basic/threshold.py +0 -0
  35. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/docker-compose.yml +0 -0
  36. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-cellpose/Dockerfile +0 -0
  37. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-cellpose/README.md +0 -0
  38. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-cellpose/docker-compose.yml +0 -0
  39. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-cellpose/main.py +0 -0
  40. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-cellpose/requirements.txt +0 -0
  41. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-cellpose/sample_images/nuclei_2d.tif +0 -0
  42. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-orientationpy/Dockerfile +0 -0
  43. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-orientationpy/README.md +0 -0
  44. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-orientationpy/docker-compose.yml +0 -0
  45. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-orientationpy/main.py +0 -0
  46. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-orientationpy/requirements.txt +0 -0
  47. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-orientationpy/sample_images/image1_from_OrientationJ.tif +0 -0
  48. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-rembg/Dockerfile +0 -0
  49. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-rembg/README.md +0 -0
  50. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-rembg/docker-compose.yml +0 -0
  51. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-rembg/main.py +0 -0
  52. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-rembg/requirements.txt +0 -0
  53. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-rembg/sample_images/astronaut.tif +0 -0
  54. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-skimage-log/Dockerfile +0 -0
  55. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-skimage-log/README.md +0 -0
  56. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-skimage-log/docker-compose.yml +0 -0
  57. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-skimage-log/main.py +0 -0
  58. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-skimage-log/requirements.txt +0 -0
  59. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-skimage-log/sample_images/blobs.tif +0 -0
  60. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-skimage-log/sample_images/tracks.tif +0 -0
  61. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-stardist/Dockerfile +0 -0
  62. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-stardist/README.md +0 -0
  63. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-stardist/docker-compose.yml +0 -0
  64. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-stardist/main.py +0 -0
  65. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-stardist/requirements.txt +0 -0
  66. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-stardist/sample_images/nuclei_2d.tif +0 -0
  67. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-trackpy/Dockerfile +0 -0
  68. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-trackpy/README.md +0 -0
  69. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-trackpy/docker-compose.yml +0 -0
  70. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-trackpy/main.py +0 -0
  71. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-trackpy/requirements.txt +0 -0
  72. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/examples/servers/serverkit-trackpy/sample_images/tracks.tif +0 -0
  73. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/main.py +0 -0
  74. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/pyproject.toml +0 -0
  75. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/setup.cfg +0 -0
  76. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/__init__.py +0 -0
  77. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/auth/__init__.py +0 -0
  78. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/auth/authenticated_server.py +0 -0
  79. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/auth/static/css/login.css +0 -0
  80. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/auth/static/css/register.css +0 -0
  81. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/auth/static/js/login_script.js +0 -0
  82. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/auth/static/js/register_script.js +0 -0
  83. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/auth/templates/login.html +0 -0
  84. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/auth/templates/register.html +0 -0
  85. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/auth/utils/__init__.py +0 -0
  86. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/auth/utils/db.py +0 -0
  87. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/auth/utils/schemas.py +0 -0
  88. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/auth/utils/users.py +0 -0
  89. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/cli.py +0 -0
  90. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/client/__init__.py +0 -0
  91. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/client/client.py +0 -0
  92. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/core/__init__.py +0 -0
  93. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/core/decorator.py +0 -0
  94. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/core/encoding.py +0 -0
  95. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/core/errors.py +0 -0
  96. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/core/serialization.py +0 -0
  97. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/core/server.py +0 -0
  98. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/core/static/css/index.css +0 -0
  99. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/core/static/css/info.css +0 -0
  100. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/core/templates/index.html +0 -0
  101. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/core/templates/info.html +0 -0
  102. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/core/ui_library.py +0 -0
  103. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/demo/__init__.py +0 -0
  104. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/demo/sample_images/blobs.tif +0 -0
  105. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/hub/__init__.py +0 -0
  106. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/hub/algorithm_hub.py +0 -0
  107. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/hub/multialgo_server.py +0 -0
  108. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/template/cookiecutter.json +0 -0
  109. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/template/serverkit-{{ cookiecutter.project_slug }}/.dockerignore +0 -0
  110. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/template/serverkit-{{ cookiecutter.project_slug }}/.gitignore +0 -0
  111. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/template/serverkit-{{ cookiecutter.project_slug }}/Dockerfile +0 -0
  112. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/template/serverkit-{{ cookiecutter.project_slug }}/README.md +0 -0
  113. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/template/serverkit-{{ cookiecutter.project_slug }}/docker-compose.yml +0 -0
  114. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/template/serverkit-{{ cookiecutter.project_slug }}/main.py +0 -0
  115. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/template/serverkit-{{ cookiecutter.project_slug }}/requirements.txt +0 -0
  116. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit/template/serverkit-{{ cookiecutter.project_slug }}/sample_images/blobs.tif +0 -0
  117. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit.egg-info/SOURCES.txt +0 -0
  118. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit.egg-info/dependency_links.txt +0 -0
  119. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit.egg-info/entry_points.txt +0 -0
  120. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit.egg-info/requires.txt +0 -0
  121. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/src/imaging_server_kit.egg-info/top_level.txt +0 -0
  122. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/start_algorithm_hub.py +0 -0
  123. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/tests/test_error_paths.py +0 -0
  124. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/tests/test_import.py +0 -0
  125. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/tests/test_multialgo_server.py +0 -0
  126. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/tests/test_parameter_schema.py +0 -0
  127. {imaging_server_kit-0.0.11 → imaging_server_kit-0.0.13}/tests/test_simple_server.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: imaging-server-kit
3
- Version: 0.0.11
3
+ Version: 0.0.13
4
4
  Summary: Deploy image processing algorithms in FastAPI servers.
5
5
  Author-email: Mallory Wittwer <mallory.wittwer@epfl.ch>
6
6
  License: Copyright (c) 2024, EPFL
@@ -45,7 +45,7 @@ The data tuples are inspired from Napari's [LayerDataTuple](https://napari.org/0
45
45
  | `"mask"` | A segmentation mask (2D, 3D) as integer numpy array. Integers represent the **object class**. |
46
46
  | `"instance_mask"` | A segmentation mask (2D, 3D) as integer nD array. Integers represent **object instances**. |
47
47
  | `"points"` | A collection of point coordinates (array of shape (N, 2) or (N, 3)). |
48
- | `"boxes"` | A collection of boxes (array of shape (N, 4) representing the top-left and bottom-right box corners). |
48
+ | `"boxes"` | A collection of boxes (array of shape (N, 4, 2) representing the box corners). |
49
49
  | `"vectors"` | Array of vectors in the Napari [Vectors](https://napari.org/stable/howtos/layers/vectors.html) format.|
50
50
  | `"tracks"` | Array of tracks in the Napari [Tracks](https://napari.org/stable/howtos/layers/tracks.html) format. |
51
51
  | `"class"` | A class label (for image classification). |
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.0.11'
21
- __version_tuple__ = version_tuple = (0, 0, 11)
20
+ __version__ = version = '0.0.13'
21
+ __version_tuple__ = version_tuple = (0, 0, 13)
@@ -29,17 +29,17 @@ def mask2features(segmentation_mask: np.ndarray) -> List[Feature]:
29
29
  coords = np.vstack([coords, coords[0]]) # Close the polygon for QuPath
30
30
  try:
31
31
  geom = Polygon(coordinates=[coords.tolist()], validate=True)
32
+ feature = Feature(
33
+ geometry=geom,
34
+ properties={
35
+ "Detection ID": detection_id,
36
+ "Class": int(pixel_class), # the int() casting solves a bug with json serialization
37
+ }
38
+ )
39
+ features.append(feature)
32
40
  except ValueError:
33
41
  # TODO: not sure what to do when this happens (very occasionally)
34
42
  print("Found an invalid polygon...")
35
- feature = Feature(
36
- geometry=geom,
37
- properties={
38
- "Detection ID": detection_id,
39
- "Class": int(pixel_class), # the int() casting solves a bug with json serialization
40
- }
41
- )
42
- features.append(feature)
43
43
 
44
44
  return features
45
45
 
@@ -81,17 +81,17 @@ def instance_mask2features(segmentation_mask: np.ndarray) -> List[Feature]:
81
81
  coords = np.vstack([coords, coords[0]]) # Close the polygon for QuPath
82
82
  try:
83
83
  geom = Polygon(coordinates=[coords.tolist()], validate=True)
84
+ feature = Feature(
85
+ geometry=geom,
86
+ properties={
87
+ "Detection ID": int(detection_id),
88
+ "Class": 1
89
+ }
90
+ )
91
+ features.append(feature)
84
92
  except ValueError:
85
93
  # TODO: not sure what to do when this happens (very occasionally)
86
94
  print("Found an invalid polygon...")
87
- feature = Feature(
88
- geometry=geom,
89
- properties={
90
- "Detection ID": int(detection_id),
91
- "Class": 1
92
- }
93
- )
94
- features.append(feature)
95
95
 
96
96
  return features
97
97
 
@@ -181,14 +181,15 @@ def boxes2features(boxes: np.ndarray) -> List[Feature]:
181
181
  try:
182
182
  geom = Polygon(coordinates=[coords], validate=True)
183
183
  except ValueError:
184
- print("Invalid box polygon found.")
184
+ print("Invalid box polygon found. Expected an array of shape (N, 4, D) representing the corners of the box.")
185
+ geom = None # TODO: should we handle this better?
185
186
  features.append(Feature(geometry=geom, properties={"Detection ID": i}))
186
187
  return features
187
188
 
188
189
 
189
190
  def features2boxes(features):
190
191
  boxes = np.array([feature["geometry"]["coordinates"] for feature in features])
191
- boxes = np.squeeze(boxes)
192
+ boxes = np.array([box[0] for box in boxes]) # We get back a shape of (N, 1, 5, 2) - so we remove dim. 1
192
193
  boxes = boxes[:, :-1] # Remove the last element
193
194
  boxes = boxes[:, :, ::-1] # Invert XY
194
195
  return boxes
@@ -2,8 +2,7 @@ from pathlib import Path
2
2
  import numpy as np
3
3
  import uvicorn
4
4
  from imaging_server_kit import algorithm_server, ImageUI, FloatSpinBoxUI
5
- from skimage.util import img_as_float
6
-
5
+ from skimage.exposure import rescale_intensity
7
6
 
8
7
  @algorithm_server(
9
8
  algorithm_name="intensity-threshold",
@@ -29,7 +28,7 @@ def threshold_algo_server(
29
28
  threshold: float,
30
29
  ):
31
30
  """Implements a simple intensity threshold algorithm."""
32
- mask = img_as_float(image) > threshold
31
+ mask = rescale_intensity(image, out_range=(0, 1)) > threshold
33
32
  return [(mask, {"name": "Threshold result"}, "mask")]
34
33
 
35
34
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: imaging-server-kit
3
- Version: 0.0.11
3
+ Version: 0.0.13
4
4
  Summary: Deploy image processing algorithms in FastAPI servers.
5
5
  Author-email: Mallory Wittwer <mallory.wittwer@epfl.ch>
6
6
  License: Copyright (c) 2024, EPFL