Skip to main content

Utility functions for generating, saving, and converting annotation files

Project description

fusion-tools

Some utilities, accession, and visualization tools for data derived from FUSION (Functional Unit State Identification in WSIs).

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 LocalTileServer and SlideMap class:

from fusion_tools import Visualization
from fusion_tools.tileserver import LocalTileServer
from fusion_tools.components import SlideMap

import threading

path_to_slide = '/path/to/wsi.svs'

tile_server_port = '8050'
tile_server = LocalTileServer(
    local_image_path = path_to_slide
)

new_thread = threading.Thread(target = tile_server.start, name = 'tile-server', args = [tile_server_port])
new_thread.daemon = True
new_thread.start()

vis_session = Visualization(
    components = [
        [
            SlideMap(
                tile_server = tile_server,
                annotations = None
            )
        ]
    ]
)

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 ] ] ] )

import threading
from fusion_tools import Visualization
from fusion_tools.tileserver import LocalTileServer
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)

tile_server_port = '8050'
tile_server = LocalTileServer(
    local_image_path = path_to_slide
)

# Starting LocalTileServer
new_thread = threading.Thread(target = tile_server.start, name = 'local_tile_server', args = [tile_server_port])
new_thread.daemon = True
new_thread.start()

vis_session = Visualization(
    components = [
        [
            SlideMap(
                tile_server = tile_server,
                annotations = annotations
            ),
            [
                OverlayOptions(
                    geojson_anns = annotations
                ),
                PropertyViewer(
                    geojson_list = annotations
                )
            ]
        ]
    ]
)

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.tileserver import DSATileServer
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 visualization session
tile_server = DSATileServer(
    api_url = base_url,
    item_id = item_id
)

# 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'))

annotations = dsa_handler.get_annotations(
    item = item_id
)

vis_session = Visualization(
    components = [
        [
            SlideMap(
                tile_server = tile_server,
                annotations = annotations
            )
        ]
    ]
)

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.tileserver import DSATileServer
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 visualization session
tile_server = DSATileServer(
    api_url = base_url,
    item_id = item_id
)

# 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'))

annotations = dsa_handler.get_annotations(
    item = item_id
)

vis_session = Visualization(
    components = [
        [
            SlideMap(
                tile_server = tile_server,
                annotations = annotations
            ),
            [
                FeatureAnnotation(
                    storage_path = os.getcwd()+'\\tests\\Test_Annotations\\',
                    tile_server = tile_server,
                    labels_format = 'json',
                    annotations_format = 'rgb'
                ),
                BulkLabels(
                    geojson_anns = annotations,
                    tile_server = tile_server,
                    storage_path = os.getcwd()+'\\tests\\Test_Annotations\\'
                )
            ]
        ]
    ]
)

vis_session.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

License

fusion-tools was created by Samuel Border. It is licensed under the terms of the Apache 2.0 License

Project details


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-0.0.10.tar.gz (13.2 kB view hashes)

Uploaded Source

Built Distribution

fusion_tools-0.0.10-py3-none-any.whl (7.2 kB view hashes)

Uploaded Python 3

Supported by

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