Я экспериментировал с распознаванием лиц, используя алгоритм Fisherfaces в качестве модели, и хотел посмотреть, можно ли применить то же самое к объекту без лица. Я вижу, что мое приложение работает следующим образом:
вот код, который я собирался использовать для обучения (шаг 2):
//check if the contrib module is available first
bool contribModelStatus = initModule_contrib();
if ( !contribModelStatus )
exit(1);
//define the model
Ptr<FaceRecognizer> model;
model = Algorithm::create<FaceRecognizer>(recAlgorithmFisherfaces);
//check if the model was loaded properly
if (model.empty())
exit(1);
//train the model
model->train(objectsArray, labelsArray);
для распознавания (шаг 3):
Mat eigenvectors = model->get<Mat>("eigenvectors");
Mat average = model->get<Mat>("mean");
int height = obj.rows;
//define a projection Mat based on the eigenvectors, avarage object and the object we'll like to test
Mat projection = subspaceProject(eigenvectors, average, obj.reshape(1,1));
//reconstruct the projection and reshape it.
Mat reconstructionRow = subspaceReconstruct(eigenvectors, average, projection);
Mat reconstructionMat = reconstructionRow.reshape(1, height);
Mat reconsructedObj = Mat(reconstructionMat.size(), CV_8U);
reconstructionMat.convertTo(reconsructedObj, CV_8U, 1, 0 );
и для прогноза (шаг 4):
// ... compeare the similarity of the reconstructionMat to the original object and predict
double similarity = getSimilarity(recognizeMat, reconsructedObj);
float obj_treshold = 0.7f;
check if the similarity is larger then the treshold
f (similarity > obj_treshold) {
identity = model->predict(recognizeMat);
cout << "Object identity: " << toString(identity) << endl;
} else {
cout << "unidentified object" << endl;
}
Я получаю некоторые ошибки, пытаясь это сделать — я предполагаю, что это связано с тем фактом, что я не обучил большой объем данных, однако мой вопрос заключается в том, будет ли это надежным для объектов, которые не являются лицами, или использует алгоритмы распознавания лиц работать только с лицами, есть ли в opencv разные алгоритмы, которые следует использовать для распознавания не лица.
вот ссылка на ошибку, которую я получаю.
http://lab.onetwoclick.com/stuff/stackoverflow/opencv_Fisherfaces_Eigenfaces.jpg
Задача ещё не решена.
Других решений пока нет …