def __init__(self, args): # Imaging device - must be a connected camera (not an ip camera or mjpeg # stream) serial = args.serial baud = args.baud self.send_serial = False self.send_udp = False if serial: self.send_serial = True if not baud: baud = 9600 else: baud = int(baud) self.serial = Serial(port=serial, baudrate=baud) udp = args.udp if udp: self.send_udp = True if ":" not in udp: ip = udp port = 5005 else: ip, port = udp.split(":") port = int(port) self.udp = (ip, port) self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # Internet # UDP self.cameras = [] self.selected_cam = 0 for i in xrange(3): camera = Camera(camera=i) # first camera by default if camera.valid or not len(self.cameras): self.cameras.append(camera) else: break self.w, self.h = 0, 0 self.pressed = 0 # Containerized analysis of recieved image frames (an openMDAO assembly) # is defined next. # This assembly is designed to handle all image & signal analysis, # such as face detection, forehead isolation, time series collection, # heart-beat detection, etc. # Basically, everything that isn't communication # to the camera device or part of the GUI self.processor = findFaceGetPulse(bpm_limits=[50, 160], data_spike_limit=2500.0, face_detector_smoothness=10.0) # Init parameters for the cardiac data plot self.bpm_plot = False self.plot_title = "Data display - raw signal (top) and PSD (bottom)" # Maps keystrokes to specified methods # (A GUI window must have focus for these to work) self.key_controls = { "s": self.toggle_search, "d": self.toggle_display_plot, "c": self.toggle_cam, "f": self.write_csv, }
def __init__(self): self.bpm_detector = findFaceGetPulse( bpm_limits=[50, 160], data_spike_limit=2500., face_detector_smoothness=10., cascade_path=self._face_cascade) self.bpm_attempts = 0 self.last_bpm = 61.2 self.face_detector = self.make_face_detector() self.smile_detector = Detector('smile') self.heartbeat_deque = deque() self.likeness = 0