基于OpenCV+QT的人脸识别打卡项目

2024-07-13 1139阅读

1.基本概念

基于OpenCV的人脸识别是一个多步骤的过程,通常涉及以下步骤:

  1. 人脸检测:使用Haar级联或深度学习模型来检测图像中的面部区域。OpenCV提供了预训练的Haar级联分类器,可以用于快速检测。

  2. 特征提取:一旦检测到人脸,就需要从人脸图像中提取特征。特征提取可以使用多种方法,如LBP(局部二值模式)、HOG(方向梯度直方图)或更先进的深度学习方法。

  3. 人脸识别:使用特征匹配或机器学习模型来识别检测到的面部。可以使用如支持向量机(SVM)、k-最近邻(k-NN)、神经网络等方法。

  4. 训练模型:在实际应用中,通常需要收集一些人脸图像来训练识别模型。训练过程中,模型会学习区分不同的人脸。

  5. 实时识别:在训练完成后,可以使用模型进行实时人脸识别。这可以用于多种应用,如安全监控、身份验证等。

2.项目展示

(1)打开QT,并运行项目,把电脑摄像头对准人脸

基于OpenCV+QT的人脸识别打卡项目

(2)输入要录入人的姓名,输入完之后点击录入,录入完之后会有提示

基于OpenCV+QT的人脸识别打卡项目

(3)成功录入之后,就可以进行打卡了,把摄像头对准人脸,等待识别,识别成功就签到成功了

基于OpenCV+QT的人脸识别打卡项目

(4) 打卡签到成功之后,点击打卡时间就可以查看打卡历史记录。

基于OpenCV+QT的人脸识别打卡项目

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界面

基于OpenCV+QT的人脸识别打卡项目

(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 。最后的最后,还请大家点点赞,点点关注,谢谢大家!

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]