From f1ceaefba7ee7dcdfd166baef18cf4de1a938fbe Mon Sep 17 00:00:00 2001
From: Christopher Rhodes <christopher.rhodes@embl.de>
Date: Wed, 10 Apr 2024 15:07:43 +0200
Subject: [PATCH] Handle sporadic ilastik error when patches are close in size
 to largest filters

---
 model_server/extensions/ilastik/models.py | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/model_server/extensions/ilastik/models.py b/model_server/extensions/ilastik/models.py
index 30e7a45e..db7ba835 100644
--- a/model_server/extensions/ilastik/models.py
+++ b/model_server/extensions/ilastik/models.py
@@ -128,11 +128,16 @@ class IlastikPixelClassifierModel(IlastikModel, SemanticSegmentationModel):
         """
         Iterative over a patch stack, call inference separately on each cropped patch
         """
+        from ilastik.applets.featureSelection.opFeatureSelection import FeatureSelectionConstraintError
+
         nc = len(self.labels)
         data = np.zeros((img.count, *img.hw, nc, img.nz), dtype=float)  # interpret as PYXCZ
         for i in range(0, img.count):
             sl = img.get_slice_at(i)
-            data[i][sl[0], sl[1], :, sl[3]] = self.infer(img.iat(i, crop=True))[0].data
+            try:
+                data[i][sl[0], sl[1], :, sl[3]] = self.infer(img.iat(i, crop=True))[0].data
+            except FeatureSelectionConstraintError: # occurs occasionally on small patches
+                continue
         return PatchStack(data), {'success': True}
 
     def label_pixel_class(self, img: GenericImageDataAccessor, px_class: int = 0, px_prob_threshold=0.5, **kwargs):
-- 
GitLab