Untitled
unknown
plain_text
2 years ago
2.9 kB
8
Indexable
import pygame
import math
import cv2
import numpy as np
pygame.init()
# Set up the Pygame screen
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Pupil Tracking")
# Set up the OpenCV webcam
cap = cv2.VideoCapture(2)
# Set up a separate window for face tracking
cv2.namedWindow("Face Tracking")
def update():
pass
def draw():
screen.fill((0, 0, 0))
def draw_eye(eye_x, eye_y, pupil_x, pupil_y):
pygame.draw.circle(screen, (255, 255, 255), (eye_x, eye_y), 50)
pygame.draw.circle(screen, (0, 0, 100), (pupil_x, pupil_y), 15)
# Function to detect faces and return the center of the first detected face
def detect_face(frame):
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
if len(faces) > 0:
x, y, w, h = faces[0]
return (x + w // 2, y + h // 2)
else:
return None
# Function to clamp a value within a specified range
def clamp(value, minimum, maximum):
return max(minimum, min(value, maximum))
# Get the webcam frame
ret, frame = cap.read()
if ret:
# Detect face
face_position = detect_face(frame)
if face_position:
# Convert face position to Pygame coordinates
face_x, face_y = face_position
face_x = int(face_x / cap.get(3) * screen.get_width())
face_y = int(face_y / cap.get(4) * screen.get_height())
# Pupil limits within the eye
eye_center_x, eye_center_y = 200, 200
pupil_limit_radius = 30
# Calculate pupil position with limits
pupil_x = clamp(face_x - 50, eye_center_x - pupil_limit_radius, eye_center_x + pupil_limit_radius)
pupil_y = clamp(face_y, eye_center_y - pupil_limit_radius, eye_center_y + pupil_limit_radius)
# Draw eyes with pupils following the face
draw_eye(200, 200, pupil_x, pupil_y)
# Display face tracking in a separate window
cv2.circle(frame, (face_x, face_y), 30, (255, 0, 0), 2)
else:
# If no face is detected, show a temporary image of the eyes
draw_eye(200, 200, 200, 200)
pygame.display.update()
# Display face tracking in a separate window
cv2.imshow("Face Tracking", frame)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
cap.release()
cv2.destroyAllWindows()
pygame.quit()
exit()
draw()
# Check for key events
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
cap.release()
cv2.destroyAllWindows()
pygame.quit()
exit()
Editor is loading...
Leave a Comment