Source code for pierogis.ingredients.seasonings.seasoning

"""
seasoning base ingredient
"""

import numpy as np
from PIL import ImageColor

from pierogis.ingredients.ingredient import Ingredient


[docs]class Seasoning(Ingredient): """ Seasonings can perform their computation before the cook stage. Seasonings are masks that use their season function to generate a selection of pixels to be operated on by a cook operation. They can be put into a mix to define a mask for a default target.pixels.shape sized "all passing" array. The can also be added to an ingredient through the season method. Return from cook should be binary (black_pixel, or white_pixel) """
[docs] def prep( self, # pierogi: Pierogi, include: str = None, exclude: str = None, **kwargs ): """ :param pierogi: If set, target will be the pixels that are cooked :param include: color to use for included pixels like little flakes of seasoning. can be hex :param exclude: color to use for excluded pixels """ # self.pierogi = pierogi if include is None: include_pixel = self._white_pixel elif type(include) is str: if include[0] != '#': include = '#' + include include_pixel = ImageColor.getcolor(include, "RGB") else: include_pixel = include self.include_pixel = np.asarray(include_pixel) if exclude is None: exclude_pixel = self._black_pixel elif type(exclude) is str: if exclude[0] != '#': exclude = '#' + exclude exclude_pixel = ImageColor.getcolor(exclude, "RGB") else: exclude_pixel = exclude self.exclude_pixel = np.asarray(exclude_pixel)
[docs] def cook(self, pixels: np.ndarray): """ Pixels that match the include pixel should be set as the include pixel, otherwise set as the exclude pixel This isn't very useful, this is mostly an abstract class. """ # turn pixels into boolean array # True replaces a pixel that matches self.include_pixel boolean_array = np.all( pixels == self.include_pixel, axis=2 ) boolean_array = np.expand_dims(boolean_array, 2) # replace True with include_pixel and False with exclude_pixel binary_pixels = np.where( boolean_array, self.include_pixel, self.exclude_pixel ) return binary_pixels