Перейти к содержимому
Compvision.ru
stepofchange

Распознавание лица в android

Recommended Posts

Здравствуйте! Пишу программу распознавания лица на android, изучаю пример из книги "Mastering OpenCV with Practical Computer Vision Projects" главы 8, попутная переписывая пример на javacv, но столкнулся с проблемой: в файле recognition.cpp присутствует следующий код:

Mat reconstructFace(const Ptr<FaceRecognizer> model, const Mat preprocessedFace)
{
    // Since we can only reconstruct the face for some types of FaceRecognizer models (ie: Eigenfaces or Fisherfaces),
    // we should surround the OpenCV calls by a try/catch block so we don't crash for other models.
    try {

        // Get some required data from the FaceRecognizer model.
        Mat eigenvectors = model->get<Mat>("eigenvectors");
        Mat averageFaceRow = model->get<Mat>("mean");

        int faceHeight = preprocessedFace.rows;

        // Project the input image onto the PCA subspace.
        Mat projection = subspaceProject(eigenvectors, averageFaceRow, preprocessedFace.reshape(1,1));
        //printMatInfo(projection, "projection");

        // Generate the reconstructed face back from the PCA subspace.
        Mat reconstructionRow = subspaceReconstruct(eigenvectors, averageFaceRow, projection);
        //printMatInfo(reconstructionRow, "reconstructionRow");

        // Convert the float row matrix to a regular 8-bit image. Note that we
        // shouldn't use "getImageFrom1DFloatMat()" because we don't want to normalize
        // the data since it is already at the perfect scale.

        // Make it a rectangular shaped image instead of a single row.
        Mat reconstructionMat = reconstructionRow.reshape(1, faceHeight);
        // Convert the floating-point pixels to regular 8-bit uchar pixels.
        Mat reconstructedFace = Mat(reconstructionMat.size(), CV_8U);
        reconstructionMat.convertTo(reconstructedFace, CV_8U, 1, 0);
        //printMatInfo(reconstructedFace, "reconstructedFace");

        return reconstructedFace;

    } catch (cv::Exception e) {
        //cout << "WARNING: Missing FaceRecognizer properties." << endl;
        return Mat();
    }
}

Я не могу понять, что делают в данном коде строки:         Mat eigenvectors = model->get<Mat>("eigenvectors");
        Mat averageFaceRow = model->get<Mat>("mean")

Что они получают? И есть ли альтернатива этому в javacv?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это считывание матриц собственных векторов и усредненного лица, полученных при обучении методом главных компонент.

javacv не знаю, но с cv::FileStorage, на базе которых построен ввод вывод в OpenCV на андроиде не работает, поэтому возникают проблемы и с загрузкой каскадов в нативе и таких вот загрузках матриц.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
7 часов назад, Smorodov said:

Это считывание матриц собственных векторов и усредненного лица, полученных при обучении методом главных компонент.

javacv не знаю, но с cv::FileStorage, на базе которых построен ввод вывод в OpenCV на андроиде не работает, поэтому возникают проблемы и с загрузкой каскадов в нативе и таких вот загрузках матриц.

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 27.12.2015 at 12:14, Smorodov said:

Это считывание матриц собственных векторов и усредненного лица, полученных при обучении методом главных компонент.

javacv не знаю, но с cv::FileStorage, на базе которых построен ввод вывод в OpenCV на андроиде не работает, поэтому возникают проблемы и с загрузкой каскадов в нативе и таких вот загрузках матриц.

Кстати проверил  CvFileStorage  на андройде работает, по крайней мере на javacv, но как загрузить собственные вектора не пойму, как я понимаю их можно взять из .yaml файла, который я сохраняю после обучения? Или как? Откуда должны грузиться собственные векторы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну да, на компе с файла, на девайсе вероятно из ресурсов или с файла. Посмотрите, ваша model должна при инициализации что-то такое открывать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
54 минуты назад, Smorodov said:

Ну да, на компе с файла, на девайсе вероятно из ресурсов или с файла. Посмотрите, ваша model должна при инициализации что-то такое открывать.

Спасибо! Разобрался)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×