OpenCV实践之路——人脸识别之三识别自己的脸

55 篇文章 205 订阅
45 篇文章 6 订阅

本文由@星沉阁冰不语出品,转载请注明作者和出处。

文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51472330

微博:http://weibo.com/xingchenbing 


在之前OpenCV实践之路——人脸识别之一数据收集和预处理OpenCV实践之路——人脸识别之二模型训练两篇博客中,已经把人脸识别的整个流程全部交代清楚了。包括今天这篇人脸识别方面的内容都已经在上述第二篇博客中的代码中有所体现。只是今天的内容会让结果更加的形象化。仅此而已。可以说,本篇的内容是前面诸多内容的一个整合。所以今天的内容也很简洁。

简单说下流程:

1.打开摄像头。

2.加载人脸检测器,加载人脸模型。

3.人脸检测

4.把检测到的人脸与人脸模型里面的对比,找出这是谁的脸。

5.如果人脸是自己的,显示自己的名字。


代码:

#include<opencv2\opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main()
{
	VideoCapture cap(0);    //打开默认摄像头
	if (!cap.isOpened())
	{
		return -1;
	}
	Mat frame;
	Mat edges;
	Mat gray;

	CascadeClassifier cascade;
	bool stop = false;
	//训练好的文件名称,放置在可执行文件同目录下
	cascade.load("haarcascade_frontalface_alt.xml");

	Ptr<FaceRecognizer> modelPCA = createEigenFaceRecognizer();
	modelPCA->load("MyFacePCAModel.xml");
	
	while (!stop)
	{
		cap >> frame;

		//建立用于存放人脸的向量容器
		vector<Rect> faces(0);

		cvtColor(frame, gray, CV_BGR2GRAY);
		//改变图像大小,使用双线性差值
		//resize(gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR);
		//变换后的图像进行直方图均值化处理
		equalizeHist(gray, gray);

		cascade.detectMultiScale(gray, faces,
			1.1, 2, 0
			//|CV_HAAR_FIND_BIGGEST_OBJECT
			//|CV_HAAR_DO_ROUGH_SEARCH
			| CV_HAAR_SCALE_IMAGE,
			Size(30, 30));

		Mat face;
		Point text_lb;

		for (size_t i = 0; i < faces.size(); i++)
		{
			if (faces[i].height > 0 && faces[i].width > 0)
			{
				face = gray(faces[i]);
				text_lb = Point(faces[i].x, faces[i].y);

				rectangle(frame, faces[i], Scalar(255, 0, 0), 1, 8, 0);
			}
		}

		Mat face_test;

		int predictPCA = 0;
		if (face.rows >= 120)
		{
			resize(face, face_test, Size(92, 112));
			
		}
		//Mat face_test_gray;
		//cvtColor(face_test, face_test_gray, CV_BGR2GRAY);

		if (!face_test.empty())
		{
			//测试图像应该是灰度图
			predictPCA = modelPCA->predict(face_test);
		}

		cout << predictPCA << endl;
		if (predictPCA == 40)
		{
			string name = "LiuXiaoLong";
			putText(frame, name, text_lb, FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255));
		}

		imshow("face", frame);
		if (waitKey(50) >= 0)
			stop = true;
	}

	return 0;
}


效果图:





-----------------------------------------------

更新:opencv3版本的代码有所改动,请参考较新的博客提示。

-----------------------------------------------

知识星球

除了平时发文章之外,也会发一些平时学习过程中其他的参考资料和代码,欢迎加入。


-----------------------------------------------
  • 25
    点赞
  • 133
    收藏
    觉得还不错? 一键收藏
  • 113
    评论
### 回答1: 人脸识别系统是一种利用计算机技术对人进行识别和验证的系统。其中,opencv人脸检测是一种基于opencv库的人脸检测算法,可以通过计算机视觉技术对图像或视频中的人进行检测和识别,具有高效、准确、实时等特点,广泛应用于安防、人机交互、智能家居等领域。 ### 回答2: 人脸识别系统是一种可以通过对人进行特征提取、比对和识别的技术,目前已广泛应用在生物特征识别、安防监控等领域。而OpenCV人脸检测是在计算机视觉领域中应用广泛的一种算法。 OpenCV是一个开源计算机视觉库,提供了很多图像处理和机器视觉算法,其中人脸检测OpenCV中应用最广泛的算法之一。OpenCV人脸检测的基本思路是利用Haar-like特征进行人脸检测。 Haar-like特征是一组由Viola和Jones在2001年提出的能够对图像进行分类的特征,主要由白色和黑色的矩形块组成。这些特征可以在人区域和非人区域产生显著的区别,因此可以用来进行人脸检测。在OpenCV中,利用Adaboost算法来训练分类器,从而实现人脸检测OpenCV人脸检测有以下几个优点: 1. 检测速度快:OpenCV人脸检测算法可以实现实时检测,能够处理实时视频,并对每一帧进行人脸检测。 2. 高检测率和低误检率:OpenCV人脸检测算法经过大量的训练和优化,能够准确地检测人,且误检率低。 3. 应用广泛:由于OpenCV是一个开源库,其特性与应用广泛,可以应用于不同领域的人脸检测。 4. 动态人脸识别OpenCV人脸检测算法能够在不同角度、不同光照条件下对人进行检测和识别。 5. 简单易用:OpenCV提供了简单的API调用,即可完成人脸检测。同时,OpenCV还提供了丰富的文档和示例,使得人脸检测的实现变得更加简单。 总之,OpenCV人脸检测算法是一种可靠的人脸检测技术,可以广泛应用于不同领域。通过不断地优化和训练,OpenCV人脸检测算法仍有望在未来得到进一步的提升。 ### 回答3: 人脸识别是一种高科技应用,它可以在不进行人工干预的情况下识别人们的身份。在过去的几年里,随着计算机技术的不断发展壮大,人脸识别技术得到了迅速的发展和应用。 Opencv人脸检测是一种常见的人脸识别技术,它可以快速、准确地检测人并提取出相关的数据信息。Opencv人脸检测使用基于统计学的模型,可以快速检索出整张图像中的所有人,并用边缘高亮标出。其识别空间包括面部区域,由眼睛、口鼻、眉毛和型等特征组成。而为了提高识别的准确度,Opencv人脸检测还涉及到其他一些算法,比如特征提取、人分类和智能识别Opencv人脸检测是非常重要的安全工具,它可以用于认证和安全访问控制、图像搜索和媒体应用。在计算机视觉和机器学习领域,Opencv人脸检测是重要的探究之一,因为对于如何解决图像多样性问题的机器人操作的研究而言,人脸检测是非常关键的。Opencv人脸检测还可以用于许多领域,如自然语言处理、光学字符识别等,进一步方便了计算机与人类之间的交流。 在未来,Opencv人脸检测技术有望得以发展与扩展,实现更加准确、精密的人脸识别,为广大人民群众的生产生活提供更多的便利与保障。诚然,Opencv人脸检测仅仅是人脸识别的一个小部分,但它在其中占有重要的地位,在此我们真诚地期待着Opencv人脸检测技术能够顺利地实现更深入的发展。
评论 113
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值