基于OpenCV和MySQL的活体检测人脸识别系统,支持用户注册和人脸验证功能。
本项目是一个完整的人脸识别解决方案,集成了以下核心功能:
- 🔍 活体检测:通过左右转头动作验证真实用户
- 👤 人脸注册:采集用户人脸特征并存储到数据库
- ✅ 人脸验证:实时人脸识别和身份验证
- 🌐 Web界面:基于Streamlit的友好用户界面
- 人脸检测:OpenCV Haar Cascades(支持正脸和侧脸检测)
- 特征提取:LBP (Local Binary Patterns) 局部二值模式
- 人脸识别:LBPH (Local Binary Patterns Histograms) 识别器
- 活体检测:基于头部转动的活体验证机制
- 双重验证:LBPH距离 ≤ 70 且 直方图相似度 ≥ 90%
- 抗干扰:光照补偿和直方图均衡化
- 稳健性:多角度人脸检测和位移跟踪
大作业/
├── main_app.py # 主应用程序(Streamlit界面)
├── face_utils.py # 人脸识别核心工具类
├── database_init.py # 数据库初始化脚本
├── run.py # 启动脚本
├── requirements.txt # 依赖包列表
├── face_images/ # 用户人脸图像存储目录
└── README.md # 项目说明文档
- Python 3.10+
- MySQL 5.7+ 或 8.0+
- 摄像头设备
streamlit==1.28.1
opencv-python==4.8.1.78
opencv-contrib-python==4.8.1.78
mysql-connector-python==8.1.0
numpy==1.24.3
Pillow==10.0.1确保已安装Python 3.10环境:
# 使用conda创建环境(推荐)
conda create -n face_recognition python=3.10
conda activate face_recognition# 进入项目目录
cd 大作业/
# 安装依赖包
pip install -r requirements.txt- 下载并安装MySQL Server
- 创建root用户,密码设置为
root - 确保MySQL服务运行在默认端口3306
系统会自动创建以下数据库结构:
CREATE DATABASE face_recognition;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100) UNIQUE NOT NULL,
face_encoding LONGTEXT NOT NULL,
face_image_path VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);如需修改数据库连接参数,请编辑 database_init.py 文件:
connection = mysql.connector.connect(
host='localhost', # 数据库主机
port=3306, # 数据库端口
user='root', # 用户名
password='root' # 密码
)使用提供的启动脚本:
python run.py- 初始化数据库:
python database_init.py- 启动Web应用:
streamlit run main_app.py- 访问应用:
浏览器打开
http://localhost:8501
- 输入用户名:在注册界面输入唯一用户名
- 活体检测:按照系统提示完成以下动作
- 保持正脸朝向摄像头
- 向左转头并保持0.8秒
- 向右转头并保持0.8秒
- 回到正脸位置完成采集
- 特征提取:系统自动提取人脸LBP特征
- 数据存储:将用户信息和特征存储到数据库
- 启动验证:点击"开始人脸验证"按钮
- 活体检测:重复注册时的转头动作
- 身份识别:
- 使用LBPH模型进行初步识别
- 通过直方图相似度进行二次验证
- 双重条件满足才能通过验证
- 结果显示:显示识别结果和置信度
- 查看已注册用户列表
- 显示系统技术参数
- 数据库连接状态
Local Binary Patterns(局部二值模式)是一种有效的纹理描述算子:
- 邻域比较:对每个像素与其8邻域像素进行比较
- 二进制编码:生成8位二进制码
- 直方图统计:计算LBP码的分布直方图
- 特征归一化:对直方图进行归一化处理
通过分析用户的头部转动来验证真实性:
- 多角度检测:同时检测正脸、左侧脸、右侧脸
- 运动跟踪:跟踪人脸中心点位移
- 状态机控制:严格的转头序列验证
- 时间约束:每个动作需保持足够时间
采用双重验证机制提高准确性:
- LBPH识别:使用训练好的LBPH模型进行初步识别
- 相似度验证:计算直方图特征的卡方距离
- 阈值判断:LBPH距离≤70 且 相似度≥90%
- 结果输出:显示匹配用户和置信度
- 直方图均衡化:改善光照不均问题
- 尺寸标准化:统一人脸ROI为200x200像素
- 灰度转换:减少计算复杂度
- 多尺度检测:适应不同距离的人脸
- 级联分类器:提高检测速度和准确性
- 抗抖动机制:避免检测结果频繁跳变
- 检查摄像头是否被其他程序占用
- 确认摄像头驱动正常安装
- 尝试更换USB端口
- 确认MySQL服务正在运行
- 检查用户名密码是否正确
- 验证端口3306是否开放
- 确保光线充足
- 调整摄像头角度和距离
- 检查OpenCV安装是否完整
- 重新注册用户提高特征质量
- 确保注册和验证环境光照一致
- 调整识别阈值参数
启用详细日志输出:
import logging
logging.basicConfig(level=logging.DEBUG)- 批量用户导入:支持从文件批量导入用户
- 访问日志记录:记录所有验证尝试
- 多摄像头支持:支持选择不同摄像头设备
- 移动端适配:开发移动端友好界面
- 深度学习模型:集成CNN或Transformer模型
- 3D人脸识别:使用深度摄像头进行3D建模
- 多模态融合:结合声纹、虹膜等生物特征
- 边缘计算优化:模型量化和加速推理
本项目仅供学习和研究使用。
如遇到问题或需要技术支持,请:
- 检查本文档的故障排除部分
- 查看项目代码中的注释说明
- 确认环境配置是否正确
- ✅ 实现基础人脸注册和验证功能
- ✅ 集成活体检测机制
- ✅ 完成Web界面开发
- ✅ 添加数据库存储支持
⚠️ 注意:本系统设计用于教学和演示目的,在生产环境使用前请进行充分的安全性和稳定性测试。