def testDetectCircleParallel(self): """A test which executes a full workflow on image containing a white circle in the center of an black image in parallel """ # generate circle image w, h = 2000, 2000 image = np.zeros((w, h, 3), dtype="uint8") image = draw_circle(image, 750, (1000, 1000), [129, 129, 129]) # build workflow builder = SLDCWorkflowBuilder() builder.set_n_jobs(2) builder.set_segmenter(CircleSegmenter()) builder.add_catchall_classifier(CircleClassifier()) builder.set_parallel_dc(True) workflow = builder.get() # process image workflow_info = workflow.process(NumpyImage(image)) # Check results self.assertEqual(len(workflow_info.polygons), 1) # Check circle polygon = workflow_info.polygons[0] self.assertEqual( relative_error(polygon.area, np.pi * 750 * 750) <= 0.005, True) self.assertEqual( relative_error(polygon.centroid.x, 1000) <= 0.005, True) self.assertEqual( relative_error(polygon.centroid.y, 1000) <= 0.005, True) assert_array_equal(workflow_info.labels, [1]) assert_array_almost_equal(workflow_info.probas, [1.0]) assert_array_equal(workflow_info.dispatches, ["catchall"]) # check other information timing = workflow_info.timing self.assertEqual( timing.get_phases_hierarchy(), { "workflow.sldc": { "detect": { "load": None, "segment": None, "locate": None }, "merge": None, "dispatch_classify": { "dispatch": None, "classify": None } } })
def testSLDCWorkflowWithOneShotDispatcher(self): # pre build components segmenter = DumbSegmenter() dispatcher = DumbDispatcher() classifier = DumbClassifier() rule = DumbRule() logger = StandardOutputLogger(Logger.DEBUG) builder = SLDCWorkflowBuilder() builder.set_tile_size(512, 768) builder.set_overlap(3) builder.set_distance_tolerance(5) builder.set_n_jobs(5) builder.set_logger(logger) builder.set_parallel_dc(True) builder.set_tile_builder(None) with self.assertRaises(MissingComponentException): builder.get() builder.set_segmenter(segmenter) with self.assertRaises(MissingComponentException): builder.get() builder.set_default_tile_builder() with self.assertRaises(MissingComponentException): builder.get() builder.set_one_shot_dispatcher(dispatcher, {"default": classifier}) with self.assertRaises(InvalidBuildingException): builder.add_classifier(rule, classifier, dispatching_label="default") with self.assertRaises(InvalidBuildingException): builder.add_catchall_classifier(classifier, dispatching_label="default") workflow = builder.get() self.assertIsInstance(workflow, SLDCWorkflow) self.assertEqual(workflow._segmenter, segmenter) self.assertEqual(workflow._n_jobs, 5) self.assertEqual(workflow._tile_overlap, 3) self.assertEqual(workflow._tile_max_height, 512) self.assertEqual(workflow._tile_max_width, 768) self.assertEqual(workflow.logger, logger) self.assertIsInstance(workflow._tile_builder, DefaultTileBuilder) self.assertEqual(workflow._dispatch_classifier._dispatcher, dispatcher) self.assertEqual(len(workflow._dispatch_classifier._classifiers), 1) self.assertEqual(workflow._dispatch_classifier._classifiers[0], classifier)
def testDetectCircleParallel(self): """A test which executes a full workflow on image containing a white circle in the center of an black image in parallel """ # generate circle image w, h = 2000, 2000 image = np.zeros((w, h, 3), dtype="uint8") image = draw_circle(image, 750, (1000, 1000), [129, 129, 129]) # build workflow builder = SLDCWorkflowBuilder() builder.set_n_jobs(2) builder.set_segmenter(CircleSegmenter()) builder.add_catchall_classifier(CircleClassifier()) builder.set_parallel_dc(True) workflow = builder.get() # process image workflow_info = workflow.process(NumpyImage(image)) # Check results self.assertEqual(len(workflow_info.polygons), 1) # Check circle polygon = workflow_info.polygons[0] self.assertEqual(relative_error(polygon.area, np.pi * 750 * 750) <= 0.005, True) self.assertEqual(relative_error(polygon.centroid.x, 1000) <= 0.005, True) self.assertEqual(relative_error(polygon.centroid.y, 1000) <= 0.005, True) assert_array_equal(workflow_info.labels, [1]) assert_array_almost_equal(workflow_info.probas, [1.0]) assert_array_equal(workflow_info.dispatches, ["catchall"]) # check other information timing = workflow_info.timing self.assertEqual(timing.get_phases_hierarchy(), {"workflow.sldc": { "detect": {"load": None, "segment": None, "locate": None}, "merge": None, "dispatch_classify": {"dispatch": None, "classify": None} }})