Untitled
unknown
python
2 years ago
3.1 kB
14
Indexable
import cv2
import numpy as np
import pandas as pd
from datetime import datetime
import face_recognition
# Set the camera index to 0 for the built-in camera
camera_index = 0
cap = cv2.VideoCapture(camera_index)
attendance_file = 'Attendance.csv'
# Check if Attendance.csv exists
if not cv2.os.path.isfile(attendance_file):
# Create a new DataFrame and save it if the file does not exist
df = pd.DataFrame(list())
df.to_csv(attendance_file, index=False)
else:
print("Attendance.csv exists.")
images = []
classNames = []
myList = cv2.os.listdir('image_folder')
print(myList)
# for cl in myList:
# curImg = cv2.imread(f'image_folder/{cl}')
# images.append(curImg)
# classNames.append(cv2.os.path.splitext(cl)[0])
# print(classNames)
for cl in myList:
image_path = f'image_folder/{cl}'
print(f"Loading image: {image_path}")
curImg = cv2.imread(image_path)
if curImg is None:
print(f"Error loading image: {image_path}")
continue
images.append(curImg)
classNames.append(cv2.os.path.splitext(cl)[0])
def findEncodings(images):
encodeList = []
for img in images:
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
encode = face_recognition.face_encodings(img)[0]
encodeList.append(encode)
return encodeList
def markAttendance(name):
with open(attendance_file, '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()
dtString = now.strftime('%H:%M:%S')
f.write(f'\n{name},{dtString}')
encodeListKnown = findEncodings(images)
print('Encoding Complete')
while True:
ret, img = cap.read()
imgS = cv2.resize(img, (0, 0), None, 0.25, 0.25)
imgS = cv2.cvtColor(imgS, cv2.COLOR_BGR2RGB)
facesCurFrame = face_recognition.face_locations(imgS)
encodesCurFrame = face_recognition.face_encodings(imgS, facesCurFrame)
for encodeFace, faceLoc in zip(encodesCurFrame, facesCurFrame):
matches = face_recognition.compare_faces(encodeListKnown, encodeFace)
faceDis = face_recognition.face_distance(encodeListKnown, encodeFace)
matchIndex = np.argmin(faceDis)
if matches[matchIndex]:
name = classNames[matchIndex].upper()
y1, x2, y2, x1 = faceLoc
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 - 6),
cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 2)
markAttendance(name)
cv2.imshow('Webcam', img)
key = cv2.waitKey(1)
if key == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Editor is loading...
Leave a Comment