2016-02-19 3 views
1

J'utilise Javacv 1.1. J'ai utilisé une image de John Lennon pour tester une reconnaissance de visage, qui contient une base de données avec 3 images de Cristiano Ronaldo et 3 de John Terry. Juste pour vérifier que mon programme ne trouve pas John Lennon dans la base de données, j'ai utilisé une photo de son.comment obtenir la plage d'égalité de visage dans Javacv

Mais quand le programme prédit qui était le gars dans l'image, me montre que c'était Cristiano Ronaldo comme le gars le plus similaire. J'ai besoin de la distance entre l'image d'entrée et l'image d'entraînement la plus similaire pour vérifier si elle est assez similaire pour me dire qui est, ou si ce n'est pas assez dire le gars là-bas n'est pas connu.

Une autre question: Une astuce pour améliorer une correspondance correcte?

Répondre

0

C'était ma solution (testé uniquement pour la plate-forme Android), en supposant utilisez eigenfaces:

public boolean verifyPerson (Mat matResized) { 
     CvArr eigenvectors = faceRecognizer.getMat("eigenvectors"); 
     CvArr averageFaceRow = faceRecognizer.getMat("mean"); 
     IplImage img1D =MatToIplImage(matResized.reshape(1,1),-1, -1); 
     // Project the input image onto the eigenspace: 
     CvMat projection = subspaceProject(eigenvectors, averageFaceRow, img1D); 
     // Generate the reconstructed face back from the eigenspace: 
     CvMat reconstructionRow = subspaceReconstruct(eigenvectors, averageFaceRow, projection); 
     CvMat reconstructionMat = new CvMat(); 
     cvReshape(reconstructionRow, reconstructionMat, 1, matResized.height()); 
     Mat reconstructedFace = CvMatToMat(reconstructionMat); 
     // Calculate the L2 relative error between the 2 images. 
     double errorL2 = Core.norm(matResized, reconstructedFace, CV_L2); 
     // Scale the value since L2 is summed across all pixels. 
     double uncertainty = errorL2/(double)(matResized.rows() * matResized.cols()); 
     boolean verified; 
     if (uncertainty < MaxPersonUncertainty) { 
      verified = true; 
      }else{ 
      verified = false; // Unknown person. 
      } 
     return verified; 
    }