from improcflow.logic import Element, register_element_type class PythonAddition(Element): class_name = "python_addition" def __init__(self, title = None, element_model = None): super(PythonAddition, self).__init__(title = title, element_model = element_model) self.term1 = self.add_input_connector(title = "term1") self.term2 = self.add_input_connector(title = "term2") self.sum = self.add_output_connector(title = "sum") def run(self, debug = False): self.sum.set_value(self.term1.value + self.term2.value) register_element_type(PythonAddition) class PythonSubtraction(Element): class_name = "python_subtraction" def __init__(self, title = None, element_model = None): super(PythonSubtraction, self).__init__(title = title, element_model = element_model) self.term1 = self.add_input_connector(title = "term1") self.term2 = self.add_input_connector(title = "term2") self.difference = self.add_output_connector(title = "difference") def run(self, debug = False): self.difference.set_value(self.term1.value - self.term2.value) register_element_type(PythonSubtraction)
from improcflow.logic import Element, register_element_type import numpy import cv2 class OpenCVMean(Element): class_name = "opencv_mean" def __init__(self, title = None, element_model = None): super(OpenCVMean, self).__init__(title = title, element_model = element_model) self.src = self.add_input_connector(title = "src", data_types = [numpy.ndarray]) self.mean = self.add_output_connector(title = "mean") def run(self, debug = False): avg_list = cv2.mean(self.src.value) self.mean.set_value(avg_list[0]) register_element_type(OpenCVMean)
print self.title, ":: run() :: iteration", iteration print elements_done = 0 for element in self.elements: if element.is_ready() and not element.is_done(): if debug: print self.title, " execute element :", element element.run_or_block(debug = debug) elements_done += 1 if debug: print print self.title, " elements_done =", elements_done print if elements_done == 0: return True return self.run(iteration + 1, debug = debug) def debug_state(self): print "==== FLOW : %s ====" % self.title super(Flow, self).debug_state() for element in self.elements: element.debug_state() print "==== ====" register_element_type(Flow)
return (num_inputs_not_blocked != 1) def run(self, debug = False): input_ok = None for input in self.input_datas: if not input.is_blocked(): if input_ok is None: input_ok = input else: print "2 or more inputs are not blocked!" self.output.set_value(input_ok.value) register_element_type(ConditionalAssignment) def create_loop(title = None): loop_group = ElementGroup(title = title) if title is None: start = LoopStart() stop = LoopStop() else: start = LoopStart(title = title + "_start") stop = LoopStop(title = title + "_stop") loop_group.add_element(start) loop_group.add_element(stop)
def __init__(self, title = None, element_model = None): super(InputData, self).__init__(title = title, element_model = element_model) self.data_in = self.add_input_connector(title = "data_in") self.data = self.add_output_connector(title = "data") def set_value(self, src): self.data_in.set_value(src) if self.flow: self.flow.invalidate_chain(self.data) else: self.data.invalidate_connector() def run(self, debug = False): self.data.set_value(self.data_in.value) register_element_type(InputData) class OutputData(Element): class_name = "output_data" def __init__(self, title = None, element_model = None): super(OutputData, self).__init__(title = title, element_model = element_model) self.data = self.add_input_connector(title = "data") self.data_out = self.add_output_connector(title = "data_out") def result(self): if self.is_ready() and not self.is_blocked(): return self.data.value return None