Skip to content
Snippets Groups Projects
Commit 2526078a authored by Christopher Randolph Rhodes's avatar Christopher Randolph Rhodes
Browse files

all roiset_obmap tests pass

parent 7aa5e80e
No related branches found
No related tags found
No related merge requests found
......@@ -118,7 +118,6 @@ def roiset_object_map_pipeline(
**k['segmentation'],
).last
# d['mask'] = models['pixel_classifier_segmentation_model'].label_pixel_class(d.last)
d['labeled'] = get_label_ids(d.last)
rois = RoiSet.from_object_ids(d['input'], d['labeled'], RoiSetMetaParams(**k['roi_params']))
......@@ -132,5 +131,6 @@ def roiset_object_map_pipeline(
obmod,
)
d[obmod_name] = rois.get_object_class_map(obmod_name)
else:
d['objects_unclassified'] = d.last.apply(lambda x: ((x > 0) * 1).astype('uint16'))
return d, rois
......@@ -3,12 +3,11 @@ from typing import Dict
from fastapi import APIRouter, HTTPException
from pydantic import Field
from model_server.base.accessors import GenericImageDataAccessor
from model_server.base.models import Model
from model_server.base.pipelines.shared import call_pipeline
from base.pipelines.shared import PipelineTrace, PipelineParams, PipelineRecord
from ....base.accessors import GenericImageDataAccessor
from ....base.models import Model
from ....base.pipelines.shared import call_pipeline, PipelineTrace, PipelineParams, PipelineRecord
from model_server.extensions.ilastik.models import IlastikPixelClassifierModel, IlastikObjectClassifierFromPixelPredictionsModel
from ..models import IlastikPixelClassifierModel, IlastikObjectClassifierFromPixelPredictionsModel
router = APIRouter(
prefix='/pipelines',
......
......@@ -9,7 +9,7 @@ from tests.base.test_model import DummyInstanceSegmentationModel
import model_server.conf.testing as conf
from model_server.base.pipelines.roiset_obmap import RoiSetObjectMapParams, roiset_object_map_pipeline
from model_server.extensions.ilastik.models import IlastikPixelClassifierModel, IlastikPixelClassifierParams
import model_server.extensions.ilastik.models as ilm
data = conf.meta['image_files']
output_path = conf.meta['output_path']
......@@ -23,9 +23,9 @@ class BaseTestRoiSetMonoProducts(object):
def fpi(self):
return data['multichannel_zstack_raw']['path'].__str__()
@property
def fppx(self):
return classifiers['px']['path'].__str__()
# @property
# def fppx(self):
# return classifiers['px']['path'].__str__()
@property
def stack(self):
......@@ -70,21 +70,27 @@ class BaseTestRoiSetMonoProducts(object):
'expand_box_by': [128, 2]
}
def _get_models(self):
def _get_models(self): # tests can either use model objects directly, or load in API via project file string
fp_px = classifiers['px']['path'].__str__()
fp_ob = classifiers['seg_to_obj']['path'].__str__()
return {
'pixel_classifier_segmentation': {
'name': 'ilastik_px_mod',
'project_file': self.fppx,
'model': IlastikPixelClassifierModel(
IlastikPixelClassifierParams(
project_file=self.fppx
'project_file': fp_px,
'model': ilm.IlastikPixelClassifierModel(
ilm.IlastikPixelClassifierParams(
project_file=fp_px,
)
)
},
'object_classifier': {
'name': 'dummy_ob_mod',
'project_file': classifiers['seg_to_obj']['path'].__str__(),
'model': DummyInstanceSegmentationModel()
'name': 'ilastik_ob_mod',
'project_file': fp_ob,
'model': ilm.IlastikObjectClassifierFromSegmentationModel(
ilm.IlastikParams(
project_file=fp_ob
)
)
},
}
......@@ -189,7 +195,7 @@ class TestRoiSetWorkflowOverApi(conf.TestServerBaseClass, BaseTestRoiSetMonoProd
'accessor_id': self.test_load_input_accessor(),
'pixel_classifier_segmentation_model_id': self.test_load_pixel_classifier(),
'object_classifier_model_id': ob_classifer_id,
'segmentation_channel': 0,
'segmentation': {'channel': 0},
'patches_channel': 1,
'roi_params': self._get_roi_params(),
'export_params': self._get_export_params(),
......@@ -205,11 +211,11 @@ class TestRoiSetWorkflowOverApi(conf.TestServerBaseClass, BaseTestRoiSetMonoProd
def test_workflow_with_object_classifier(self):
acc = self._object_map_workflow(self.test_load_object_classifier())
self.assertTrue(np.all(acc._unique()[0] == [0, 1]))
self.assertTrue(np.all(acc._unique()[0] == [0, 1, 2]))
def test_workflow_without_object_classifier(self):
acc = self._object_map_workflow(None)
self.assertTrue(np.all(acc._unique()[0] == [0, 255]))
self.assertTrue(np.all(acc._unique()[0] == [0, 1]))
# TODO: test boundary pipeline in separate module
# def test_object_map_workflow_boundary_channel(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment