OpenCV之---人脸识别预测

周末抽空将以前很久写过的人脸识别测试demo重新复现了下,主要的模块部分还算ok,主要是人脸数据的问题,数据量越多,识别相对越精准

人脸识别预测的步骤大致包括以下几步:
一、准备人脸相关数据照片
二、通过人脸检测分类器进行人脸的切割裁剪形成自己的人脸数据库
三、通过特征脸模块进行人脸的预训练与识别

大致的流程是这样,不过期间是有很多小细节的地方需要在做的时候多注意

  • 这里先放最后的预测结果吧,预测可以通过打开摄像头的方式进行实时预测,而我这里是自己做了一个视频,以视频流的方式读入作为实时预测,
    强调一下,视频流也可以直接用程序demo的,通过图像的切割分割,这里需要自己提前算好切割的尺寸与距离
    放图先看效果
    在这里插入图片描述
    在这里插入图片描述
    可以看到效果还可以,都能预测正确,预测精度主要取决于你的数据库人脸数据的大小
  • 而我这里基本每一类都只是放了10张人脸照而已

这里基本上是采用监督的学习方式,主要是通过学习特征脸的特征数据,形成一个人脸数据库,然后通过实时的人脸检测提取人脸特征进行数据库的label预测标签的对比

  • 这里我是通过在网上下载10类的明星照片作为初始的人脸数据照片

在这里插入图片描述

  • 每一个文件夹代表一个类别,文件夹里面放相应的人脸照数据

在这里插入图片描述

  • 然后通过人脸检测模块提取人脸部分进行数据的整合,得到以下的人脸数据
    在这里插入图片描述
  • 这里把人脸检测与识别的主要核心模块代码放出来
	// train it
	Ptr<BasicFaceRecognizer> model = EigenFaceRecognizer::create();
	model->train(images, labels);

	// recognition face
	int predictedLabel = model->predict(testSample);
	printf("actual label : %d, predict label :  %d\n", testLabel, predictedLabel);

	CascadeClassifier faceDetector;
	faceDetector.load(haar_face_datapath);

	//VideoCapture capture(0);
	VideoCapture capture("C:/Users/cheng/Desktop/myface/myface.avi");
	if (!capture.isOpened()) {
		printf("could not open camera...\n");
		return -1;
	}
	Mat frame;
	namedWindow("face-recognition", WINDOW_AUTOSIZE);
	vector<Rect> faces;
	Mat dst;
	while (capture.read(frame)) {
		flip(frame, frame, 1);
		faceDetector.detectMultiScale(frame, faces, 1.1, 3, CASCADE_SCALE_IMAGE, Size(50, 50), Size(380, 400));
		//faceDetector.detectMultiScale(frame, faces, 1.1, 3, CASCADE_SCALE_IMAGE, Size(30, 30));
		for (int i = 0; i < faces.size(); i++) {
			Mat roi = frame(faces[i]);
			cvtColor(roi, dst, COLOR_BGR2GRAY);
			resize(dst, dst, testSample.size());    //数据类型与样本数据保持一致大小
			int label = model->predict(dst);
			cout << "predict_labels=" << label << endl;
			rectangle(frame, faces[i], Scalar(255, 0, 0), 2, 8, 0);
			//putText(frame, format("i'm %s", (label == predictedLabel ? "mumuxi" : "Unknow")), faces[i].tl(), FONT_HERSHEY_PLAIN, 1.0, Scalar(0, 0, 255), 2, 8);
			putText(frame, format("i'm %s", string(Face_ID[label - 1])), faces[i].tl(), FONT_HERSHEY_PLAIN, 1.0, Scalar(0, 0, 255), 2, 8);
		}

		imshow("face-recognition", frame);
		char c = waitKey(10);
		if (c == 27) {
			break;
		}
	}

然后代码里面有个csv文件,csv文件格式需要指明下,如下

在这里插入图片描述

前面一部分是人脸库的路径,后面是相应的标签值

怎么生成csv文件呢?
这里也把代码放出来,是用Python写的,很简单,遍历下文件夹就行

import os

path = "C:/Users/cheng/Desktop/myface/face_feature/"

for j in range(1, 11, 1):
    dir_path = path + str(j)

    dir_list = os.listdir(dir_path)

    for i in dir_list:
        print(dir_path + "/" + i + ";" + str(j))

具体的如果有童鞋像玩一下,需要完整的demo或者具体的流程步骤的话可以私聊博主哦!
或者关注公号<木木夕的算法笔记> 回复关键字’‘face’'可以找到文章 来找我玩吧,mua~
公众号会时不时更新有趣的图像算法哦!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值