Android OpenCv人脸识别
我被卡在识别脸上了,请帮我,下面是我的代码Android OpenCv人脸识别,opencv,face-recognition,Opencv,Face Recognition,我被卡在识别脸上了,请帮我,下面是我的代码 FaceRecognizer faceRecognizer = com.googlecode.javacv.cpp.opencv_contrib.createFisherFaceRecognizer(); 我的训练方法 public void train(){ IplImage img; IplImage grayImg; if(nameList!=null && nameList
FaceRecognizer faceRecognizer = com.googlecode.javacv.cpp.opencv_contrib.createFisherFaceRecognizer();
我的训练方法
public void train(){
IplImage img;
IplImage grayImg;
if(nameList!=null && nameList.size()>0){
for (int i = 0; i < nameList.size(); i++) {
String p = mPath+"person0/"+i+".png";
img = cvLoadImage(p);
labels[i] = i;
grayImg = IplImage.create(img.width(), img.height(), IPL_DEPTH_8U, 1);
cvCvtColor(img, grayImg, CV_BGR2GRAY);
images.put(i, grayImg);
}
}
faceRecognizer.train(images,labels);
}
出于检查目的,我在使用样本图像时没有使用设备摄像头,我的问题是预测方法对所有样本都给出了相同的结果,请指导我哪里出错在检查您的代码后,我发现您如何收集标签存在问题。在此
中,标签[i]=i代码>语句,您正在为读取的每个图像设置一个不同的标签。我想每个人都有多张照片。标签是分配给每个人而不是每个图像的数值(把它们想象成一个代码)。如果有两个人,每个人都有3个图像,则标签的值应为[0,0,0,1,1,1]
您应该检查的另一个可能的问题是所有图像的大小必须相同。这意味着您在循环中读取的每个图像必须具有相同的大小,并且predict
中使用的图像也必须具有相同的大小。一个很好的方法是定义一个固定的大小,然后将您读取的每个图像调整为该固定大小
我能想到的最后一个问题是只使用灰度图像。训练方法不使用彩色图像。所以和图像大小一样,一旦你们读到图像,就把它转换成灰度
您可以进一步查看和感谢您的关注,我会关注并回复youHi@Pratik Vyas,我对人脸识别还不熟悉。您能指导我如何在Android中使用openCV吗。我的电子邮件:inzi769@gmail.com@ InzimamTariqIT:学习如何为ANDIRD应用提供NDK支持,并在OpenCV人脸识别算法上做一些研发,然后您将了解如何开始。我对C、C++一无所知。是否有一个很强的知识需要或有点我可以工作?你应该有基础知识,因为理解算法需要基本的理解,所以有耐心,尝试学习C++,然后向前迈进。
public void predict(){
String testPath = mPath+"test/person1.png";
Mat img = imread(testPath);
IplImage ipl = MatToIplImage(img,img.width(), img.width());
int predicted = faceRecognizer.predict(ipl);
Log.v(TAG," predicted : "+predicted);
}