如何在Android上使用OpenCV提高人脸检测性能?

时间:2017-09-04 19:30:35

标签: android c++ opencv qt-creator

我正在开发一个Android项目,我正在使用OpenCV通过相机检测人脸。应用程序正确检测面部,但性能非常慢。我已多次检查此问题,但我没有找到任何解决方案。有没有办法改善表现?

我的代码是:

      QVideoFrame FilterRunnable::run( QVideoFrame *input,
                             const QVideoSurfaceFormat &surfaceFormat,
                             QVideoFilterRunnable::RunFlags flags )
      {
          input->map(QAbstractVideoBuffer::ReadOnly);
          QImage image = imageWrapper(*input);
          image = image.scaled(640,480);
          cv::Mat mat(image.width(),image.height(),CV_8UC3,image.bits(),                image.bytesPerLine());

          vector< Rect > detectedFaces;
          detectedFaces.clear();
          frontalFaceClassifier.detectMultiScale( mat, detectedFaces,
                                   1.6, 3, 2 | CV_HAAR_SCALE_IMAGE ,  Size(60,60) );

          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++)
          {
            Rect dibujarCuadrado = detectedFaces.at(i);

            cv::rectangle (mat, dibujarCuadrado, 20, 1, LINE_8, 0);
          }
      }

1 个答案:

答案 0 :(得分:1)

我看到你只实施了一个haar分类器。我假设你使用了frontleface。您可以在else语句中合并配置文件面分类器(在opencv haar包中提供)以提高准确性。通常,您可以训练您想要的任何分类器并将它们合并。对于训练分类器,这是一个很棒的视频here