用openCV编写人脸识别项目时,总提示FaceRecognizer没有load以及predict是为什么?
报错代码段是这样的
Ptr<FaceRecognizer> modelPCA = EigenFaceRecognizer::create();
//加载分类器
modelPCA->load("F:\\SS\\qt\\achieve\\build-test2-Desktop_Qt_6_6_0_MinGW_64_bit-Debug\\MyFacePCAModel.xml");//加载分类器
if(!face_cascade.load("F:\\SS\\OpenCV\\opencv-4.x\\data\\haarcascades\\haarcascade_frontalface_alt.xml"))
{
qDebug("Load face failed!");
return;
}
//检测关于眼睛部位
//检测
eye_Classifier.detectMultiScale(cap_gray,eyeRect,1.1,2,0 |CASCADE_SCALE_IMAGE,Size(30,30));
for(size_t eyeIdx=0 ; eyeIdx<eyeRect.size(); eyeIdx++)
{
rectangle(cap,eyeRect[eyeIdx],Scalar(0,0,255));
//用红色矩形画出检测到的位置
}
//检测脸部
face_cascade.detectMultiScale(cap_gray,faceRect,1.1,2,0 |CASCADE_SCALE_IMAGE,Size(30,30));
for(size_t i=0;i<faceRect.size();i++)
{
rectangle(cap,faceRect[i],Scalar(0,255,0)); //用绿色画出检测到的位置
Mat faceROI =cap_gray(faceRect[i]);
int predictPCA=0;
Mat face_test;
Point text_lb;
//改变图像大小
cv::resize(faceROI,face_test,Size(92,112));
imshow("frame",face_test);
predictPCA=modelPCA.predict(face_test);
错误提示这样
请问这是为什么?
1,因为你load函数用错了,opencv对这个load函数的参数要求是const string或FileStorage类型,而你给的是const char * ,类型不匹配自然报错。
2,predict函数也一样是用法不对,但你没给出结构体内的定义,所以我也看不到。自己跟上一条这样去分析找下吧。这两个问题都是用法不正确。
参考GPT和自己的思路:
根据您的代码和报错信息,看起来是modelPCA没有成功加载对应的xml文件,因此在调用predict方法时出现了错误。您可以先确保xml文件的路径正确无误,然后再尝试重新加载分类器。建议使用绝对路径来避免路径错误。另外,如果仍然存在问题,您也可以尝试使用LBPHFaceRecognizer或FisherFaceRecognizer类进行人脸识别,看是否能够解决问题。
参考GPT和自己的思路:
根据提供的代码及错误提示,可以看出问题可能出现在以下几个方面:
人脸分类器没有正确加载导致模型无法使用;
加载模型时文件路径不正确,无法加载模型;
预测时输入的人脸图像没有成功转换成模型所需要的格式。
针对这些可能的问题,你可以采取以下一些解决方法:
确认人脸分类器是否已正确加载,并且所使用的路径是否正确。
确认加载模型时文件路径是否正确,并且确认模型文件是否存在。
确认预测时输入的人脸图像是否成功转换成模型所需要的格式。可以尝试使用opencv提供的函数resize()等将图像转换成模型需要的格式。
如果以上解决方法均不能解决问题,你可以提供更多的代码及错误提示,以便更好地排查问题。