Spaces:
Build error
Build error
| # 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() |