Skip to main content

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

To access interactive dashboard components and functionality use:

$ pip install fusion-tools[interactive]

To just use the shapes utility functions and dataset classes (SegmentationDataset and ClassificationDataset) use:

$ 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.visualization 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.visualization 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.visualization import Visualization
from fusion_tools.handler.dsa_handler import 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.visualization import Visualization
from fusion_tools.handler.dsa_handler import 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.visualization import Visualization
from fusion_tools.components import SlideMap, OverlayOptions, PropertyViewer, PropertyPlotter
from fusion_tools.handler.dsa_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

fusion_tools-3.6.8.tar.gz (286.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fusion_tools-3.6.8-py3-none-any.whl (253.3 kB view details)

Uploaded Python 3

File details

Details for the file fusion_tools-3.6.8.tar.gz.

File metadata

  • Download URL: fusion_tools-3.6.8.tar.gz
  • Upload date:
  • Size: 286.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.3

File hashes

Hashes for fusion_tools-3.6.8.tar.gz
Algorithm Hash digest
SHA256 7080a9eaeac873d803417f27a79c99c75d046fc55f059bc0a7137719f76f22d1
MD5 5bbabb5eeabb097c2c5065be581b08fc
BLAKE2b-256 460d0963320136708703c8f45bc22f73ba05aedd897ed1cf8ad9b6013d63ee5f

See more details on using hashes here.

File details

Details for the file fusion_tools-3.6.8-py3-none-any.whl.

File metadata

  • Download URL: fusion_tools-3.6.8-py3-none-any.whl
  • Upload date:
  • Size: 253.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.3

File hashes

Hashes for fusion_tools-3.6.8-py3-none-any.whl
Algorithm Hash digest
SHA256 f12e93405aef5fa2a79dc334a2dd260689818b59096c9bef86aed0e58cbc540b
MD5 af7a7b62ce7693472b03a05cf15f1713
BLAKE2b-256 1b5fce8a5e08f70ce5297c2941b9d4c659bc2bf58e703dc69137a4167cb64c71

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page