Spaces:
Build error
Build error
import cv2 | |
import numpy as np | |
import os | |
import pandas as pd | |
import tkinter as tk | |
from tkinter import messagebox | |
from PIL import Image, ImageTk | |
atnd = [] | |
# Train the face recognition model using the collected dataset | |
def train_model(): | |
data_path = 'data' | |
face_classifier = cv2.CascadeClassifier("haarcascade_frontalface_default.xml") | |
training_data = [] | |
labels = [] | |
for root, dirs, files in os.walk(data_path): | |
for file in files: | |
if file.endswith('jpg'): | |
path = os.path.join(root, file) | |
label = int(path.split('.')[1]) | |
image = cv2.imread(path) | |
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
face = face_classifier.detectMultiScale(gray, 1.3, 5) | |
if face is not (): | |
for (x, y, w, h) in face: | |
cropped_face = gray[y:y + h, x:x + w] | |
training_data.append(cropped_face) | |
labels.append(label) | |
labels = np.array(labels) | |
model = cv2.face.LBPHFaceRecognizer_create() | |
model.train(training_data, labels) | |
return model | |
# Implement the student attention monitoring system | |
def monitor_attention(): | |
global atnd | |
atnd = [] | |
face_classifier = cv2.CascadeClassifier("haarcascade_frontalface_default.xml") | |
eye_classifier = cv2.CascadeClassifier("haarcascade_eye.xml") | |
model = train_model() | |
cap = cv2.VideoCapture(0) | |
while True: | |
ret, frame = cap.read() | |
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) | |
faces = face_classifier.detectMultiScale(gray, 1.3, 5) | |
if faces is not (): | |
for (x, y, w, h) in faces: | |
cropped_face = gray[y:y + h, x:x + w] | |
label, confidence = model.predict(cropped_face) | |
if confidence < 100: | |
eyes = eye_classifier.detectMultiScale(cropped_face) | |
if eyes is not (): | |
for (ex, ey, ew, eh) in eyes: | |
atnd.append(1) | |
else: | |
atnd.append(0) | |
cv2.imshow('Student Attention', frame) | |
if cv2.waitKey(1) == 13: | |
break | |
cap.release() | |
cv2.destroyAllWindows() | |
save_attendance() | |
def save_attendance(): | |
df = pd.DataFrame(atnd, columns=['Attention']) | |
df.to_csv('./attention.csv') | |
messagebox.showinfo("Attendance Saved", "Attendance data has been saved successfully.") | |
def start_monitoring(): | |
monitor_attention() | |
def stop_monitoring(): | |
messagebox.showinfo("Monitoring Stopped", "Monitoring has been stopped.") | |
def main(): | |
root = tk.Tk() | |
root.title("Student Attentiveness") | |
video_frame = tk.Label(root) | |
video_frame.pack() | |
start_button = tk.Button(root, text="Start Monitoring", command=start_monitoring) | |
start_button.pack() | |
stop_button = tk.Button(root, text="Stop Monitoring", command=stop_monitoring) | |
stop_button.pack() | |
root.mainloop() | |
if __name__ == "__main__": | |
main() | |