La Reconnaissance des visages sur Android
Je suis en train de développer une Reconnaissance du Visage app sur Android, et depuis je ne souhaitez pas utiliser le NDK sur le projet, n'ont tout simplement pas le temps de passer), je m'en tiens à développer l'ensemble de l'application avec Java et à cet effet, je vais avoir quelques problèmes :
- Il semble que le Module Contrib n'est pas inclus dans OpenCV 2.4.2 . est-il de toute façon à l'utiliser dans le projet ?
- J'ai essayé d'utiliser JavaCV pour utiliser le Module Contrib "FaceRecognizer" de la classe. il y a deux classes disponibles appelé "FaceRecognizer" & "FaceRecognizerPtr". quelqu'un sait quelle est la différence entre ces deux ?
- Les catégories mentionnées ci-dessus ont une méthode dite de "Train" qui (En C++) reçoit deux Vecteurs de types "Mat & Integer" (
model->train(images,labels) & train(Vector<mat> theImages, Vector<int> theLabels
) . J'ai essayé de les passerArrayList<mat> & ArrayList<integer>
et de Vecteurs en Java, mais il semble que la méthode accepte explicitement les "CvArr" type de Données dont je ne suis pas sûr de la façon d'acquérir... Voici l'erreur :
La méthode de train(opencv_core.CvArr, opencv_core.CvArr) dans le type
opencv_contrib.FaceRecognizer n'est pas applicable pour les arguments
(ArrayList, ArrayList)
Personne ne sait comment changer mon ArrayList pour CvArr ?!
Ceci est mon premier post et je n'étais pas sûr que ce soit de demander à tous les trois questions dans un post ou trois postes, donc désolé pour les inconvénients... Si vous avez besoin d'autres Informations sur le projet, n'hésitez pas à demander.
En fait, je suis à la recherche d'une Reconnaissance du Visage de la bibliothèque plutôt que de seulement une simple Détection de Visage de la bibliothèque et de ce fait je ne peut pas utiliser Android Sdk Détection de Visage...
comment avez-vous intégré de reconnaissance de visage dans android?
OriginalL'auteur Cypher | 2012-07-28
Vous devez vous connecter pour publier un commentaire.
Mise à jour
L'article suivant a été écrit par Petter Christian Bjelland, de sorte que tout le crédit qui lui revient. Je vous poste ici, parce que son blog semble être en mode Maintenance pour le moment, mais je pense que c'est le partage de la valeur.
Faire de la reconnaissance faciale avec JavaCV (à partir de http://pcbje.com)
Je ne pouvais pas trouver n'importe quel tutoriel sur la façon d'effectuer la reconnaissance du visage à l'aide d'OpenCV et de Java, j'ai donc décidé de partager une solution viable ici. La solution est très inefficace dans sa forme actuelle, le modèle de formation est construit à chaque exécution, cependant, il montre ce qui est nécessaire pour le faire fonctionner.
La classe ci-dessous prend deux arguments: Le chemin vers le répertoire contenant la formation des visages et le chemin vers l'image que vous voulez classer. Non pas que toutes les images doit être de la même taille et de même que les visages déjà être coupées de leurs images originales (Prendre un coup d'oeil ici si vous n'avez pas fait la détection de visage encore).
Pour la simplicité de ce post, la classe exige également que la formation des images ont le nom de fichier format:
<label>-rest_of_filename.png
. Par exemple:... et ainsi de suite.
Le code:
La classe nécessite l'utilisation d'OpenCV interface Java. Si vous utilisez Maven, vous pouvez récupérer les bibliothèques requises avec les éléments suivants pom.xml:
Post Original
Citant ma réponse sur http://answers.opencv.org/question/865/the-contrib-module-problem.
Sans jamais avoir utilisé javacv, nous allons voir comment nous pouvons obtenir simplement en regardant les interfaces! Le projet est sur googlecode, ce qui le rend facile à parcourir le code: http://code.google.com/p/javacv.
D'abord jeter un oeil à la façon dont
cv::FaceRecognizer
a été enveloppé (opencv_contrib.java ligne 845 au moment de la rédaction de ce):Aha, alors vous avez besoin pour passer un
MatVector
pour les images! Vous pouvez passer les étiquettes dans unCvArr
(une ligne ou d'une colonne). LeMatVector
est défini dans opencv_core, ligne 4629 (au moment de l'écriture de cette page) et il ressemble à ceci:De nouveau, tout en regardant le code, je pense que ça peut être utilisée comme ceci:
Vous voulez sans doute faites-vous une méthode qui fait la conversion à partir d'un Java
ArrayList
à unMatVector
(si une telle fonction n'existe pas dans javacv encore).Maintenant à votre deuxième question.
FaceRecognizer
est l'équivalent decv::FaceRecognizer
. La native OpenCV des classes C++ de retour d'uncv::Ptr<cv::FaceRecognizer>
, qui est un (Smart) Pointeur vers uncv::FaceRecognizer
. Ce doit être enveloppé. Voir un modèle ici?L'interface de
FaceRecognizerPtr
ressemble maintenant à ceci:De sorte que vous pouvez obtenir soit une
FaceRecognizer
à partir de cette classe ou de mettre unFaceRecognizer
. Vous devez seulement être préoccupé par laget()
, comme le Pointeur est rempli par la méthode de la création du bétonFaceRecognizer
algorithme:Donc, une fois que vous avez obtenu le FaceRecognizerPtr, vous pouvez faire des choses comme:
Cela vous apprend un Eigenfaces modèle. Et c'est tout!
Soit utiliser un AQ ou l'autre, me demandant sur deux est un peu de l'overkill. Je ne peux écrire ce que j'ai dit sur le OpenCV AQ page. Je peux dire comment le faire dans OpenCV C++ bien sûr, mais vous ce que vous demandez est JavaCV. Donc, ces questions sont mieux posées sur le JavaCV liste de diffusion, qui est disponible à: https://groups.google.com/forum/?fromgroups#!forum/javacv
Merci ! ...
Je veux savoir si ce jamais travaillé? J'ai essayé de mettre en œuvre cet objectif, mais de ce que je pourrais dire JavaCV ne pas mettre en œuvre la facerec bibliothèque porperly
Veuillez consulter les mises à jour de réponse complète exemple de code source.
OriginalL'auteur bytefish
J'ai fait une application android pour la reconnaissance du visage à l'aide d'opencv. Pour une bonne reconnaissance vous avez besoin d'une meilleure détection, vous pouvez vérifier à partir de: https://github.com/yaylas/AndroidFaceRecognizer
J'espère que cela aide.
OriginalL'auteur user1488918