Python实现的人脸识别打卡系统
简介
人脸识别技术能够实现高精度的人脸识别和检测,应用广泛。本文将介绍如何使用Python语言实现一个简单的人脸识别打卡系统。
环境准备
- Python 3.5+
- OpenCV 4.x
- face_recognition(Python人脸识别库)
实现步骤
步骤1:数据收集和预处理
收集一些图像用于训练系统。对这些图像进行人脸检测和特征提取,并保存到csv文件中。
示例代码:
import face_recognition
import cv2
import os
import numpy as np
# 数据收集: 将已知人物的图像读入并处理
known_face_encodings = []
known_face_names = []
for dirpath, dirnames, filenames in os.walk("known_faces"):
for name in filenames:
path = os.path.join(dirpath, name)
image = face_recognition.load_image_file(path)
face_locations = face_recognition.face_locations(image)
face_encodings = face_recognition.face_encodings(image, face_locations)
known_face_encodings.extend(face_encodings)
known_face_names.extend([os.path.splitext(name)[0]] * len(face_encodings))
# 预处理: 将数据保存到csv文件中
np.savetxt("known_faces_encodings.csv", known_face_encodings, delimiter=",")
np.savetxt("known_faces_names.csv", known_face_names, fmt="%s")
步骤2:数据训练和模型保存
使用已经预处理好的csv文件,训练一个SVM分类器,并保存到文件中。
示例代码:
import numpy as np
from sklearn import svm
# 数据训练:读入已知数据,并训练SVM分类器
X = np.loadtxt("known_faces_encodings.csv", delimiter=",")
y = np.loadtxt("known_faces_names.csv", dtype=str)
clf = svm.SVC(gamma='scale')
clf.fit(X, y)
# 模型保存:将训练好的模型保存到文件中
joblib.dump(clf, "face_recognition_svc.pkl")
步骤3:实时人脸识别
打开摄像头,实时检测画面中的人脸,进行识别确认。
示例代码:
import cv2
import face_recognition
import joblib
# 加载SVM分类器和已知人脸的编码
clf = joblib.load("face_recognition_svc.pkl")
known_face_encodings = np.loadtxt("known_faces_encodings.csv", delimiter=",")
# 使用OpenCV打开摄像头,实时检测人脸并识别
video_capture = cv2.VideoCapture(0)
while True:
# 读取摄像头画面,进行人脸检测和编码
ret, frame = video_capture.read()
small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)
face_locations = face_recognition.face_locations(small_frame)
face_encodings = face_recognition.face_encodings(small_frame, face_locations)
# 遍历所有人脸编码,进行分类预测和识别
for face_encoding in face_encodings:
name = clf.predict([face_encoding])
distance = face_recognition.face_distance(known_face_encodings, face_encoding)
# 如果预测的人脸与已知人物匹配,并且距离比较小则认为已识别
if name in known_face_names and min(distance) < 0.6:
cv2.rectangle(frame, (left*4, top*4), (right*4, bottom*4), (0, 255, 0), 2)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name[0], (left*4+6, bottom*4-6), font, 2.0, (0, 255, 0), 1)
# 显示识别结果
cv2.imshow("video_capture", frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
# 释放摄像头并关闭窗口
video_capture.release()
cv2.destroyAllWindows()
总结
人脸识别技术已经广泛应用于打卡系统、安防、认证等场景。通过本文,我们介绍了如何使用Python编写一个简单的人脸识别打卡系统。在实现过程中,我们通过数据收集、预处理、训练和识别等步骤,实现了一个简单而实用的系统。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现的人脸识别打卡系统 - Python技术站