哈喽各位小伙伴,欢迎来到AI视觉实战项目专题!
前面我们完成了工业缺陷检测、区域入侵安防、烟火预警系统三大热门落地项目。今天我们更新校园、企业最热门、答辩最高分、应用场景最强的实战项目——AI人脸识别自动签到系统。
传统人工签到、刷卡签到、密码签到效率低、代签严重、管理繁琐。基于深度学习的人脸识别考勤,可以实现无人值守、实时人脸检测、人脸比对、自动记录签到、生成考勤报表。
本期手把手从零搭建完整人脸识别签到工程,包含:人脸检测、特征比对、自动签到、重复过滤、日志保存全套功能,代码可直接运行、可网页部署、可打包EXE,完美适配本科毕设与课程设计!
一、项目背景与功能介绍
1. 项目背景
在校园课堂考勤、企业员工打卡、会议室签到、门禁管理场景中,传统签到方式存在耗时高、易代签、统计麻烦、难以溯源等问题。
借助YOLOv8高精度人脸检测算法,结合人脸特征匹配技术,可以实现智能化、自动化、高精度的人脸识别签到,彻底解决传统考勤痛点。
2. 核心实现功能
•实时摄像头视频流人脸检测、精准框选人脸区域
•本地人脸库特征比对,识别人员身份
•自动判断是否为本人、实时显示姓名与签到状态
•智能防重复签到,单人单次仅记录一次
•自动生成签到时间、人员名单、保存本地日志
•支持多人同时识别、批量签到
二、核心技术原理
1. YOLOv8人脸检测
采用YOLOv8-face专用人脸检测模型,相比传统OpenCV人脸分类器,优势巨大:
•支持侧脸、低头、弱光、遮挡人脸检测
•抗干扰能力强、误检率极低
•实时性高,满足视频流实时考勤需求
2. 人脸特征相似度匹配
对检测到的人脸图像进行特征编码,计算与本地人脸库特征的欧式距离,距离越小相似度越高,达到阈值即判定签到成功。
3. 防重复签到机制
使用内存集合存储当日已签到人员ID,单次运行周期内同一人员仅签到一次,杜绝重复打卡。
三、环境依赖安装
一键安装全套运行库,兼容往期所有项目环境:
python pip install ultralytics opencv-python numpy face-recognition -i https://pypi.tuna.tsinghua.edu.cn/simple |
四、项目目录结构(必须严格对应)
face_checkin/
├─ known_face/ # 存放员工/学生人脸底图(单人单张)
├─ checkin_log.txt # 自动生成签到日志
└─ main.py # 主程序
五、完整可运行代码(人脸识别+自动签到)
纯手写完整版工程,无报错、可直接运行、自带日志记录、防重复签到:
python import cv2 import face_recognition import os from ultralytics import YOLO from datetime import datetime
# 加载YOLOv8人脸检测模型 model = YOLO("yolov8n-face.pt")
# 存放已知人脸文件夹 KNOWN_FACE_DIR = "known_face" # 已签到人员集合 signed_name_list = set()
# 加载本地人脸库 def load_known_faces(): face_encodings = [] face_names = [] for img_name in os.listdir(KNOWN_FACE_DIR): path = os.path.join(KNOWN_FACE_DIR, img_name) img = cv2.imread(path) rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) encode = face_recognition.face_encodings(rgb_img)[0] face_encodings.append(encode) face_names.append(img_name.split(".")[0]) return face_encodings, face_names
# 初始化人脸库 known_encodings, known_names = load_known_faces()
# 保存签到日志 def save_log(name): now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") with open("checkin_log.txt", "a", encoding="utf-8") as f: f.write(f"【{now}】 签到成功:{name}\n")
# 开启摄像头 cap = cv2.VideoCapture(0)
while cap.isOpened(): ret, frame = cap.read() if not ret: break
# YOLO人脸检测 results = model(frame, conf=0.4) for box in results[0].boxes: x1, y1, x2, y2 = box.xyxy[0].cpu().numpy() # 截取人脸区域 face_img = frame[int(y1):int(y2), int(x1):int(x2)] rgb_face = cv2.cvtColor(face_img, cv2.COLOR_BGR2RGB)
try: current_encode = face_recognition.face_encodings(rgb_face)[0] except: continue
# 人脸比对 matches = face_recognition.compare_faces(known_encodings, current_encode) name = "Unknown"
if True in matches: idx = matches.index(True) name = known_names[idx]
# 自动签到,防重复 if name not in signed_name_list: signed_name_list.add(name) save_log(name)
# 绘制界面 cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0,255,0), 2) cv2.putText(frame, name, (int(x1), int(y1)-10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0,255,0), 2)
# 显示签到人数 cv2.putText(frame, f"Checked In: {len(signed_name_list)}", (20,40), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255,0,0), 2)
cv2.imshow("YOLOv8 Face Check-In System", frame) if cv2.waitKey(1) & 0xFF == ord("q"): break
cap.release() cv2.destroyAllWindows()
|
六、项目使用教程
1.在known_face 文件夹放入人员照片,命名为姓名.jpg,例如:张三.jpg
2.将 yolov8n-face.pt 人脸模型放入项目根目录
3.运行 main.py,摄像头自动识别人脸、自动签到
4.所有签到记录自动保存至 checkin_log.txt
七、项目创新点与答辩亮点
•算法升级:采用YOLOv8人脸检测替代传统算法,遮挡、侧脸、弱光识别效果大幅提升
•智能防代签:人脸特征精准匹配,杜绝代签、冒用
•自动台账:无需人工统计,系统自动生成签到时间与名单
•实时高效:支持多人同时签到,适配课堂、企业大规模考勤
•拓展性强:可拓展网页端、后台管理、EXE程序、云端数据库
八、高阶拓展功能(毕设加分)
•Excel报表自动导出,一键生成考勤统计表
•网页端实时考勤系统,远程查看签到情况
•权限管理、人员注册、人脸录入功能
•迟到、早退、缺勤智能判定统计
•打包EXE独立程序,无环境双击运行
九、常见问题解决
•人脸检测不到:光线提亮、降低conf阈值、使用官方人脸预训练权重
•识别错误:更新清晰人脸底图、提高人脸库图片质量
•报错无人脸编码:过滤空人脸、模糊人脸自动跳过
•重复签到:集合去重机制保证单次运行仅签到一次
十、本期总结
本期完成了基于YOLOv8的人脸识别智能签到系统,完整实现人脸检测、身份比对、自动签到、日志记录全套核心功能。
项目场景真实、代码工程化、功能完善、拓展空间极大,是计算机视觉、人工智能、软件工程专业最稳、最好过、分数最高的毕设项目之一。
下期预告
下期更新:YOLOv8智能车牌识别系统,智能抓拍、车牌检测、字符识别、车辆进出记录,智能停车场经典毕设项目!