使用opencv进行简单的人脸识别

        人脸识别在当前广泛应用于日常生活的各个方面,随着技术的进步,将来人脸应用将会越来越深入到日常生活中来.作为开发者,我们应该掌握一些应用知识,本文介绍一种使用opecv自带的人脸算法,实现人脸简单的识别.该方法适用于,要求准确率不高的场景,比如签到.考勤等场景.本文简单介绍使用opencv进行人脸识别的思路及方法。

一.编程前准备:        

         使用opencv的人脸识别功能,需要将opencv_contrib模块加到opencv中去进行编译,已vs2015为例简单说一下方法.

第一步分别下载opencv源码及opencv_contrib模块源码,注意版本号一定要相同,否则会编译失败.

第二步CMake设置OPENCV_EXTRA_MODULES_PATH为opencv_contrib目录下的modules,比如设置为D:/teng/working/opencv_contrib-3.4/modules。

进行编译,编译成功后,在自己的工程中加入opencv_highgui345.lib
opencv_core345.lib
opencv_imgproc345.lib
opencv_imgcodecs345.lib
opencv_objdetect345.lib
opencv_videoio345.lib
opencv_face345.lib

工程里面加入这个几个库,就可以进行人脸识别了。同时记住这个目录下的文件D:\teng\working\opencv-3.4\data\haarcascades目录下的文件是opencv帮我们训练好的特征文件,我们可以利用它可以进行人脸识别、眼睛识别、人体识别、甚至表情识别。

二.开始编写代码实现人脸识别.

分成2个步骤,第一步是进行人脸训练.第二步是识别.

公共变量

CascadeClassifier face_cascade;    //载入分类器
Ptr<LBPHFaceRecognizer> g_lpbhClass;

初始化公共变量

    if (!face_cascade.load("haarcascade_frontalface_alt.xml")) /D:\teng\working\opencv-3.4\data\haarcascades 目录下的文件,我们选用的是人脸识别。
    {
        MessageBox( _T("Load haarcascade_frontalface_alt failed!") );
        g_bRunning = FALSE;
    }
    int nRet = _taccess( _T("lpbhClass.xml"),0);//存放人脸的特征文件
    if( 0 == nRet || EACCES == nRet )
        g_lpbhClass = LBPHFaceRecognizer::load<LBPHFaceRecognizer>("lpbhClass.xml");//如果存在特征文件,装载它
    else
        g_lpbhClass = LBPHFaceRecognizer::create();//创建特变量,程序退出时把它保存成lpbhClass.xml文件,待下次程序启动调用它。

第一部分:训练人脸特征

        可以理解为把人脸特征保存到变量g_lpbhClass中去,进行识别是就可根据输入的人脸图片查找出相应的人脸id.实现人脸识别。

训练用g_lpbhClass->update(g_images,g_labels);//用于有新数据加入

g_lpbhClass->train(g_images,g_labels);//

g_lpbhClass->save("lpbhClass.xml");//把数据保存成文件,下次打开程序时装载。

2个参数都是数组,长度要一致,分别为人脸图片和相对应的id值。识别时会返回相应的id值。

第二部:分人脸识别

使用函数             double confidence = 0.0;
            g_lpbhClass->predict(matface,id,confidence);

进行识别,查看confidence值。改值表示置信距离,当大80时,认为无法识别人脸。id表示输入的matface人脸被识别为训练过的id值。

 

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lijiteng

好心啦,福心啦.打赏网络乞丐啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值