android - 我如何使用 opencv 从相机的所有位置检测带有 android 的人脸?

标签 android c++ qt 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);
    }

最佳答案

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

您需要使用所需的信息集来训练分类器。 OpenCV 在 XML 文件中为您提供预训练集,例如“正面”和“侧面”,因此首先开始使用正面和侧面运行 svm,然后进行一些过滤以从结果中删除重叠部分。

如果您想为您的识别器添加其他功能,您需要自己训练它。

关于android - 我如何使用 opencv 从相机的所有位置检测带有 android 的人脸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46836550/

相关文章:

c++ - 如何从一个线程的结果中返回一个 Qt 对象 (Qtfutur)

android - meteor 运行android设备错误

java - 在 Volley 中更新 UI 的最有效方法是什么

Android Studio 5.2 - 刷新失败。原因 :com. google.common.collect.Maps

C++试图确定最高和最低数字并获得一个长十进制数

c++ - 如何将 constexpr 作为模板参数传递?

android - android studio 在 Linux dev 机器上将 sqlite db 保存在哪里?

c++ - 使用 STL/Boost 初始化硬编码集<vector<int>>

android - Qt5 QGeoPositionInfoSource::createDefaultSource() 在 Android 5.0 上崩溃

c++ - 这种线程间通信的方法安全吗?