Skip to content
Snippets Groups Projects
ilastik_obmaps.py 3.29 KiB
Newer Older
from client import hit_endpoint
from os.path import basename, dirname

from ij import IJ
from ij import ImagePlus

def setup(where, px_ilp):
    # configure input and output paths
    resp = hit_endpoint(
        'PUT',
        '/paths/watch_input',
        {
            'path': where,
        }
    )
    assert resp.status_code == 200, 'Error setting up image directory'
    resp = hit_endpoint(
        'PUT',
        '/paths/watch_output',
        {
            'path': where,
        }
    )
    assert resp.status_code == 200, 'Error setting up image directory'

    # load pixel classifier
    resp = hit_endpoint(
        'PUT',
        '/ilastik/pixel_classification/load/',
        {
            'project_file': px_ilp,
            'duplicate': False,
        },
    )
    assert resp.status_code == 200, 'Error loading pixel classifier: ' + {px_ilp}
    return resp['model_id']


def ilastik_map_objects_simple(imp, px_ilp, ob_ilp, channel):
    """

    :param pixel_classifier: (str)
    :param object_classifier: (str)
    :return: ImagePlus
    """
    # get info from input ImagePlus
    abspath = imp.getProp('Location')

    # assert imp is not z-stack
    id_px_mod = setup(dirname(abspath), px_ilp)

    # load object classifier
    resp = hit_endpoint(
        'PUT', '/ilastik/pxmap_to_obj/load/',
        {
            'project_file': ob_ilp,
            'duplicate': False,
        },
    )
    assert resp.status_code == 200, 'Error loading object classifier: ' + {ob_ilp}
    id_ob_mod = resp['model_id']

    # run inference
    resp = hit_endpoint(
        'PUT',
        '/ilastik/pixel_then_object_classification/infer',
        {
            'px_model_id': id_px_mod,
            'ob_model_id': id_ob_mod,
            'input_filename': basename(abspath),
            'channel': channel,
        }
    )
    assert resp.status_code == 200, 'Error calling workfow'
    obmap = resp.json()['object_map_filepath']

    return obmap # obviously need imp

def ilastik_map_objects_with_zmask(imp, px_ilp, ob_ilp, pxmap_threshold, pxmap_foreground_channel, segmentation_channel, patches_channel, zmask_filters):
    """

    :param pixel_classifier: (str)
    :param object_classifier: (str)
    :return: ImagePlus
    """
    # get info from input ImagePlus
    abspath = imp.getProp('Location')

    # assert imp is not z-stack
    id_px_mod = setup(dirname(abspath), px_ilp)

    # load object classifier
    resp = hit_endpoint(
        'PUT', '/ilastik/seg_to_obj/load/',
        {
            'project_file': ob_ilp,
            'duplicate': False,
        },
    )
    assert resp.status_code == 200, 'Error loading object classifier: ' + {ob_ilp}
    id_ob_mod = resp['model_id']

    # run inference
    resp = hit_endpoint(
        'PUT',
        '/chaeo/classify_zstack/infer',
        {
            'px_model_id': id_px_mod,
            'ob_model_id': id_ob_mod,
            'input_filename': basename(abspath),
            'pxmap_threshold': pxmap_threshold,
            'pxmap_foreground_channel': pxmap_foreground_channel,
            'segmentation_channel': segmentation_channel,
            'patches_channel': patches_channel,
            'zmask_filters': zmask_filters,
        }
    )
    assert resp.status_code == 200, 'Error calling workfow'
    obmap = resp.json()['output_path']

    return obmap # obviously need imp