2017-10-19 59 views
0

我做了一个应用程序来检测脸部并在脸部周围画一个矩形。问题是它只能检测某个位置上的脸部,也就是说,我可以在某个位置检测到脸部的细胞,但是当我旋转时它会停止检测。我该如何检测android的使用opencv,从相机的所有位置的面孔?

我想知道是否有一个算法,让我发现在任何位置的脸,我无论躺着,面朝上,等...

正在使用frontalFace.xml的XML。

vector<Rect> detectedFaces; 
    detectedFaces.clear(); 
    frontalFaceClassifier.detectMultiScale(dst, detectedFaces, 
            1.5, 3, 2 | CV_HAAR_SCALE_IMAGE , Size(90,90)); 

    qDebug()<<"Cantidad de caras en el vector : " << detectedFaces.size(); 
    if(detectedFaces.size() > 0){ 
     actualFace = detectedFaces.at(0); 

     countDetectedFaces++; 
     qDebug()<<"**********qwerty**********"<<detectedFaces.size()<<"----------"; 
    } 
    for(int i=0;i<detectedFaces.size();i++) 
    { 

     // Dibujar un cuadrado en la zona en donde se detecta la cara. 
     Rect dibujarCuadrado = detectedFaces.at(i); 
     cv::rectangle (mat, dibujarCuadrado, 20, 1, LINE_8, 0); 
    } 

回答

1

看来你并没有很清楚的想法你在做什么。这不是关于算法,而是关于分类。

您需要使用您需要的一组信息来训练分类器。 OpenCV为您提供了预先训练的集合,例如XML文件中的“frontal faces”和“profile faces”,所以首先开始运行svm,同时使用frontal和profile,然后执行一些过滤以从结果中删除重叠。

如果你想添加其他功能到你的识别器,你需要自己培训它。

0

我想你的意思是“多视图人脸检测”。 OpenCV并不是一件容易的工作,即使是深度学习也不是一件容易的事情!

首先,使用OpenCV在多视图人脸检测中无法达到高精度。你应该使用深度学习!然而,这对于深度学习中的多视图人脸检测/识别是一个挑战,因为在学术界和工业界都没有任何有效的多视图人脸检测/识别数据库。因此,您应该首先开始创建您自己的Multi-View人脸检测数据库。 It是以编程方式创建多视图人脸检测数据库的非常有用的方法(我假设您不想手动创建数据库),并且it是Github上的源代码。在创建自己的多视图人脸检测数据库后,您可以使用深度学习(您应该使用此数据库训练您的网络)进行多视图人脸检测,然后可以使用此检测器进行Android操作系统。