def test_Enumerate(): with Pipeline() as pipeline: a = Unpack(range(10)) i = Enumerate() stream = pipeline.transform_stream() for obj in stream: assert obj[a] == obj[i]
frame_fn = Format(os.path.join(ANNOTATED, "{name}.jpg"), name=name) ImageWriter(frame_fn, mask) # Find objects regionprops = FindRegions( mask, img_gray, min_area=1000, padding=10, warn_empty=name ) # For an object, extract a vignette/ROI from the image roi_orig = ExtractROI(img, regionprops, bg_color=255) # For an object, extract a vignette/ROI from the image roi_mask = ExtractROI(mask, regionprops, bg_color=255) # Generate an object identifier i = Enumerate() #Call(print,i) object_id = Format("{name}_{i:d}", name=name, i=i) #Call(print,object_id) object_fn = Format(os.path.join(OBJECTS, "{name}.jpg"), name=object_id) ImageWriter(object_fn, roi_orig) # Calculate features. The calculated features are added to the global_metadata. # Returns a Variable representing a dict for every object in the stream. meta = CalculateZooProcessFeatures( regionprops, prefix="object_", meta=global_metadata )
from morphocut.contrib.ecotaxa import EcotaxaWriter from morphocut.contrib.zooprocess import CalculateZooProcessFeatures from morphocut.file import Glob from morphocut.image import FindRegions, ImageReader from morphocut.parallel import ParallelPipeline from morphocut.str import Format from morphocut.stream import Enumerate, Unpack # First, a Pipeline is defined that contains all operations # that should be carried out on the objects of the stream. with Pipeline() as p: # Corresponds to `for base_path in ["/path/a", "/path/b", "/path/c"]:` base_path = Unpack(["/path/a", "/path/b", "/path/c"]) # Number the objects in the stream running_number = Enumerate() # Call calls regular Python functions. # Here, a subpath is appended to base_path. pattern = Call(os.path.join, base_path, "subpath/to/input/files/*.jpg") # Corresponds to `for path in glob(pattern):` path = Glob(pattern) # Remove path and extension from the filename source_basename = Call(lambda x: os.path.splitext(os.path.basename(x))[0], path) with ParallelPipeline(): # The following operations are distributed among multiple # worker processes to speed up the calculations.