import cv2 import face_recognition import os import numpy as np from datetime import datetime import pickle path = './autoattend/photos' images = [] classNames = [] mylist = os.listdir(path) print(mylist) for cl in mylist: curImg = cv2.imread(f'{path}/{cl}') images.append(curImg) classNames.append(os.path.splitext(cl)[0]) # print(images) for img in images: print(len(face_recognition.face_encodings(img))) def findEncodings(images): encodeList = [] for img in images: img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) encoded_face = face_recognition.face_encodings(img)[0] encodeList.append(encoded_face) return encodeList encoded_face_train = findEncodings(images) def markAttendance(name): with open('./autoattend/Attendance.csv','r+') as f: myDataList = f.readlines() nameList = [] for line in myDataList: entry = line.split(',') nameList.append(entry[0]) if name not in nameList: now = datetime.now() time = now.strftime('%I:%M:%S:%p') date = now.strftime('%d-%B-%Y') f.writelines(f'n{name}, {time}, {date}') # take pictures from webcam cap = cv2.VideoCapture(1) while True: success, img = cap.read() imgS = cv2.resize(img, (0,0), None, 0.25,0.25) imgS = cv2.cvtColor(imgS, cv2.COLOR_BGR2RGB) faces_in_frame = face_recognition.face_locations(imgS) encoded_faces = face_recognition.face_encodings(imgS, faces_in_frame) for encode_face, faceloc in zip(encoded_faces,faces_in_frame): matches = face_recognition.compare_faces(encoded_face_train, encode_face) faceDist = face_recognition.face_distance(encoded_face_train, encode_face) matchIndex = np.argmin(faceDist) print(matchIndex) if matches[matchIndex]: name = classNames[matchIndex].upper().lower() y1,x2,y2,x1 = faceloc # since we scaled down by 4 times y1, x2,y2,x1 = y1*4,x2*4,y2*4,x1*4 cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2) cv2.rectangle(img, (x1,y2-35),(x2,y2), (0,255,0), cv2.FILLED) cv2.putText(img,name, (x1+6,y2-5), cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),2) markAttendance(name) cv2.imshow('webcam', img) if cv2.waitKey(1) & 0xFF == ord('q'): break