Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.94 KB | None | 0 0
  1. import cv2
  2. import numpy as np
  3. import pyautogui
  4.  
  5. # init part
  6. face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
  7. eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
  8. detector_params = cv2.SimpleBlobDetector_Params()
  9. detector_params.filterByArea = True
  10. detector_params.maxArea = 1500
  11. detector = cv2.SimpleBlobDetector_create(detector_params)
  12.  
  13.  
  14. def detect_faces(img, cascade):
  15. gray_frame = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  16. coords = cascade.detectMultiScale(gray_frame, 1.3, 5)
  17. if len(coords) > 1:
  18. biggest = (0, 0, 0, 0)
  19. for i in coords:
  20. if i[3] > biggest[3]:
  21. biggest = i
  22. biggest = np.array([i], np.int32)
  23. elif len(coords) == 1:
  24. biggest = coords
  25. else:
  26. return None
  27. for (x, y, w, h) in biggest:
  28. frame = img[y:y + h, x:x + w]
  29. return frame
  30.  
  31.  
  32. def detect_eyes(img, cascade):
  33. gray_frame = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  34. eyes = cascade.detectMultiScale(gray_frame, 1.3, 5)
  35. width = np.size(img, 1)
  36. height = np.size(img, 0)
  37. left_eye = None
  38. right_eye = None
  39. for (x, y, w, h) in eyes:
  40. if y > height / 2:
  41. pass
  42. eyecenter = x + w / 2
  43. print(x, y, w, h)
  44. pyautogui.moveTo(x, y, duration = 1)
  45. if eyecenter < width * 0.5:
  46. left_eye = img[y:y + h, x:x + w]
  47. else:
  48. right_eye = img[y:y + h, x:x + w]
  49. return left_eye, right_eye
  50.  
  51.  
  52. def cut_eyebrows(img):
  53. height, width = img.shape[:2]
  54. eyebrow_h = int(height / 4)
  55. img = img[eyebrow_h:height, 0:width]
  56.  
  57. return img
  58.  
  59.  
  60. def blob_process(img, threshold, detector):
  61. gray_frame = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  62. _, img = cv2.threshold(gray_frame, threshold, 255, cv2.THRESH_BINARY)
  63. img = cv2.erode(img, None, iterations=2)
  64. img = cv2.dilate(img, None, iterations=4)
  65. img = cv2.medianBlur(img, 5)
  66. keypoints = detector.detect(img)
  67. # print(keypoints)
  68. return keypoints
  69.  
  70.  
  71. def nothing(x):
  72. pass
  73.  
  74.  
  75. def main():
  76. cap = cv2.VideoCapture(0)
  77. cv2.namedWindow('image')
  78. cv2.createTrackbar('threshold', 'image', 0, 255, nothing)
  79. while True:
  80. _, frame = cap.read()
  81. face_frame = detect_faces(frame, face_cascade)
  82. if face_frame is not None:
  83. eyes = detect_eyes(face_frame, eye_cascade)
  84. for eye in eyes:
  85. if eye is not None:
  86. threshold = r = cv2.getTrackbarPos('threshold', 'image')
  87. eye = cut_eyebrows(eye)
  88. keypoints = blob_process(eye, threshold, detector)
  89. eye = cv2.drawKeypoints(eye, keypoints, eye, (0, 0, 255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
  90. cv2.imshow('image', frame)
  91. if cv2.waitKey(1) & 0xFF == ord('q'):
  92. break
  93. cap.release()
  94. cv2.destroyAllWindows()
  95.  
  96.  
  97. if __name__ == "__main__":
  98. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement