diff --git a/model_server/base/accessors.py b/model_server/base/accessors.py index 64a9d6832d07dc0a79a77fd01fe3a9768ad31221..a9366156bb6a5fcd63267cd3fb6e319d13bfbe37 100644 --- a/model_server/base/accessors.py +++ b/model_server/base/accessors.py @@ -440,6 +440,11 @@ class PatchStack(InMemoryDataAccessor): else: tifffile.imwrite(fpath, tzcyx, imagej=True) + def write(self, fp: Path, mkdir=True): + if mkdir: + fp.parent.mkdir(parents=True, exist_ok=True) + self.export_pyxcz(fp) + @property def shape_dict(self): return dict(zip(('P', 'Y', 'X', 'C', 'Z'), self.data.shape)) diff --git a/model_server/base/roiset.py b/model_server/base/roiset.py index c558c549400950e8fa3b7bb2acf1fed3d4617809..7a95a94774b92929c824cdde52c3fdd893289360 100644 --- a/model_server/base/roiset.py +++ b/model_server/base/roiset.py @@ -398,8 +398,6 @@ class RoiSet(object): return RoiSet(acc_raw, df, params) - - # TODO: add a generator for the object detection case @staticmethod def from_bounding_boxes( acc_raw: GenericImageDataAccessor, diff --git a/tests/base/test_roiset.py b/tests/base/test_roiset.py index 585ded2117ae0de8e729598f428b664a604c51d7..87a1d88901a98f98f3940a6cdba603f8dea0ce2c 100644 --- a/tests/base/test_roiset.py +++ b/tests/base/test_roiset.py @@ -640,8 +640,8 @@ class TestRoiSetObjectDetection(unittest.TestCase): from skimage.measure import label, regionprops, regionprops_table - mask = self.seg_mask_3d.data_xyz - labels = label(mask) + mask = self.seg_mask_3d + labels = label(mask.data_xyz, connectivity=3) table = pd.DataFrame( regionprops_table(labels) ).rename( @@ -654,16 +654,17 @@ class TestRoiSetObjectDetection(unittest.TestCase): bboxes = table[['y', 'x', 'h', 'w']].to_dict(orient='records') - roiset = RoiSet.from_bounding_boxes( - self.stack_ch_pa, - bboxes, + roiset_bbox = RoiSet.from_bounding_boxes(self.stack_ch_pa, bboxes) - ) + patches_bbox = roiset_bbox.get_patches_acc() + self.assertEqual(len(table), patches_bbox.count) - patches = roiset.get_patches_acc() - self.assertEqual(len(table), patches.count) + # roiset w/ seg for comparison + roiset_seg = RoiSet.from_binary_mask(self.stack_ch_pa, mask) + patches_seg = roiset_seg.get_patches_acc() # TODO: test segments reside in bounding boxes + self.assertEqual(roiset_seg.count, roiset_bbox.count) self.assertTrue(False) class TestRoiSetPolygons(BaseTestRoiSetMonoProducts, unittest.TestCase):