import numpy as np import cv2 import sys import time input = "fileName.avi"; output = "fileName.avi"; if len(sys.argv) > 1: fileName = sys.argv[1]; input = fileName + ".avi"; print(input); output = fileName + time.strftime("%Y%U%w%H%M%S") + ".avi"; cap = cv2.VideoCapture(input); else: cap = cv2.VideoCapture(0); #fourcc = cv2.cv.CV_FOURCC(*'XVID'); fourcc = cv2.VideoWriter_fourcc(*'XVID'); if len(sys.argv) > 1: out = cv2.VideoWriter(output, fourcc, 20, (640, 480), True); else: outputStr = "output" + time.strftime("%Y%U%w%H%M%S") + ".avi"; out = cv2.VideoWriter(outputStr, fourcc, 20.0, (640, 480)); face_cascade_default = cv2.CascadeClassifier('haarcascade_frontalface_default.xml'); face_cascade_alt = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml'); face_cascade_alt2 = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml'); face_cascade_alt_tree = cv2.CascadeClassifier('haarcascade_frontalface_alt_tree.xml'); face_cascade_profile = cv2.CascadeClassifier('haarcascade_profileface.xml'); eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml'); mouth_cascade = cv2.CascadeClassifier('Mouth.xml'); nose_cascade = cv2.CascadeClassifier('Nariz.xml'); #smile_cascade = cv2.CascadeClassifier('smiles11Stage07042018.xml'); smile_cascade = cv2.CascadeClassifier('cascade07212021.xml'); last_y_value = 0; while True: ret, img = cap.read(); # if ret==True: # img = cv2.flip(img,1) if ret == False: break; if img is None: break; gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY); face_cascade = face_cascade_default; faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=2, flags=cv2.CASCADE_SCALE_IMAGE); if faces is None: face_cascade = face_cascade_profile; faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=2, flags=cv2.CASCADE_SCALE_IMAGE); if faces is None: face_cascade = face_cascade_alt; faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=2, flags=cv2.CASCADE_SCALE_IMAGE); if faces is None: face_cascade = face_cascade_alt2; faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=2, flags=cv2.CASCADE_SCALE_IMAGE); if faces is None: face_cascade = face_cascade_alt_tree; faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=2, flags=cv2.CASCADE_SCALE_IMAGE); # faces = face_cascade.detectMultiScale(gray, 1.3, 2, flags=cv2.CASCADE_SCALE_IMAGE); if faces is None: print("No face found"); else: for (x, y, w, h) in faces: last_y_value = y; head = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2); roi_gray = gray[y:y + h, x:x + w]; roi_color = img[y:y + h, x:x + w]; eyes = eye_cascade.detectMultiScale(roi_gray, flags=cv2.CASCADE_SCALE_IMAGE); # eyes = eye_cascade.detectMultiScale(roi_gray); y_eye = 0; cntr = 0; roi_eye = None; for (ex, ey, ew, eh) in eyes: cntr += 1; if cntr == 1: y_eye = ey; if ey != last_y_value: if ey < float(h) / 2.0: Eyes = cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2); last_y_value = ey; roi_eye = gray[y:ey + eh, x:ex + ew]; # eye_smile = smile_cascade.detectMultiScale(roi_eye, 1.01, 0, flags=cv2.CASCADE_SCALE_IMAGE); if roi_eye is None: print("Didn't find any eyes"); else: try: eye_smile = smile_cascade.detectMultiScale(roi_eye, 1.01, 0, flags=cv2.CASCADE_SCALE_IMAGE); except: print("failed to find an eye smile"); pass; try: for (sx, sy, sw, sh) in eye_smile: Eye_Smile = cv2.putText(img, "Smiling Eyes", (10, 100), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 255, 255), 3); except: print("failed to print an eye smile"); pass; # nose = nose_cascade.detectMultiScale(roi_gray, flags=cv2.CASCADE_SCALE_IMAGE); nose = nose_cascade.detectMultiScale(roi_gray); for (nx, ny, nw, nh) in nose: if ny > last_y_value: last_y_value = ny + float(nh) / 2.0; Nose = cv2.rectangle(roi_color, (nx, ny), (nx + nw, ny + nh), (255, 0, 255), 2); # mouth = mouth_cascade.detectMultiScale(roi_gray, flags=cv2.CASCADE_SCALE_IMAGE); mouth = mouth_cascade.detectMultiScale(roi_gray); roi_mouth = None; for (mx, my, mw, mh) in mouth: if my > last_y_value: Mouth = cv2.rectangle(roi_color, (mx, my), (mx + mw, my + mh), (0, 0, 255), 2); roi_mouth = gray[y:my + 2*mh, x:mx + 2*mw]; # mouth_smile = smile_cascade.detectMultiScale(roi_mouth, 1.01, 0, flags=cv2.CASCADE_SCALE_IMAGE); if roi_mouth is None: print( "No mouth found"); else: try: mouth_smile = smile_cascade.detectMultiScale(roi_mouth, 1.01, 0); except: print("failed to find a mouth smile"); pass; try: for (sx, sy, sw, sh) in mouth_smile: Mouth_Smile = cv2.putText(img, "Smiling Mouth", (10, 300), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 255, 255),3) except: print("failed to print a mouth smile"); pass; out.write(img); cv2.imshow('img', img); k = cv2.waitKey(30) & 0xff if k == 27: break; cap.release(); out.release(); cv2.destroyAllWindows()