【bug小结】C++实现调用摄像头进行人脸检测与识别中遇到的问题与解决方法

C++实现实时人脸检测与识别中遇到的问题与解决方法

实验内容

能够调用摄像头实时抓取图像,如果图像中出现人脸,能够检测定位人脸,同时保存人脸,建立自己的人脸样本集;训练人脸识别模型;测试人脸识别模型。

实验环境与工具

Windows10操作系统
Microsoft VS 2017
OpenCV 2.4.13.6

实验中遇到的问题和解决方法

1、识别问题

问题描述

在检查代码没有问题的情况下调用摄像头检测已录入的人脸,检测结果是“陌生人”。

原因分析

经过一系列的排查,发现是python脚本的问题:生成的CSV文件中标签和文件名不是一致的。修改python脚本的代码,将生成的标签与人脸数据的文件名对应起来后就可以正确识别了。
修改后的脚本:

自动生成CSV文件的python运行脚本

2、保存问题

问题描述

在录入新的人脸中自行拍照这一步中,程序可以正确的检测人脸并进行预处理,但无法保存原图像和处理后的图像到指定路径里。

原因分析

经过检查和多次调试,发现问题:
我保存原图像的代码是这么写的,(同理保存处理后的图像)

【bug小结】C++实现调用摄像头进行人脸检测与识别中遇到的问题与解决方法

但其实需要先新建指定路径下的新文件夹,才能正常保存资源,不然程序无法找到指定该路径。
保存原图像的代码改成这样就可以了:

【bug小结】C++实现调用摄像头进行人脸检测与识别中遇到的问题与解决方法

3、识别显示问题

问题描述

在人脸识别功能中,检测已录入的人脸时出现的问题是:能够正确判断对象但无法显示对象录入的姓名信息,即显示字符串变量。
在保存录入的姓名信息到person.txt中时也出现类似的问题:无法写入字符串变量。

原因分析

经过研究和实践发现,在显示与保存字符串变量时,需要类型转换,使用c_str().