基于OpenCV+QT的人脸识别打卡项目
1.基本概念
基于OpenCV的人脸识别是一个多步骤的过程,通常涉及以下步骤:
-
人脸检测:使用Haar级联或深度学习模型来检测图像中的面部区域。OpenCV提供了预训练的Haar级联分类器,可以用于快速检测。
-
特征提取:一旦检测到人脸,就需要从人脸图像中提取特征。特征提取可以使用多种方法,如LBP(局部二值模式)、HOG(方向梯度直方图)或更先进的深度学习方法。
-
人脸识别:使用特征匹配或机器学习模型来识别检测到的面部。可以使用如支持向量机(SVM)、k-最近邻(k-NN)、神经网络等方法。
-
训练模型:在实际应用中,通常需要收集一些人脸图像来训练识别模型。训练过程中,模型会学习区分不同的人脸。
-
实时识别:在训练完成后,可以使用模型进行实时人脸识别。这可以用于多种应用,如安全监控、身份验证等。
2.项目展示
(1)打开QT,并运行项目,把电脑摄像头对准人脸
(2)输入要录入人的姓名,输入完之后点击录入,录入完之后会有提示
(3)成功录入之后,就可以进行打卡了,把摄像头对准人脸,等待识别,识别成功就签到成功了
(4) 打卡签到成功之后,点击打卡时间就可以查看打卡历史记录。
3.项目开发流程
(1)准备工作
pro文件配置:加载OpenCV文件路径
INCLUDEPATH += D:/opencv/opencv3.4-install/install/include
INCLUDEPATH += D:/opencv/opencv3.4-install/install/include/opencv
INCLUDEPATH += D:/opencv/opencv3.4-install/install/include/opencv2
LIBS += D:/opencv/opencv3.4-install/install/x86/mingw/lib/libopencv_*.a
头文件支持
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace cv::face;
using namespace cv;
using namespace std;
(2)QT的UI界面
(3)摄像头初始化模块
mainwindow.h添加:
//定义摄像头的初始化
private:
void initVideoCapture();
//定义视频流工具对象属性
private:
VideoCapture vc;
mainwindow.c添加:
//实现摄像头初始化函数
void MainWindow::initVideoCapture(){
//打开摄像头,摄像头标识是0号
//打开摄像头
if(vc.open(0) == false){
//输出内容
qDebug()
p studyTimer.stop();//停止机械学习/p p vectorint labels;//保存标签的容器/p p //从ui端获取名字/p p QString name = ui-lineEdit_name-text();/p p //更新人员表/p p ManagerFactory::getIns()-user-insertUser(name);/p p //获取当前的用户id/p p id = ManagerFactory::getIns()-user->selectId();//往容器中插入标签 插入10个一样的标签
labels.insert(labels.begin(),10,id);
//学习并且更新模型文件
recognizer->update(studyFace,labels);
recognizer->save("face.xml");//保存模型文件
//提示:录入成功 #include
QMessageBox::information(this,"提示","恭喜,录入人员成功");
ui->lineEdit_name->clear();//清空单行输入框
studyFace.clear();//清空容器
isLuru = false;//推出学习状态
}
else
{
Mat face = mid(faces[0]);//截取人脸矩形的部分
//色彩空间转换
cvtColor(face,face,CV_BGR2GRAY);
//统一尺寸
cv::resize(face,face,Size(100,100));
//存放在容器
studyFace.push_back(face);
qDebug()
p //获取下名字/p p QString name = ManagerFactory::getIns()-user-selectName(label);/p p //拼接显示标题/p p QString str = name + "已签到";/p p //用消息提示框提示签到成功/p p QMessageBox::warning(this,str,QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));/p p //往时间记录表中插入数据/p p ManagerFactory::getIns()-time->insertTime(name);}
}
结语
以上就是人脸识别的主要内容,本次代码分享到此结束,有需要源码的请联系我VX:gfx2503654393 。最后的最后,还请大家点点赞,点点关注,谢谢大家!





