diff --git a/model_server/accessors.py b/model_server/accessors.py
index 1bb5b6b4b176397660ead624ae704e8b9808992a..0e5e2cc9d827de70dae8a37688fe8af8c5b2def9 100644
--- a/model_server/accessors.py
+++ b/model_server/accessors.py
@@ -1,7 +1,6 @@
 from abc import ABC, abstractmethod
 import os
 from pathlib import Path
-from typing import Dict
 
 import numpy as np
 from skimage.io import imread
@@ -9,6 +8,8 @@ from skimage.io import imread
 import czifile
 import tifffile
 
+from model_server.process import is_mask
+
 class GenericImageDataAccessor(ABC):
 
     @abstractmethod
@@ -34,13 +35,7 @@ class GenericImageDataAccessor(ABC):
         return True if self.shape_dict['Z'] > 1 else False
 
     def is_mask(self):
-        if self._data.dtype == 'bool':
-            return True
-        elif self._data.dtype == 'uint8':
-            unique = np.unique(self._data)
-            if unique.shape[0] == 2 and np.all(unique == [0, 255]):
-                return True
-        return False
+        return is_mask(self._data)
 
     def get_one_channel_data (self, channel: int):
         c = int(channel)
diff --git a/model_server/process.py b/model_server/process.py
index 767cd1f66af5f8489cda8492107eb029f1f65e03..481282237964ef147821fe99f79f025cf768c948 100644
--- a/model_server/process.py
+++ b/model_server/process.py
@@ -6,6 +6,20 @@ from math import ceil, floor
 import numpy as np
 from skimage.exposure import rescale_intensity
 
+
+def is_mask(img):
+    """
+    Return True if an image represents a binary mask
+    :param img: np.ndarray
+    """
+    if img.dtype == 'bool':
+        return True
+    elif img.dtype == 'uint8':
+        unique = np.unique(img)
+        if unique.shape[0] == 2 and np.all(unique == [0, 255]):
+            return True
+    return False
+
 def pad(yxcz, mpx: int):
     """
     Pad and crop image data in Y and X axes to meet specific dimension