智能宿舍:人脸识别管理新方案 - 指南

人脸识别智能宿舍管理系统项目介绍

一、项目概述

(一)项目背景

在当今数字化校园建设的大趋势下,学校宿舍管理面临着诸多挑战,如传统人工考勤效率低下、晚归未归情况难以及时掌握、宿舍信息管理繁琐等。为了提升宿舍管理的智能化水平,提高管理效率和安全性,人脸识别智能宿舍管理系统应运而生。

(二)项目目标

本项目旨在开发一款基于 python 深度学习和计算机视觉技术的综合管理平台,实现学校宿舍的智能化管理。通过人脸识别技术,自动完成学生进出宿舍的考勤记录、晚归检测等工作,同时对宿舍信息和违规记录进行高效管理,为宿舍管理人员提供便捷、准确的管理工具。

(三)核心技术栈

该系统融合了多种先进技术,具体如下:

  • 人脸识别:依托深度学习的人脸检测和特征提取技术,能够精准识别学生人脸信息。
  • 图像处理:借助 OpenCV 进行图像采集、预处理和分析,确保图像质量满足识别要求。
  • 界面开发:采用 PyQt5 构建直观、易用的桌面应用界面,方便管理人员操作。
  • 数据存储:运用 SQLite 数据库存储学生信息和考勤记录等数据,保证数据的安全与高效访问。
  • 多线程处理:通过 QThread 实现摄像头实时处理和 UI 响应分离,提升系统运行的流畅性。

二、系统功能模块

(一)学生人脸注册

该功能用于采集学生人脸图像,建立人脸特征库,为后续的人脸识别提供基础数据。具体流程如下:

  1. 管理人员在主界面选择 “人脸注册” 选项卡,在右侧填写学生的学号、姓名、班级、寝室号等信息。
  2. 点击 “开始采集” 按钮,系统自动从摄像头捕获学生的人脸图像。
  3. 采集过程中,学生需转动头部,以便系统获取不同角度的人脸图像。系统会自动评估图像质量,只保留高质量的人脸图像。
  4. 完成 15 张图像的采集后,系统自动停止采集。点击 “完成注册” 按钮,系统将学生信息和人脸图像保存到数据库,注册成功后,学生信息会显示在已注册学生列表中。

(二)实时人脸识别

支持摄像头实时识别、图片识别和视频识别三种模式,能够快速准确地识别出学生身份。

  • 摄像头实时识别:进入 “人脸识别” 选项卡,选择摄像头模式,点击 “开始识别” 按钮,系统实时捕获画面并识别人脸,识别结果实时显示在界面上,包括人名和相似度。
  • 图片识别:在 “人脸识别” 选项卡选择图片模式,先选择图片文件,系统对图片进行识别并显示结果。
  • 视频识别:选择视频模式,选取视频文件后,系统对视频中的人脸进行识别并展示结果。

(三)考勤管理

自动记录学生进出宿舍情况,统计考勤数据,生成详细的考勤报表,方便管理人员掌握学生的出勤情况。

  • 系统默认显示当天的考勤记录,管理人员可选择日期、班级或宿舍等筛选条件,点击 “查询” 按钮,查看符合条件的考勤记录和未签到学生列表。
  • 支持将当前筛选条件下的考勤记录导出为 CSV 文件,便于数据的进一步处理和分析。

(四)晚归管理

根据设定的宿舍规则,自动识别晚归情况并记录违规。系统会在学生考勤记录添加时,检查当前时间是否符合晚归规则,若判定为晚归,则记录相应的违规信息。

(五)宿舍信息管理

对宿舍基本信息、学生分配和宿舍规则进行全面管理。

  • 管理人员可在 “宿舍管理” 选项卡添加新宿舍,填写宿舍 ID、楼栋、房间号、容量等信息,点击 “保存” 按钮完成添加;也可选择已有宿舍进行编辑修改。
  • 可设置每天的晚归时间,点击 “保存规则” 按钮,系统将根据这些规则自动判断学生是否晚归。

(六)违规记录管理

记录和处理学生晚归、未归等违规情况。在 “安全管理” 选项卡,系统默认显示最近的违规记录,管理人员可设置日期范围、违规类型和处理状态等查询条件,点击 “查询” 按钮查看符合条件的违规记录;对于需要处理的违规记录,选择后点击 “标记为已处理” 按钮,系统会更新违规记录的处理状态。

三、系统技术架构

(一)整体架构

该系统采用分层架构设计,分为表现层、业务逻辑层和数据访问层。

  • 表现层:基于 PyQt5 构建的桌面应用界面,负责与用户进行交互,展示系统功能和数据。
  • 业务逻辑层:实现人脸识别、考勤管理、晚归检测等核心业务逻辑,协调各模块之间的工作。
  • 数据访问层:通过 SQLite 数据库接口,负责数据的存储和查询,为业务逻辑层提供数据支持。

(二)核心技术详解

  1. 人脸识别技术:基于深度学习的人脸检测和特征提取技术,能够从图像中快速准确地检测出人脸,并提取独特的人脸特征进行比对。
  2. 图像处理技术:利用 OpenCV 进行图像采集、预处理(如灰度化、降噪、人脸对齐等)和分析,提高图像质量,为后续的人脸识别提供可靠的图像数据。
  3. 多线程处理技术:使用 QThread 将摄像头实时处理和 UI 响应分离,避免因图像处理耗时过长而导致界面卡顿,提升系统的用户体验。

四、系统目录结构

系统由多个模块组成,各模块分工明确,协同工作,以下是主要的目录结构:

plaintext

project_root/
├── model/                      # 模型与日志
│   └── renlianshibie/          # 人脸识别模型
│       ├── checkpoints/        # 模型权重文件
│       └── training_log.csv    # 训练日志
├── datasets/                   # 数据集与照片
│   └── users/                  # 用户照片库
├── ui/                         # PyQt5 前端代码
│   └── main_window.py          # 主窗口界面实现
├── database/                   # SQLite 数据库文件
│   └── dormitory.db            # 宿舍管理数据库
├── records/                    # 识别记录图像
├── snapshots/                  # 手动截图保存目录
├── temp_faces/                 # 临时人脸存储目录
├── sounds/                     # 警报声音文件
├── main.py                     # 主程序入口
├── camera_utils.py             # 摄像头读取模块
├── recognizer.py               # 模型调用接口
├── db_utils.py                 # SQLite 数据库操作模块
├── image_utils.py              # 图像处理工具
├── alarm_utils.py              # 警报控制模块
├── config.ini                  # 配置文件
└── requirements.txt            # 依赖库列表

五、核心代码解析

(一)人脸识别线程(RecognitionThread 类)

python

运行

class RecognitionThread(QThread):
"""人脸识别线程"""
# 自定义信号
frame_processed = pyqtSignal(object, object)  # 帧处理完成信号 (原始帧, 结果)
status_updated = pyqtSignal(dict)  # 状态更新信号
record_added = pyqtSignal()  # 添加记录信号,用于刷新记录表格
face_collected = pyqtSignal(object, int)  # 人脸采集信号 (人脸图像, 当前计数)
def __init__(self, camera_manager, recognizer, db_manager):
super().__init__()
self.camera_manager = camera_manager
self.recognizer = recognizer
self.db_manager = db_manager
# 人脸采集相关变量
self.face_images = []  # 采集的人脸图像列表
self.face_collection_active = False  # 是否正在采集人脸
self.face_collection_count = 0  # 当前采集的人脸数量
self.face_collection_max = 15  # 需要采集的人脸数量
# 人脸检测器
self.face_detector = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
self.face_detector_alt = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_alt.xml')

该类作为人脸识别线程,主要负责在后台处理摄像头画面。它通过自定义信号与主线程进行通信,实现了 UI 和处理逻辑的分离。在初始化方法中,设置了人脸采集的相关变量和人脸检测器,为后续的人脸采集和识别做好准备。当启动线程后,它会不断从摄像头获取画面,进行人脸检测和识别,并将处理结果通过信号发送给主线程。

(二)人脸识别器(FaceRecognizer 类)

python

运行

class FaceRecognizer:
"""
人脸识别器类,封装模型调用和比对功能
"""
def __init__(self, config_path='config.ini'):
# 加载配置
self.config = configparser.ConfigParser()
try:
self.config.read(config_path, encoding='utf-8')
self.model_path = self.config.get('Model', 'checkpoint_path')
self.num_classes = self.config.getint('Model', 'num_classes')
self.threshold = self.config.getfloat('Recognition', 'similarity_threshold', fallback=0.65)
self.database_path = self.config.get('Database', 'students_dir', fallback='datasets/users')
except Exception as e:
print(f"加载配置失败: {str(e)},使用默认配置")
self.model_path = 'model/renlianshibie/checkpoints/model_epoch_50.pth'
self.num_classes = 10177
self.threshold = 0.65
self.database_path = 'datasets/users'
# 初始化模型
self.model = FaceRecognitionModel(self.num_classes).to(self.device)
# 加载已知人员特征
self.known_faces = {}
self.load_known_faces()

此类封装了模型调用和比对功能。在初始化时,会加载配置文件中的参数,若加载失败则使用默认配置。然后初始化人脸识别模型,并加载已知人员的人脸特征。在进行人脸识别时,它会提取待识别人脸的特征,并与已知人员的特征进行比对,通过余弦相似度来判断是否匹配,当相似度超过设定的阈值时,则认为识别成功。

(三)数据库管理器(DatabaseManager 类)

python

运行

class DatabaseManager:
"""数据库管理器类"""
def __init__(self, db_path='database/dormitory.db'):
"""
初始化数据库管理器
参数:
db_path: 数据库文件路径
"""
self.db_path = db_path
self.database_path = os.path.join('datasets', 'users')  # 添加用户数据存储路径属性
# 确保目录存在
Path(os.path.dirname(db_path)).mkdir(parents=True, exist_ok=True)
Path(self.database_path).mkdir(parents=True, exist_ok=True)  # 确保用户数据目录存在
# 初始化数据库
self.initialize_db()
def add_attendance_record(self, source, student_id, name, similarity, image_path=None):
"""添加考勤记录并检查是否晚归"""
conn = self.get_connection()
try:
cursor = conn.cursor()
# 获取当前时间
now = datetime.datetime.now()
timestamp = now.strftime("%Y-%m-%d %H:%M:%S")
# 检查是否晚归
status = self.check_if_late_return(student_id, now)
# 添加考勤记录
cursor.execute('''
INSERT INTO attendance_records (timestamp, source, student_id, name, similarity, image_path, status)
VALUES (?, ?, ?, ?, ?, ?, ?)
''', (timestamp, source, student_id, name, similarity, image_path, status))
# 如果晚归,添加违规记录
if status == "晚归":
self.add_violation_record(student_id, name, "late_return",
f"{name}于{timestamp}晚归")
conn.commit()
return True
except Exception as e:
print(f"添加考勤记录失败: {str(e)}")
conn.rollback()
return False
finally:
conn.close()

该类主要负责学生信息、考勤记录和违规记录的存储和查询。在初始化时,会确保数据库目录和用户数据目录存在,并初始化数据库。其 add_attendance_record 方法用于添加考勤记录,同时会检查学生是否晚归,若晚归则添加相应的违规记录。通过数据库操作,实现了数据的持久化存储和高效管理,为系统的各项功能提供了数据支持。

六、操作文档

(一)系统登录

启动系统后,系统会自动加载配置文件和模型,无需登录操作,直接进入主界面,方便管理人员快速使用系统。

(二)学生注册操作流程

  1. 进入注册页面:在主界面选择 “人脸注册” 选项卡,在右侧填写学生信息(学号、姓名、班级、寝室号)。
  2. 采集人脸图像:点击 “开始采集” 按钮,系统自动从摄像头捕获学生的人脸图像。采集过程中,学生应转动头部,以便系统获取不同角度的人脸图像,系统会自动评估图像质量,只保留高质量的人脸图像。完成 15 张图像的采集后,系统自动停止采集。
  3. 完成注册:点击 “完成注册” 按钮,系统将学生信息和人脸图像保存到数据库,注册成功后,学生信息会显示在已注册学生列表中。

(三)人脸识别操作流程

  1. 进入识别页面:在主界面选择 “人脸识别” 选项卡,选择识别模式(摄像头、图片或视频)。
  2. 开始识别:点击 “开始识别” 按钮。对于摄像头模式,系统实时捕获画面并识别人脸;对于图片模式,需先选择图片文件;对于视频模式,需先选择视频文件。
  3. 查看识别结果:识别结果实时显示在界面上,包括识别到的人名和相似度。识别记录自动保存到数据库,并显示在识别记录表格中。可点击 “截图” 按钮保存当前画面。

(四)考勤管理操作流程

  1. 进入考勤管理页面:在主界面选择 “考勤管理” 选项卡,系统默认显示当天的考勤记录。
  2. 查询考勤记录:选择日期、班级或宿舍筛选条件,点击 “查询” 按钮,系统显示符合条件的考勤记录和未签到学生列表。
  3. 导出考勤数据:点击 “导出数据” 按钮,选择保存路径,系统将当前筛选条件下的考勤记录导出为 CSV 文件。

(五)安全管理操作流程

  1. 进入安全管理页面:在主界面选择 “安全管理” 选项卡,系统默认显示最近的违规记录。
  2. 查询违规记录:设置日期范围、违规类型和处理状态,点击 “查询” 按钮,系统显示符合条件的违规记录。
  3. 处理违规记录:选择需要处理的违规记录,点击 “标记为已处理” 按钮,系统更新违规记录的处理状态。

(六)宿舍管理操作流程

  1. 进入宿舍管理页面:在主界面选择 “宿舍管理” 选项卡,系统显示宿舍列表和晚归规则设置。
  2. 添加 / 编辑宿舍:填写宿舍信息(宿舍 ID、楼栋、房间号、容量),点击 “保存” 按钮添加新宿舍;或选择已有宿舍,点击 “编辑” 按钮修改信息。
  3. 设置晚归规则:为每天设置晚归时间(格式:HH:MM),点击 “保存规则” 按钮,系统根据这些规则自动判断学生是否晚归。

(七)系统设置操作流程

  1. 进入设置页面:在主界面选择 “设置” 选项卡,可以配置摄像头、识别参数和数据路径。
  2. 摄像头设置:选择摄像头设备和分辨率,调整人脸检测参数(灵敏度和最小人脸尺寸)。
  3. 识别设置:调整相似度阈值(决定识别的严格程度),选择是否保存识别图像。
  4. 保存设置:点击 “保存设置” 按钮,设置保存到 config.ini 文件中,下次启动时自动加载。
posted @ 2025-07-26 22:02  yfceshi  阅读(28)  评论(0)    收藏  举报