Modular visualization and analysis dashboard creation for high-resolution microscopy images
Project description
fusion-tools
Modular visualization and analysis dashboard creation for high-resolution microscopy images.
Installation
$ pip install fusion-tools
Usage
fusion-tools
is intended to bring some of the functionality found in FUSION to developers working with whole slide images (WSIs) stored locally.
One such example would be the Visualization
and SlideMap
class:
from fusion_tools import Visualization
from fusion_tools.components import SlideMap
vis_session = Visualization(
local_slides = [path_to_slide]
components = [
[
SlideMap()
]
]
)
vis_session.start()
The Visualization
class lets users construct custom layouts of different tools by passing a list containing rows, columns, and tabs. (e.g. [ [column in row 1], [ [ tab 1 in column 2 in row 1, tab 2 in column 2 in row 1] ], [ [ column 1 in row 2 ] ] ] ).
By passing a list of paths to locally-stored whole slide images (WSIs), fusion-tools
automatically generates a LocalTileServer
which is bundled in with the Visualization
session to allow for high-resolution image viewing.
from fusion_tools import Visualization
from fusion_tools.components import SlideMap, OverlayOptions, PropertyViewer
from fusion_tools.utils.shapes import load_aperio
path_to_slide = '/path/to/wsi.svs'
path_to_annotations = '/path/to/aperio_annotations.xml'
annotations = load_aperio(path_to_annotations)
vis_session = Visualization(
local_slides = [path_to_slide],
local_annotations = [annotations],
components = [
[
SlideMap(),
[
OverlayOptions(),
PropertyViewer()
]
]
]
)
vis_session.start()
You can also access remote tile servers (either through DSATileServer
or CustomTileServer
) as well as annotations stored on a Digital Slide Archive instance.
from fusion_tools import Visualization, DSAHandler
from fusion_tools.components import SlideMap
# Grabbing first item from demo DSA instance
base_url = 'https://demo.kitware.com/histomicstk/api/v1'
item_id = '5bbdeed1e629140048d01bcb'
# Starting the DSAHandler to grab information:
dsa_handler = DSAHandler(
girderApiUrl = base_url
)
# Checking how many annotations this item has:
#print('This item has the following annotations: ')
#print(dsa_handler.query_annotation_count(item=item_id).to_dict('records'))
vis_session = Visualization(
tileservers = [dsa_handler.get_tile_server(item_id)],
components = [
[
SlideMap()
]
]
)
vis_session.start()
You can also use some of segmentation
components for adding labels and annotations to structures in the slide.
Creating annotations on top of structures
Applying labels to many structures at the same time
from fusion_tools import Visualization, DSAHandler
from fusion_tools.components import SlideMap, FeatureAnnotation, BulkLabels
# Grabbing first item from demo DSA instance
base_url = 'https://demo.kitware.com/histomicstk/api/v1'
item_id = '5bbdeed1e629140048d01bcb'
# Starting the DSAHandler to grab information:
dsa_handler = DSAHandler(
girderApiUrl = base_url
)
# Checking how many annotations this item has:
#print('This item has the following annotations: ')
#print(dsa_handler.query_annotation_count(item=item_id).to_dict('records'))
vis_session = Visualization(
tileservers = [dsa_handler.get_tile_server(item_id)],
components = [
[
SlideMap(),
[
FeatureAnnotation(
storage_path = os.getcwd()+'\\tests\\Test_Annotations\\',
labels_format = 'json',
annotations_format = 'rgb'
),
BulkLabels()
]
]
]
)
vis_session.start()
New in fusion-tools>2.0.0!
Now you can add multiple slides to a single visualization session and you can even view them side-by-side!
- By default, components in the same row are linked, or they can interact with each other through callbacks. This can be updated using the "linkage" kwarg when initializing a
Visualization
session. - If two of the same types of components (e.g., two
SlideMap
components) are placed in the same row and "linkage" is set to "row", callbacks will not work. Beware!
from fusion_tools import Visualization
from fusion_tools.components import SlideMap, OverlayOptions, PropertyViewer, PropertyPlotter
from fusion_tools.handler import DSAHandler
# Mixed types of slides and annotations
local_slide_list = ['slide1.tif','slide2.ome.tif','slide3.svs']
local_annotations_list = ['slide1_annotations.xml','slide2 annotations.json','annotations for slide3.h5ad']
dsa_handler = DSAHandler(
girderApiUrl = 'http://example_dsa_address.com/api/v1'
)
dsa_items_list = [
'item_uuid_1',
'item_uuid_2'
]
dsa_tileservers = [dsa_handler.get_tile_server(i) for i in dsa_items_list]
# Setting linkage to "col" to enable side-by-side visualization
vis_sess = Visualization(
local_slides = local_slide_list,
local_annotations = local_annotations_list,
tileservers = dsa_tileservers,
linkage = 'col',
components = [
[
[
SlideMap(),
OverlayOptions(),
PropertyViewer(),
PropertyPlotter()
],
[
SlideMap(),
OverlayOptions(),
PropertyViewer(),
PropertyPlotter()
]
]
],
app_options={'port': 8050}
)
vis_sess.start()
Contributing
Open to contributions. Feel free to submit a PR or post feature requests in Issues
Open Projects:
- Automated segmentation workflow for locally stored images (active-learning, SAM, etc.)
- Monitoring long-running model training/other external processes
- Import anndata spatial --omics dataset (UPDATE (v2.0.0): see
utils.shapes.load_visium
for example loading 10x Visium dataset)
License
fusion-tools
was created by Samuel Border. It is licensed under the terms of the Apache 2.0 License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file fusion_tools-2.2.0.tar.gz
.
File metadata
- Download URL: fusion_tools-2.2.0.tar.gz
- Upload date:
- Size: 113.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 294548494b20c56d4f5083a1c2a429076da49f51d0c7b2138cca9bce588f686c |
|
MD5 | 27c7ec0e8fde7a4ee0545abf0bb22ec4 |
|
BLAKE2b-256 | 01ac8e7a0db8764649b74a95ff3f48576b3ac7c0253a1220bda02388245d8039 |
File details
Details for the file fusion_tools-2.2.0-py3-none-any.whl
.
File metadata
- Download URL: fusion_tools-2.2.0-py3-none-any.whl
- Upload date:
- Size: 102.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 600ee93a00aac59dee11c7732e799a99b846f49ccab63ef9406a52673651d0d8 |
|
MD5 | 686bd8cc07998cfb01a6d219d2848102 |
|
BLAKE2b-256 | 4f66b76accba644dd9b1b3796c6e0299f1027d4ae272431597509ba2b7a11bcf |