Comment puis-je faire une reconnaissance faciale sur l'iPhone. Quelqu'un pourrait-il me fournir des références/des articles pour me signaler dans la bonne direction s'il vous plaît? J'ai fait des recherches et j'ai réalisé que je dois d'abord faire la détection face à la détection pour extraire l'image, puis faire une reconnaissance faciale en le comparant à d'autres images au sein d'une base de données.
J'ai réalisé que je faisais la détection de visage en utilisant OpenCV ou en utilisant iOS 5.0 et vers le haut pour détecter le visage. Je ne suis pas sûr de la reconnaissance faciale (je prévois de stocker des images sur une base de données distante, puis de la comparaison sur la base de données distante).
Détection de visage
J'utiliserais les Haarcascades disponibles en CV Open pour effectuer une détection de visage rapide et précise.
http://opencv.willowgarage.com/wiki/facedetection
reconnaissance du visage
J'utiliserais une méthode telle que l'analyse des composants principaux (PCA) A.K.A Eigenfaces.
http://www.cognotics.com/opencv/servo_2007_series/part_5/index.html
Ce lien montre un didacticiel sur la façon de faire fonctionner avec OpenCV - je pense que ceci est écrit pour C mais je suis sûr que vous pouvez obtenir la jist de base.
Vous pouvez également regarder la mise en œuvre vous-même si vous vous sentez courageux (ce n'est pas trop mal) ...
http://www.face-rec.org/algorithms/pca/jcn.pdf
http://blog.zabarauuskas.com/eigenfaces-Tutorial/
Base de données
J'ai fait quelque chose de similaire à vous, bien que sur un PC n'est pas un iPhone, mais c'est toujours le même concept. J'ai stocké toutes mes images dans la base de données en tant que Types de données BLOB, puis les chargées dans mon programme lorsque cela est nécessaire.
Edit
La base de données est une partie particulièrement délicate du système car c'est là que c'est le plus grand goulot d'étranglement. Dans ma candidature, je passerais par les étapes suivantes ...
Heureusement pour moi, mon serveur de base de données était situé sur un réseau local, la vitesse du réseau local n'était pas un problème, mais je peux voir pourquoi vous avez un problème en raison du fait que sur un périphérique mobile, vous avez une connexion de données limitée (vitesse/bande passante). Vous pouvez également compresser les images, mais cela peut entraîner un taux de reconnaissance pire, en raison de la réduction de la qualité de l'image, et vous devrez également décoder sur l'appareil. Il existe également la question de savoir comment exposer la base de données distante à l'application, mais je pense que cela est possible en utilisant PHP et JSON (et d'autres technologies, voir ci-dessous).
récupérer des données d'une base de données distante
Peut-être que vous pourriez faire une première synchronisation avec la base de données afin que les images soient cachées sur le téléphone? Une façon ou une autre, je pense que vous allez probablement devoir avoir les images au téléphone à un moment donné, peu importe.
Défis de la meilleure façon de stocker les données/images de reconnaissance dans la base de données a été l'un des principaux défis auxquels je suis confronté, je serais donc intéressé d'entendre si vous trouvez une bonne méthode.
Comme vous l'avez souligné, la première étape (détection du visage) est facile avec iOS 5 et CoreImage.framework
. Exemple rapide:
CIImage *image = [CIImage imageWithCGImage:image_ref];
NSDictionary *options = [NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy];
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options:options];
NSArray *features = [detector featuresInImage:image];
for (CIFaceFeature *feature in features)
{
CGRect face_bounds = [feature bounds];
CGPoint mouth_position = [feature mouthPosition];
// do something with these values
}
En ce qui concerne la deuxième partie de votre question (c'est-à-dire la reconnaissance du visage ), je laisserai cela à une personne plus qualifiée que moi de répondre. :)
Vous voulez probablement regarder le projet MIDIAN de Pedro Centisiroo, qui effectue une reconnaissance face à l'iOS 5 avec OpenCV. C'est sur GitHub à:
Il utilise des parties de mon libfaacerec , de sorte qu'il soutient les villes propres, les pêcheurs et les histogrammes de modèles binaires locaux pour la reconnaissance du visage.
La reconnaissance du visage peut être mise en œuvre comme algorithme d'apprentissage de la machine. Ce livre a un chapitre décrivant cette tâche et comment la mettre en œuvre. Vaut la peine de lire!
Il utilise Décomposition à valeur unique (SVD), plus spécifiquement la méthode TENSOR SVD .
Nous avons suivi une API de reconnaissance du visage: -
1. OpenCV
2. Kairos
3. CraftarAR
4. AAFaceDetection
5. MoodMe
Et à mon avis CraftAR
est bon si vous souhaitez utiliser dans une application hors ligne et au cas où vous souhaitez utiliser en ligne, alors Kairos
est le meilleur. Tandis que OpenCV
est également une option célèbre et fiable.
Et le meilleur avantage d'OpenCV est qu'il est open source.
Veuillez rechercher sur Google pour obtenir plus de détails et consulter des exemples GitHub pour voir comment ces API fonctionnent.