Face_Detection / video_processor.py
roseyshi's picture
Upload 16 files
6f2dcbc verified
Raw
History Blame Contribute Delete
2.2 kB
# backend/core/video_processor.py
import cv2
import asyncio
from datetime import datetime
from core.face_detection import FaceDetector
from core.face_recognition import FaceRecognizer
from core.attendance_manager import AttendanceManager
class VideoProcessor:
def __init__(self, detector, recognizer, attendance_manager):
self.detector = detector
self.recognizer = recognizer
self.attendance_manager = attendance_manager
self.frame_buffer = []
self.processing_interval = 0.5 # Process every 0.5 seconds
async def process_video(self, video_source=0):
"""Process video stream from camera or file"""
cap = cv2.VideoCapture(video_source)
if not cap.isOpened():
raise ValueError("Could not open video source")
last_process_time = datetime.now()
while True:
ret, frame = cap.read()
if not ret:
break
# Process at intervals for efficiency
current_time = datetime.now()
if (current_time - last_process_time).total_seconds() >= self.processing_interval:
# Detect faces
faces = self.detector.detect_faces(frame)
for face_data in faces:
# Recognize face
name = self.recognizer.recognize_face(face_data['face_img'])
if name:
# Mark attendance
employee_id = self._get_employee_id(name)
if employee_id:
self.attendance_manager.mark_attendance(employee_id)
# Draw bounding box with name
x1, y1, x2, y2 = face_data['bbox']
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(frame, name, (x1, y1-10),
cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0,255,0), 2)
last_process_time = current_time
yield frame
cap.release()