def run(self): # size of video hight = int(480 / 2) width = int(640 / 2) start_time = time.monotonic() #camera = picamera.PiCamera() vs = VideoStream(usePiCamera = True, resolution = (width, hight), framerate = 10).start() vs.shutter_speed = 70 time.sleep(3.0) counter = 0 doSecondRescale = True while 1: frame = vs.read() if self.eye_closed: if time.monotonic() - start_time >= self.cooldown_time: # open eye after cooldown time if self.eye_closed: print("opening now") servos.open() self.eye_closed = False continue #we want the next frame, this one was done with closed lense, no need processing it # comment next 2 lines if you do not wish for graphical output cv2.imshow("video", frame) cv2.waitKey(1) counter += 1 print(counter) if counter % self.every == 0: if self.eye_closed: continue scale = 1.25 if doSecondRescale else 1.3 # search frame for faces status = Face.faceInPicture(img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY), doSecondRescale = doSecondRescale, scale = scale) if status == 2: text = termcolor.colored("FoundFace", 'green') print(text) servos.close() self.eye_closed = True start_time = time.monotonic() print("Closed - sleeping 10 seconds") elif status == 1: text = termcolor.colored("Maybe", 'yellow') doSecondRescale = False print(text) else: text = termcolor.colored("No", 'cyan') doSecondRescale = True print(text)
def run(self): """ Lightbar for confidence of smile """ hight = int(480 / 2) width = int(640 / 2) vs = VideoStream(usePiCamera=True, resolution=(width, hight), framerate=10).start() vs.shutter_speed = 70 time.sleep(3.0) counter = 0 doSecondRescale = True while 1: frame = vs.read() if self.store_next_img: self.store_next_img = False name = str(time.time()) + ".png" cv2.imwrite(name, frame) # for usage without gui comment next line cv2.imshow("video", frame) cv2.waitKey(1) counter += 1 print(counter, end="\t") if counter % 1 == 0: scale = 1.25 if doSecondRescale else 1.3 smiles = Face.smile(img=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY), doSecondRescale=doSecondRescale, scale=scale) average = self.movingMedian(0) if len( smiles) == 0 else self.movingMedian(smiles[0]) print(" Average: ", end="") # Debug output - the last measured smile confidences, used for median print(self._median_list) average = min(average, 5) if self.shouldRun: ls.bar(average / 5, 100, 0, 0)