dsa-helpers 1.0.2.dev0__tar.gz → 1.0.3.dev0__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 (51) hide show
  1. {dsa_helpers-1.0.2.dev0/dsa_helpers.egg-info → dsa_helpers-1.0.3.dev0}/PKG-INFO +2 -2
  2. dsa_helpers-1.0.3.dev0/dsa_helpers/__init__.py +6 -0
  3. dsa_helpers-1.0.3.dev0/dsa_helpers/dash/__init__.py +3 -0
  4. dsa_helpers-1.0.3.dev0/dsa_helpers/ml/__init__.py +2 -0
  5. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/ml/datasets/__init__.py +2 -1
  6. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/ml/object_detection/__init__.py +1 -1
  7. dsa_helpers-1.0.3.dev0/dsa_helpers/ml/transforms/__init__.py +1 -0
  8. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/tiling.py +97 -1
  9. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0/dsa_helpers.egg-info}/PKG-INFO +2 -2
  10. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/pyproject.toml +1 -1
  11. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/tests/test.ipynb +10 -22
  12. dsa_helpers-1.0.2.dev0/dsa_helpers/__init__.py +0 -23
  13. dsa_helpers-1.0.2.dev0/dsa_helpers/dash/__init__.py +0 -3
  14. dsa_helpers-1.0.2.dev0/dsa_helpers/ml/__init__.py +0 -20
  15. dsa_helpers-1.0.2.dev0/dsa_helpers/ml/transforms/__init__.py +0 -1
  16. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/.gitignore +0 -0
  17. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/.readthedocs.yaml +0 -0
  18. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/LICENSE +0 -0
  19. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/README.md +0 -0
  20. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/app.py +0 -0
  21. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/docs/requirements.txt +0 -0
  22. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/docs/source/conf.py +0 -0
  23. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/docs/source/index.rst +0 -0
  24. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/dash/dash_paperdragon_utils.py +0 -0
  25. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/dash/header.py +0 -0
  26. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/dash/header_callbacks.py +0 -0
  27. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/girder_utils.py +0 -0
  28. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/imread.py +0 -0
  29. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/imwrite.py +0 -0
  30. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/ml/callbacks.py +0 -0
  31. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/ml/datasets/SegFormerSegmentationDataset.py +0 -0
  32. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/ml/datasets/utils.py +0 -0
  33. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/ml/evaluate.py +0 -0
  34. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/ml/metrics.py +0 -0
  35. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/ml/object_detection/get_pearce_roi_images.py +0 -0
  36. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/ml/object_detection/tile_image.py +0 -0
  37. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/ml/object_detection/utils.py +0 -0
  38. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/ml/segformer_semantic_segmentation/__init__.py +0 -0
  39. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/ml/segformer_semantic_segmentation/inference.py +0 -0
  40. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/ml/transforms/segformer_transforms.py +0 -0
  41. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/mongo_utils.py +0 -0
  42. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/tile_utils.py +0 -0
  43. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers/utils.py +0 -0
  44. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers.egg-info/SOURCES.txt +0 -0
  45. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers.egg-info/dependency_links.txt +0 -0
  46. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers.egg-info/requires.txt +0 -0
  47. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/dsa_helpers.egg-info/top_level.txt +0 -0
  48. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/setup.cfg +0 -0
  49. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/tests/app/Dockerfile +0 -0
  50. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/tests/app/app.py +0 -0
  51. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.3.dev0}/tests/docker-compose.yaml +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: dsa_helpers
3
- Version: 1.0.2.dev0
3
+ Version: 1.0.3.dev0
4
4
  Summary: Utility functions for working with the DSA girder client.
5
5
  Author-email: "Juan C. Vizcarra" <jvizcar@emory.edu>
6
6
  Maintainer-email: "Juan C. Vizcarra" <jvizcar@emory.edu>
@@ -0,0 +1,6 @@
1
+ # Shadow imports.
2
+ from .imread import imread
3
+ from .imwrite import imwrite
4
+
5
+ # To avoid slow downs, do not allow from dsa_helpers import * to import anything.
6
+ __all__ = []
@@ -0,0 +1,3 @@
1
+ from . import header
2
+
3
+ __all__ = []
@@ -0,0 +1,2 @@
1
+ # Modules that are imported from * notation.
2
+ __all__ = []
@@ -1,3 +1,4 @@
1
+ # Shadow import.
1
2
  from .SegFormerSegmentationDataset import SegFormerSegmentationDataset
2
3
 
3
- __all__ = ["utils"]
4
+ __all__ = []
@@ -2,4 +2,4 @@
2
2
  from .get_pearce_roi_images import get_pearce_roi_images
3
3
  from .tile_image import tile_image
4
4
 
5
- __all__ = ["utils"]
5
+ __all__ = []
@@ -0,0 +1 @@
1
+ __all__ = []
@@ -11,7 +11,7 @@ import numpy as np
11
11
  from pathlib import Path
12
12
  from multiprocessing import Pool
13
13
  from tqdm import tqdm
14
- from . import imwrite
14
+ from . import imwrite, imread
15
15
  import pandas as pd
16
16
 
17
17
 
@@ -338,3 +338,99 @@ def tile_image(
338
338
  df_data.append([save_fp, x, y, tile_size])
339
339
 
340
340
  return pd.DataFrame(df_data, columns=["fp", "x", "y", "tile_size"])
341
+
342
+
343
+ def tile_image_with_mask(
344
+ img: np.ndarray | str,
345
+ mask: np.ndarray | str,
346
+ save_dir: str,
347
+ tile_size: int,
348
+ stride: int | None = None,
349
+ fill: tuple[int, int, int] = (255, 255, 255),
350
+ mask_pad_value: int = 0,
351
+ prepend_name: str = "",
352
+ ) -> pd.DataFrame:
353
+ """Tile an image and its corresponding mask.
354
+
355
+ Args:
356
+ img (np.ndarray): The image or filepath to tile.
357
+ mask (np.ndarray): The mask or filepath to mask.
358
+ save_dir (str): The directory to save the tiles. Images are
359
+ saved in a "images" subdirectory and masks in a "masks"
360
+ subdirectory.
361
+ tile_size (int): The size of the tiles.
362
+ stride (int, optional): The stride of the tiles. Defaults to
363
+ None which sets the stride to the tile size
364
+ (no overlap between tiles).
365
+ fill (tuple[int, int, int], optional): The fill value for the
366
+ tiles that go over the edge of image. Defaults to (255,
367
+ 255, 255).
368
+ mask_pad_value (int, optional): The value to pad the mask with.
369
+ Defaults to 0.
370
+ prepend_name (str, optional): A string to prepend to the tile
371
+ filenames. Default to "". Naming of tiles is:
372
+ {prepend_name}x{x}y{y}.png.
373
+
374
+ Returns:
375
+ pandas.DataFrame: A pandas dataframe containing the filepath of
376
+ the image and mask and x, y coordinate.
377
+
378
+ """
379
+ if isinstance(img, str):
380
+ img = imread(img)
381
+
382
+ if isinstance(mask, str):
383
+ mask = imread(mask, grayscale=True)
384
+
385
+ h, w = img.shape[:2]
386
+
387
+ # Pad the mask to avoid tiles going over the image boundary.
388
+ mask = cv.copyMakeBorder(
389
+ mask.copy(),
390
+ 0,
391
+ h + tile_size,
392
+ 0,
393
+ w + tile_size,
394
+ cv.BORDER_CONSTANT,
395
+ value=mask_pad_value,
396
+ )
397
+
398
+ # Same for the image.
399
+ img = cv.copyMakeBorder(
400
+ img.copy(),
401
+ 0,
402
+ h + tile_size,
403
+ 0,
404
+ w + tile_size,
405
+ cv.BORDER_CONSTANT,
406
+ value=fill,
407
+ )
408
+
409
+ # Make subdirectories to save images to.
410
+ img_dir = Path(save_dir).joinpath("images")
411
+ mask_dir = Path(save_dir).joinpath("masks")
412
+ img_dir.mkdir(parents=True, exist_ok=True)
413
+ mask_dir.mkdir(exist_ok=True)
414
+
415
+ if stride is None:
416
+ stride = tile_size
417
+
418
+ xys = [(x, y) for x in range(0, w, stride) for y in range(0, h, stride)]
419
+
420
+ tile_data = []
421
+
422
+ for xy in xys:
423
+ x, y = xy
424
+
425
+ tile_img = img[y : y + tile_size, x : x + tile_size]
426
+ tile_img_fp = img_dir / f"{prepend_name}x{x}y{y}.png"
427
+
428
+ tile_mask = mask[y : y + tile_size, x : x + tile_size]
429
+ tile_mask_fp = mask_dir / f"{prepend_name}x{x}y{y}.png"
430
+
431
+ imwrite(tile_img_fp, tile_img)
432
+ imwrite(tile_mask_fp, tile_mask, grayscale=True)
433
+
434
+ tile_data.append([str(tile_img_fp), str(tile_mask_fp), x, y])
435
+
436
+ return pd.DataFrame(tile_data, columns=["fp", "mask_fp", "x", "y"])
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: dsa_helpers
3
- Version: 1.0.2.dev0
3
+ Version: 1.0.3.dev0
4
4
  Summary: Utility functions for working with the DSA girder client.
5
5
  Author-email: "Juan C. Vizcarra" <jvizcar@emory.edu>
6
6
  Maintainer-email: "Juan C. Vizcarra" <jvizcar@emory.edu>
@@ -35,7 +35,7 @@ classifiers = [
35
35
  "License :: OSI Approved :: MIT License",
36
36
  ]
37
37
  keywords = ["dsa", "girder", "girder_client"]
38
- version = "v1.0.2dev0"
38
+ version = "v1.0.3.dev0"
39
39
 
40
40
  [project.urls]
41
41
  Repository = "https://github.com/Gutman-Lab/dsa-python-utils"
@@ -8,6 +8,15 @@
8
8
  "Test different functions of the library."
9
9
  ]
10
10
  },
11
+ {
12
+ "cell_type": "code",
13
+ "execution_count": 1,
14
+ "metadata": {},
15
+ "outputs": [],
16
+ "source": [
17
+ "import dsa_helpers.dash"
18
+ ]
19
+ },
11
20
  {
12
21
  "cell_type": "markdown",
13
22
  "metadata": {},
@@ -92,28 +101,7 @@
92
101
  "cell_type": "code",
93
102
  "execution_count": null,
94
103
  "metadata": {},
95
- "outputs": [
96
- {
97
- "name": "stdout",
98
- "output_type": "stream",
99
- "text": [
100
- "Help on function imwrite in module dsa_helpers.imwrite:\n",
101
- "\n",
102
- "imwrite(fp: str, img: numpy.ndarray, grayscale: bool = False) -> None\n",
103
- " Save an image to disk.\n",
104
- "\n",
105
- " Args:\n",
106
- " img (np.ndarray): The image to save.\n",
107
- " fp (str): The file path to save the image.\n",
108
- " grayscale (bool, optional): Whether to save the image as grayscale.\n",
109
- " Defaults to False.\n",
110
- "\n",
111
- " Raises:\n",
112
- " ValueError: The image must be grayscale, RGB, or RGBA.\n",
113
- "\n"
114
- ]
115
- }
116
- ],
104
+ "outputs": [],
117
105
  "source": []
118
106
  }
119
107
  ],
@@ -1,23 +0,0 @@
1
- # Shadow imports.
2
- from .imread import imread
3
- from .imwrite import imwrite
4
-
5
- # Make modules available.
6
- from . import girder_utils
7
- from . import dash
8
- from . import ml
9
- from . import mongo_utils
10
- from . import tiling
11
- from . import utils
12
- from . import tile_utils
13
-
14
- # Modules that should be available.
15
- __all__ = [
16
- "girder_utils",
17
- "dash",
18
- "ml",
19
- "mongo_utils",
20
- "tiling",
21
- "utils",
22
- "tile_utils",
23
- ]
@@ -1,3 +0,0 @@
1
- from . import header
2
-
3
- __all__ = ["dash_paperdragon_utils", "header_callbacks", "header"]
@@ -1,20 +0,0 @@
1
- # Allow modules to be imported.
2
- from . import (
3
- object_detection,
4
- datasets,
5
- transforms,
6
- segformer_semantic_segmentation,
7
- callbacks,
8
- evaluate,
9
- )
10
-
11
- # Modules that are imported from * notation.
12
- __all__ = [
13
- "object_detection",
14
- "datasets",
15
- "metrics",
16
- "transforms",
17
- "segformer_semantic_segmentation",
18
- "callbacks",
19
- "evaluate",
20
- ]
@@ -1 +0,0 @@
1
- __all__ = ["segformer_transforms"]