【问题标题】:Android OpenCv Face recognitionAndroid OpenCv 人脸识别
【发布时间】:2018-09-15 02:10:55
【问题描述】:

我卡在人脸识别中,请帮帮我,下面是我的代码

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

我的预测方法

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

出于检查目的,我使用示例图像而不使用设备相机,我的问题是预测方法对所有示例给出相同的结果,请指导我在哪里做错了

【问题讨论】:

  • 嗨@Pratik Vyas,我是这个人脸识别的新手,你能指导我如何在Android中使用openCV。我的邮箱:inzi769@gmail.com
  • @InzimamTariqIT:学习如何为andoird应用程序提供NDK支持,并在Opencv人脸识别算法上做一些研发,然后你就会知道如何开始。
  • 我对C、C++一无所知。是否有很强的知识要求或者我可以工作?
  • 你应该有基础知识,因为理解算法需要基础理解,所以要有耐心,尝试学习c++然后继续前进

标签: opencv face-recognition


【解决方案1】:

检查您的代码后,我发现您收集标签的方式存在问题。在这个labels[i] = i; 语句中,您将为您阅读的每张图像设置一个不同的标签。我认为您每人有多个图像。标签是分配给每个 PERSON 而不是每个 IMAGE 的数值(将它们视为代码)。如果您有两个人,每个人有 3 张图像,则标签的值应为 [0, 0, 0, 1, 1, 1]。

您应该检查的另一个可能的问题是所有图片必须具有相同大小。这意味着您在循环中读取的每个图像都必须具有相同的大小ANDpredict 中使用的图像也必须具有相同的大小。做到这一点的一个好方法是定义一个固定大小,然后将您读取的每张图像调整为该固定大小。

我能想到的最后一个问题是只使用灰度图像。训练方法不使用彩色图像。所以和图片大小一样,只要读取图片,就转换成灰度图。

进一步你可以看看Face Recognition on AndroidFace recognition using OpenCV in android?

【讨论】:

  • 感谢关注,我会看看并回复你
猜你喜欢
  • 2015-07-05
  • 2016-09-18
  • 2019-08-10
  • 2011-02-20
  • 2017-02-26
  • 2017-02-03
  • 1970-01-01
  • 2018-06-14
  • 2021-03-01
相关资源
最近更新 更多