完整人脸识别系统(源码+教程+环境):

开源毕业设计:基于嵌入式ARM-Linux的应用OpenCV和QT实现的人脸识别系统(源码+论文)

完全毕设教程:Linux上Opencv与Qt实现的人脸识别的考勤点名/门禁系统(PC与嵌入式ARM版本)

前面两篇讲了人脸库的建立及模型训练,为本篇识别人脸做好准备。

本篇将在前两篇所做的工作的基础上展开。

首先,将上篇得到的三个训练模型文件(MyFaceFisherModel.xml、MyFaceLBPHModel.xml、MyFacePCAModel.xml)复制至当前目录,因为人脸识别时以这三个文件作为依据。

本篇亦以三种方法进行识别。

大概流程如下:

1、打开摄像头;

2、加载人脸检测器、人脸模型;

3、对图像缩放处理(提高效率),检测人脸并框出;

4、识别人脸(以人脸模型中的作对比)。

代码【opencv-3.2.0版本】:

#include <opencv2/opencv.hpp>
#include "opencv2/core.hpp"
#include "opencv2/face.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>
#include <fstream>
#include <sstream>using namespace cv;
using namespace cv::face;
using namespace std;#define ROW_MIN     45int exitFlag = 0;int DetectAndDraw(Mat& img, CascadeClassifier& cascade, double scale, Mat& facesImg);int main()
{  int ret = 0;double scale = 4;VideoCapture cap(0);    //打开摄像头  if (!cap.isOpened())  {  printf("open camera failed.\n");return -1;  }  // 加载级联分类器CascadeClassifier cascade;ret = cascade.load("/root/library/opencv/opencv-3.2.0/data/haarcascades/haarcascade_frontalface_alt.xml");  if( !ret ){printf("load xml failed[ret=%d].\n", ret);return -1;}cout << "load xml succeed. " << endl;//    加载训练好的人脸模型Ptr<BasicFaceRecognizer> modelPCA = createEigenFaceRecognizer();  modelPCA->load("MyFacePCAModel.xml");  Ptr<BasicFaceRecognizer> modelFisher = createFisherFaceRecognizer();  modelFisher->load("MyFaceFisherModel.xml");  Ptr<LBPHFaceRecognizer> modelLBPH = createLBPHFaceRecognizer();  modelLBPH->load("MyFaceLBPHModel.xml");  Mat frame;  while (!exitFlag)  {  cap >> frame;  if(frame.empty()) {continue;}//建立用于存放人脸的向量容器  Mat faces;  ret = DetectAndDraw(frame, cascade, scale, faces);if(ret <= 0)    // 没有人脸{cout << "faces.size <= 0" << endl;continue;}Mat face_resize;  int predictPCA = 0;  int predictFisher = 0;  int predictLBPH = 0;  if (faces.rows >= ROW_MIN)  // 控制人脸不能太小(远){  resize(faces, face_resize, Size(92, 112));  }  else{printf("face.rows[%d] < %d\n", faces.rows, ROW_MIN);continue;}if (!face_resize.empty()){  //测试图像应该是灰度图  predictPCA = modelPCA->predict(face_resize);  predictFisher = modelFisher->predict(face_resize);  predictLBPH = modelLBPH->predict(face_resize);  }  cout << "predictPCA   : " << predictPCA    << endl;  cout << "predictFisher: " << predictFisher << endl;  cout << "predictLBPH  : " << predictLBPH   << endl;  if (waitKey(1) == 27)     // Esc{exitFlag = 1;cout << "Esc..." << endl;break;}}  return 0;
}  /* 参数 : 输入图像、级联分类器、缩放倍数、输出人脸 */
int DetectAndDraw(Mat& img, CascadeClassifier& cascade, double scale, Mat& facesImg)
{double t = 0;Mat gray;Mat GrayImg;  vector<Rect> faces;double fx = 1 / scale;cvtColor( img, gray, COLOR_BGR2GRAY );    // 将源图像转为灰度图/* 缩放图像 */resize( gray, GrayImg, Size(), fx, fx, INTER_LINEAR);equalizeHist( GrayImg, GrayImg );    // 直方图均衡化,提高图像质量/* 检测目标 */t = (double)getTickCount();cascade.detectMultiScale( GrayImg, faces,1.1, 2, 0//|CASCADE_FIND_BIGGEST_OBJECT//|CASCADE_DO_ROUGH_SEARCH|CASCADE_SCALE_IMAGE,Size(30, 30) );t = (double)getTickCount() - t;printf( "detection time = %g ms faces.size = %ld\n", t*1000/getTickFrequency(), faces.size());/* 画矩形框出目标 */for ( size_t i = 0; i < faces.size(); i++ ) // faces.size():检测到的目标数量{Rect rectFace = faces[i];facesImg = GrayImg(faces[i]);rectangle(img, faces[i], Scalar(255, 0, 0), 1, 8, 0);  // 缩放后的人脸rectangle( img, Point(rectFace.x, rectFace.y) * scale, Point(rectFace.x + rectFace.width, rectFace.y + rectFace.height) * scale,Scalar(0, 255, 0), 2, 8);      // 还原后的人脸}imshow( "FaceDetect", img );  // 显示if(waitKey(1) == 27)     // 显示后要添加延时{exitFlag = 1;}return faces.size();
}

编译、运行结果:

detection time = 23.5059 ms faces.size = 1
predictPCA   : 1
predictFisher: 1
predictLBPH  : 1
Esc...

注:蓝色框为缩放后的人脸位置,绿色框为还原后的人脸位置。

人脸识别之三检测视频流(摄像头)中的人脸相关推荐

  1. 虹软java接摄像头_虹软人脸识别SDK在网络摄像头中的实际应用

    目前在人脸识别领域中,网络摄像头的使用很普遍,但接入网络摄像头和人脸识别SDK有一定门槛,在此篇中介绍过虹软人脸识别SDK的接入流程,本文着重介绍网络摄像头获取视频流并处理的流程(红色框内),以下内容 ...

  2. python视频人脸识别教程_Python学习笔记之视频人脸检测识别实例教程

    前言 上一篇博文与大家分享了简单的图片人脸识别技术,其实在实际应用中,很多是通过视频流的方式进行识别,比如人脸识别通道门禁考勤系统.人脸动态跟踪识别系统等等. 下面话不多说了,来一起看看详细的介绍吧 ...

  3. 树莓派+STM32人脸识别门禁系统(中)----- 树莓派部分

    在上一篇博客中介绍了该项目的的需求分析以及先期的准备,今天就记录一下在树莓派上的开发过程,我从接触树莓派到完成项目也只是过了俩周的时间,肯定是没有把树莓派完全玩透的,遇到问题最好的方法还是去谷歌,如果 ...

  4. 基于opencv的人脸识别和检测

    人脸识别作为一个热门项目,目前有多种方法实现,利用python和opencv来实现,是一个比较简单的项目. 1.环境配置 windows平台 python版本:3.8.6 pycharm版本:2019 ...

  5. 百度AI人脸识别与检测二:学生人脸识别打卡签到系统主界面功能需求和设计以及通过Python实现界面运行

    <百度AI人脸识别与检测>专栏为项目专栏,从零到一,从无到有开发一个学生人脸识别签到系统:主要用到的技术有百度开放平台中的人脸检测.人脸识别.Python图形界面开发PyQt5.线程的管理 ...

  6. OpenCv 之(图片人脸识别)和 (摄像头读入)

    ##先来张人脸识别效果图: ##1.概述 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进 ...

  7. ubuntu下用Qt实现人脸识别之检测人脸并绘制人脸框(三)

    ubuntu下用Qt实现人脸识别之检测人脸并绘制人脸框(三) 要检测出人脸并且还要识别出这个人是谁,就得用到人脸算法,这个算法如果你足够牛X的话可以自己写出来,当然,如果像我一样是个小菜鸟的话就得领悟 ...

  8. 人脸识别活体检测之张张嘴和眨眨眼

    暑 [这段时间有点忙,终于截止今天2018.06.22完成了人脸识别的最后一道程序--活体检测之眨眨眼和张张嘴] 关于人脸识别的内容我之前也写过好几篇博文,其中有:  {java实现人脸识别源码}  ...

  9. matlab人脸识别开题报告,基于人脸识别的出勤点名系统中特征提取算法研究开题报告...

    基于人脸识别的出勤点名系统中特征提取算法研究 一.本课题研究的目的,意义 人脸识别是一项既有科学研究价值,又有广泛应用前景的研究课题.国际上大量研究人员几十年的研究取得了丰硕的研究成果,自动人脸识别技 ...

最新文章

  1. R假设检验之Shapiro检验(正太分布判断)
  2. Win2008 R2 WEB 服务器安全设置指南之修改3389端口与更新补丁
  3. python颜色的字母代码,如何在python中更改特定印刷字母的颜色?
  4. 【Web自动化测试——代码篇十二】自动化测试模型——数据驱动测试和关键字驱动测试...
  5. 走在程序世界道路上的我___大一篇
  6. SelectSort 选择排序
  7. 电气通用规范_与通用电气的对话使我了解到有关开放式组织的知识
  8. 【连载】如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(2)
  9. 将byte数组转换成十进制字符串输出_outputStream与InputStream使用只能传输字节byte...
  10. 互联网+医疗考验无线部署 飞塔SAA同频部署模式巧妙化解
  11. python + eclipse +pydev
  12. mybatis代码自动生成工具-MyBatis Generator
  13. 设置网页地址栏小图标
  14. 【转】MySQL用户创建权限管理
  15. H5网页实现微信分享,分享朋友圈功能(分享带图片,附源码)
  16. 一文掌握步进电机控制
  17. python系列3—顺序结构和分支结构
  18. Ubuntu系统安装及常用软件设置
  19. Bash shell学习笔记(五)
  20. 自适应模糊PID在反应釜温度控制中的应用

热门文章

  1. Angular Live Development Server is listening on 0.0.0.0:4200, open your browser on url
  2. 程序员北漂奋斗九年 终于在北京买房
  3. run.rat闪退问题
  4. Python培训课程推荐
  5. C语言初阶——实用调试技巧
  6. 性能瓶颈--CPU(上下文切换)
  7. c语言设计知识,C语言程序设计的初步知识.doc
  8. 有偏估计、无偏估计、正则条件、克拉美罗下界
  9. 洗牌程序c语言原理,C语言经典算法 - 洗牌算法
  10. csharp基础练习题:TO DE-RY-PO-陆琪暗号【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练