人脸识别之三检测视频流(摄像头)中的人脸
完整人脸识别系统(源码+教程+环境):
开源毕业设计:基于嵌入式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...
注:蓝色框为缩放后的人脸位置,绿色框为还原后的人脸位置。
人脸识别之三检测视频流(摄像头)中的人脸相关推荐
- 虹软java接摄像头_虹软人脸识别SDK在网络摄像头中的实际应用
目前在人脸识别领域中,网络摄像头的使用很普遍,但接入网络摄像头和人脸识别SDK有一定门槛,在此篇中介绍过虹软人脸识别SDK的接入流程,本文着重介绍网络摄像头获取视频流并处理的流程(红色框内),以下内容 ...
- python视频人脸识别教程_Python学习笔记之视频人脸检测识别实例教程
前言 上一篇博文与大家分享了简单的图片人脸识别技术,其实在实际应用中,很多是通过视频流的方式进行识别,比如人脸识别通道门禁考勤系统.人脸动态跟踪识别系统等等. 下面话不多说了,来一起看看详细的介绍吧 ...
- 树莓派+STM32人脸识别门禁系统(中)----- 树莓派部分
在上一篇博客中介绍了该项目的的需求分析以及先期的准备,今天就记录一下在树莓派上的开发过程,我从接触树莓派到完成项目也只是过了俩周的时间,肯定是没有把树莓派完全玩透的,遇到问题最好的方法还是去谷歌,如果 ...
- 基于opencv的人脸识别和检测
人脸识别作为一个热门项目,目前有多种方法实现,利用python和opencv来实现,是一个比较简单的项目. 1.环境配置 windows平台 python版本:3.8.6 pycharm版本:2019 ...
- 百度AI人脸识别与检测二:学生人脸识别打卡签到系统主界面功能需求和设计以及通过Python实现界面运行
<百度AI人脸识别与检测>专栏为项目专栏,从零到一,从无到有开发一个学生人脸识别签到系统:主要用到的技术有百度开放平台中的人脸检测.人脸识别.Python图形界面开发PyQt5.线程的管理 ...
- OpenCv 之(图片人脸识别)和 (摄像头读入)
##先来张人脸识别效果图: ##1.概述 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进 ...
- ubuntu下用Qt实现人脸识别之检测人脸并绘制人脸框(三)
ubuntu下用Qt实现人脸识别之检测人脸并绘制人脸框(三) 要检测出人脸并且还要识别出这个人是谁,就得用到人脸算法,这个算法如果你足够牛X的话可以自己写出来,当然,如果像我一样是个小菜鸟的话就得领悟 ...
- 人脸识别活体检测之张张嘴和眨眨眼
暑 [这段时间有点忙,终于截止今天2018.06.22完成了人脸识别的最后一道程序--活体检测之眨眨眼和张张嘴] 关于人脸识别的内容我之前也写过好几篇博文,其中有: {java实现人脸识别源码} ...
- matlab人脸识别开题报告,基于人脸识别的出勤点名系统中特征提取算法研究开题报告...
基于人脸识别的出勤点名系统中特征提取算法研究 一.本课题研究的目的,意义 人脸识别是一项既有科学研究价值,又有广泛应用前景的研究课题.国际上大量研究人员几十年的研究取得了丰硕的研究成果,自动人脸识别技 ...
最新文章
- R假设检验之Shapiro检验(正太分布判断)
- Win2008 R2 WEB 服务器安全设置指南之修改3389端口与更新补丁
- python颜色的字母代码,如何在python中更改特定印刷字母的颜色?
- 【Web自动化测试——代码篇十二】自动化测试模型——数据驱动测试和关键字驱动测试...
- 走在程序世界道路上的我___大一篇
- SelectSort 选择排序
- 电气通用规范_与通用电气的对话使我了解到有关开放式组织的知识
- 【连载】如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(2)
- 将byte数组转换成十进制字符串输出_outputStream与InputStream使用只能传输字节byte...
- 互联网+医疗考验无线部署 飞塔SAA同频部署模式巧妙化解
- python + eclipse +pydev
- mybatis代码自动生成工具-MyBatis Generator
- 设置网页地址栏小图标
- 【转】MySQL用户创建权限管理
- H5网页实现微信分享,分享朋友圈功能(分享带图片,附源码)
- 一文掌握步进电机控制
- python系列3—顺序结构和分支结构
- Ubuntu系统安装及常用软件设置
- Bash shell学习笔记(五)
- 自适应模糊PID在反应釜温度控制中的应用
热门文章
- Angular Live Development Server is listening on 0.0.0.0:4200, open your browser on url
- 程序员北漂奋斗九年 终于在北京买房
- run.rat闪退问题
- Python培训课程推荐
- C语言初阶——实用调试技巧
- 性能瓶颈--CPU(上下文切换)
- c语言设计知识,C语言程序设计的初步知识.doc
- 有偏估计、无偏估计、正则条件、克拉美罗下界
- 洗牌程序c语言原理,C语言经典算法 - 洗牌算法
- csharp基础练习题:TO DE-RY-PO-陆琪暗号【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练