Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OpenCv人脸识别_Opencv_Face Recognition - Fatal编程技术网

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);
    }