def main(displayHistory=True): #Window for past frames framesDiffHistory = [(getBlankFrameDiff(), getBlankFrameDiff()) for i in range(framesInHistory)] lastEyes = None #Load model classifier classifier = Classifier() #Start thread to make predictions classifier.startPredictions() #Initialize webcam vs = WebcamVideoStream(src=0).start() #For FPS computation t0 = -1 #Face/eyes detector detector = Detector() print "Starting eye recognition..." while True: #Compute FPS dt = time.time() - t0 fps = 1 / dt t0 = time.time() #Limit FPS with wait waitMs = 5 key = cv2.waitKey(waitMs) & 0xFF #Get image from webcam, convert to grayscale and resize fullFrame = vs.read() fullFrame = cv2.cvtColor(fullFrame, cv2.COLOR_BGR2GRAY) frame = imutils.resize(fullFrame, width=300) #Find face faceBB = detector.getFace(frame) if faceBB is None: #Invalidate eyes bounding box as all will change lastEyes = None detector.resetEyesBB() continue #Get low resolution face coordinates x, y, w, h = faceBB face = frame[y:y + h, x:x + w] #Apply to high resolution frame xScale = fullFrame.shape[1] / frame.shape[1] yScale = fullFrame.shape[0] / frame.shape[0] x, y, w, h = x * xScale, y * yScale, w * xScale, h * yScale fullFace = fullFrame[y:y + h, x:x + w] #Find eyes on high resolution face eyes = detector.getEyes(fullFace) if eyes is None: #Reset last eyes lastEyes = None continue eye0, eye1 = eyes #Process (normalize, resize) eye0 = process(eye0) eye1 = process(eye1) #Reshape for dataset eye0 = np.reshape(eye0, [datasetImageSize, datasetImageSize, 1]) eye1 = np.reshape(eye1, [datasetImageSize, datasetImageSize, 1]) #We have a recent picture of the eyes if lastEyes is not None: #Load previous eyes eye0previous, eye1previous = lastEyes #Compute diffs diff0 = getDifferenceFrame(eye0, eye0previous) diff1 = getDifferenceFrame(eye1, eye1previous) #Display/debug displayDiff = False if displayDiff: displayCurrentDiff(eye0, eye1, eye0previous, eye1previous, stopFrame=False) #Crop beginning then add new to end framesDiffHistory = framesDiffHistory[1:] framesDiffHistory.append([diff0, diff1]) #Keep current as last frame lastEyes = [eye0, eye1] #Note: this is not time consuming if displayHistory: displayHistoryDiffs(framesDiffHistory, fps) #Extract each eyes X0, X1 = zip(*framesDiffHistory) #Reshape as a tensor (NbExamples,SerieLength,Width,Height,Channels) X0 = np.reshape(X0, [ -1, len(framesDiffHistory), datasetImageSize, datasetImageSize, 1 ]) X1 = np.reshape(X1, [ -1, len(framesDiffHistory), datasetImageSize, datasetImageSize, 1 ]) #Save history to Classifier classifier.X0 = X0 classifier.X1 = X1