Предикат OpenCV () против детектирования MultiScale () - PullRequest
0 голосов
/ 26 апреля 2018

Я работаю над определением лица, пола и возраста с помощью OpenCV. У меня есть куча изображений, которые я использую для обучения моделей, в настоящее время у меня есть следующее:

Ptr<cv::face::FaceRecognizer> model = cv::face::LBPHFaceRecognizer::create(9, 9);
std::vector<int> labels;
std::vector<std::string> imageFileNames;

for (int currImageIndex = 0; currImageIndex < imageFileNames.size(); currImageIndex++)
{
    cv::Mat currMatrix;
    std::string currentFileName = imageFileNames[currImageIndex];
    std::string gender;
    int currID = -1;

    //Save the image and the corresponding ID to the list(s).
    currMatrix = imread(currentFileName , CV_LOAD_IMAGE_GRAYSCALE);
    if (currMatrix.data != NULL)
    {
        images.push_back(currMatrix);
        labels.push_back(currID);
    }
}

model->train(images, labels);
model->write("C:\\temp.xml");

Затем, используя эвристику temp.xml, я предсказываю генет следующим образом:

gendermodel->predict(currMat, predictedLabel, conf);

Однако я столкнулся с этой реализацией с использованием detectMultiScale() и "Cascade Classifier". В чем разница? Есть ли преимущество в производительности при использовании Cascade Classifier по сравнению с тем, как я сейчас это делаю? detectMultiScale() работает лучше, чем predict()?

1 Ответ

0 голосов
/ 26 апреля 2018

CascadeClassifier::detectMultiScale функция используется для объекта обнаружение . Возвращает переменную типа std::vector<cv::Rect>, которая содержит ограничивающие прямоугольники обнаруженных объектов.

FaceRecognizer::predict функция используется для объекта классификация . Возвращает метку класса входного изображения и достоверность, с которой прогнозируется объект.

...