Skip to content

killedfish/opencv

Repository files navigation

人脸识别系统

Python OpenCV Streamlit MySQL

基于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+
  • 摄像头设备

Python依赖

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

⚙️ 安装配置

1. 环境准备

确保已安装Python 3.10环境:

# 使用conda创建环境(推荐)
conda create -n face_recognition python=3.10
conda activate face_recognition

2. 安装依赖

# 进入项目目录
cd 大作业/

# 安装依赖包
pip install -r requirements.txt

3. 数据库配置

安装MySQL

  • 下载并安装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
);

4. 配置修改

如需修改数据库连接参数,请编辑 database_init.py 文件:

connection = mysql.connector.connect(
    host='localhost',      # 数据库主机
    port=3306,            # 数据库端口
    user='root',          # 用户名
    password='root'       # 密码
)

🚀 使用方法

快速启动

使用提供的启动脚本:

python run.py

手动启动

  1. 初始化数据库
python database_init.py
  1. 启动Web应用
streamlit run main_app.py
  1. 访问应用: 浏览器打开 http://localhost:8501

📖 功能说明

用户注册流程

  1. 输入用户名:在注册界面输入唯一用户名
  2. 活体检测:按照系统提示完成以下动作
    • 保持正脸朝向摄像头
    • 向左转头并保持0.8秒
    • 向右转头并保持0.8秒
    • 回到正脸位置完成采集
  3. 特征提取:系统自动提取人脸LBP特征
  4. 数据存储:将用户信息和特征存储到数据库

人脸验证流程

  1. 启动验证:点击"开始人脸验证"按钮
  2. 活体检测:重复注册时的转头动作
  3. 身份识别
    • 使用LBPH模型进行初步识别
    • 通过直方图相似度进行二次验证
    • 双重条件满足才能通过验证
  4. 结果显示:显示识别结果和置信度

系统信息

  • 查看已注册用户列表
  • 显示系统技术参数
  • 数据库连接状态

🔬 核心算法详解

LBP特征提取

Local Binary Patterns(局部二值模式)是一种有效的纹理描述算子:

  1. 邻域比较:对每个像素与其8邻域像素进行比较
  2. 二进制编码:生成8位二进制码
  3. 直方图统计:计算LBP码的分布直方图
  4. 特征归一化:对直方图进行归一化处理

活体检测机制

通过分析用户的头部转动来验证真实性:

  1. 多角度检测:同时检测正脸、左侧脸、右侧脸
  2. 运动跟踪:跟踪人脸中心点位移
  3. 状态机控制:严格的转头序列验证
  4. 时间约束:每个动作需保持足够时间

识别匹配策略

采用双重验证机制提高准确性:

  1. LBPH识别:使用训练好的LBPH模型进行初步识别
  2. 相似度验证:计算直方图特征的卡方距离
  3. 阈值判断:LBPH距离≤70 且 相似度≥90%
  4. 结果输出:显示匹配用户和置信度

⚡ 性能优化

图像预处理

  • 直方图均衡化:改善光照不均问题
  • 尺寸标准化:统一人脸ROI为200x200像素
  • 灰度转换:减少计算复杂度

检测优化

  • 多尺度检测:适应不同距离的人脸
  • 级联分类器:提高检测速度和准确性
  • 抗抖动机制:避免检测结果频繁跳变

🔧 故障排除

常见问题

1. 摄像头无法打开

  • 检查摄像头是否被其他程序占用
  • 确认摄像头驱动正常安装
  • 尝试更换USB端口

2. 数据库连接失败

  • 确认MySQL服务正在运行
  • 检查用户名密码是否正确
  • 验证端口3306是否开放

3. 人脸检测失败

  • 确保光线充足
  • 调整摄像头角度和距离
  • 检查OpenCV安装是否完整

4. 识别准确率低

  • 重新注册用户提高特征质量
  • 确保注册和验证环境光照一致
  • 调整识别阈值参数

调试模式

启用详细日志输出:

import logging
logging.basicConfig(level=logging.DEBUG)

🔮 扩展开发

添加新功能

  1. 批量用户导入:支持从文件批量导入用户
  2. 访问日志记录:记录所有验证尝试
  3. 多摄像头支持:支持选择不同摄像头设备
  4. 移动端适配:开发移动端友好界面

算法改进

  1. 深度学习模型:集成CNN或Transformer模型
  2. 3D人脸识别:使用深度摄像头进行3D建模
  3. 多模态融合:结合声纹、虹膜等生物特征
  4. 边缘计算优化:模型量化和加速推理

📄 许可证

本项目仅供学习和研究使用。

🆘 技术支持

如遇到问题或需要技术支持,请:

  1. 检查本文档的故障排除部分
  2. 查看项目代码中的注释说明
  3. 确认环境配置是否正确

📝 更新日志

v1.0.0

  • ✅ 实现基础人脸注册和验证功能
  • ✅ 集成活体检测机制
  • ✅ 完成Web界面开发
  • ✅ 添加数据库存储支持

⚠️ 注意:本系统设计用于教学和演示目的,在生产环境使用前请进行充分的安全性和稳定性测试。

About

基于opencv的人脸识别系统

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages