-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathface_recognition.py
120 lines (92 loc) · 4.88 KB
/
face_recognition.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
from tkinter import*
from tkinter import ttk
from PIL import Image,ImageTk #pip install pillow
from tkinter import messagebox
import mysql.connector
from time import strftime
from datetime import datetime
import cv2
import os
import numpy as np
class Face_Recognition:
def __init__(self,root):
self.root=root
self.root.geometry("1350x700+0+0")
self.root.title("Face Attendance System")
title_lbl=Label(self.root,text="FACE RECOGNITION", font=("times new roman",35,"bold"),bg="white",fg="Blue") #putting img above bg img
title_lbl.place(x=0,y=0,width=1350,height=40)
img3=Image.open(r"college_images\facial_recognition_system_identification_digital_id_security_scanning_thinkstock_858236252_3x3-100740902-large.jpg")
img3=img3.resize((950,700),Image.ANTIALIAS)
self.photoimg3=ImageTk.PhotoImage(img3)
bg_img=Label(self.root,image=self.photoimg3)
bg_img.place(x=650,y=40,width=950,height=650)
#button
b1_1=Button(bg_img,text="FACE RECOGNITION",cursor="hand2",command=self.face_recog,font=("times new roman",15,"bold"),bg="red",fg="white")
b1_1.place(x=360,y=590,width=250,height=40)
# =========================== Attendance ==========================
def mark_attendance(self,i,r,n,d):
with open("Prashant.csv","r+",newline="\n") as f:
myDataList=f.readlines()
name_list=[]
for line in myDataList:
entry=line.split((","))
name_list.append(entry[0])
if((i not in name_list) and (r not in name_list) and (n not in name_list) and (d not in name_list)):
now=datetime.now()
d1=now.strftime("%d/%m/%Y")
dtString=now.strftime("%H:%M:%S")
f.writelines(f"\n{i},{r},{n},{d},{dtString},{d1},Present")
#=====face recognition=====
def face_recog(self):
def draw_boundary(img,classifier,scaleFactor,minNeighbors,color,text,clf):
gray_image=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
features=classifier.detectMultiScale(gray_image,scaleFactor,minNeighbors)
coord=[]
for (x,y,w,h) in features:
cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3)
id,predict=clf.predict(gray_image[y:y+h,x:x+w])
confidence=int((100*(1-predict/300)))
conn=mysql.connector.connect(host="localhost",username="root",password="root",database="student_attendance_system")
my_cursor=conn.cursor()
my_cursor.execute("Select Name from student where Student_id="+str(id))
n=my_cursor.fetchone()
n="+".join(n)
my_cursor.execute("Select Roll from student where Student_id="+str(id))
r=my_cursor.fetchone()
r="+".join(r)
my_cursor.execute("Select Dep from student where Student_id="+str(id))
d=my_cursor.fetchone()
d="+".join(d)
my_cursor.execute("Select Student_id from student where Student_id="+str(id))
i=my_cursor.fetchone()
i="+".join(i)
if confidence>77:
cv2.putText(img,f"ID:{i}",(x,y-75),cv2.FONT_HERSHEY_COMPLEX,0.8,(255,255,255),3)
cv2.putText(img,f"Roll:{r}",(x,y-55),cv2.FONT_HERSHEY_COMPLEX,0.8,(255,255,255),3)
cv2.putText(img,f"Name:{n}",(x,y-30),cv2.FONT_HERSHEY_COMPLEX,0.8,(255,255,255),3)
cv2.putText(img,f"Department:{d}",(x,y-5),cv2.FONT_HERSHEY_COMPLEX,0.8,(255,255,255),3)
self.mark_attendance(i,r,n,d)
else:
cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),3)
cv2.putText(img,"Unknown Face",(x,y-55),cv2.FONT_HERSHEY_COMPLEX,0.8,(255,255,255),3)
coord=[x,y,w,h]
return coord
def recognize(img,clf,faceCascade):
coord=draw_boundary(img,faceCascade,1.1,10,(255,25,255),"Face",clf)
return img
faceCascade=cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
clf=cv2.face.LBPHFaceRecognizer_create()
clf.read("classifier.xml")
video_cap=cv2.VideoCapture(0)
while True:
ret,img=video_cap.read()
img=recognize(img,clf,faceCascade)
cv2.imshow("Welcome to Face Recognition",img)
if cv2.waitKey(1)==13:
break
video_cap.release()
cv2.destroyAllWindows()
if __name__=="__main__":
root=Tk()
obj=Face_Recognition(root)
root.mainloop()