Je travaille actuellement sur une application de caméra expérimentale. Je suis en train d'étudier la possibilité de mettre en place une détection de visage et je suis en train d'évaluer mes options. J'ai considéré le port OpenCV disponible pour Android et en utilisant leurs fonctions de détection de visages, mais d'après les démos que j'ai vues des implémentations précédentes, la caméra semble avoir beaucoup de retard. Compte tenu de la prise en charge de la détection des visages sur l'appareil photo du HTC Desire, je sais qu'il doit être possible de mettre en place au moins un système de détection de visage semi-décent. Je me demandais juste si quelqu'un avait une opinion sur la façon dont je pourrais obtenir les meilleurs résultats ... Utilisant une bibliothèque disponible? Implémentation d'un algorithme particulier moi-même?Détection de visage dans Android?
Répondre
Le SDK Android est livré avec un FaceDetector qui peut être utilisé pour find faces dans un bitmap donné.
Je ne l'ai pas utilisé moi-même, mais les développeurs d'applications de distorsion faciale disent qu'il n'est pas très précis par rapport à OpenCV. Cela peut correspondre à vos besoins, c'est probablement ce que l'application de l'appareil photo HTC Desire utilise.
Essayez le FaceDetector dans le SDK Android. Il renvoie les positions et les angles des faces dans les MPG. Mais ce n'est pas très rapide.
Voici un realtime face detection sample en utilisant FaceDetector et OpenGL (dessine des rectangles) qui fonctionne sous Android 2.2.
-
Vous feriez mieux d'essayer cela sur Linux (je l'ai essayé sur Windows, mais a échoué).
JavaCV (fortement recommandé)
Il y a un exemple de code de détection en temps réel de visage à l'aide de l'appareil photo. Voir "javacv-src - *. Zip" sur la page de téléchargement.
Ceci est un exemple de base en utilisant FaceDetector de classe
public myView(Context context) {
super(context);
BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options();
BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565;
myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.threepoint_shooters_1990, BitmapFactoryOptionsbfo);
imageWidth = myBitmap.getWidth();
imageHeight = myBitmap.getHeight();
myFace = new FaceDetector.Face[numberOfFace];
myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace);
numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(myBitmap, 0, 0, null);
Paint myPaint = new Paint();
myPaint.setColor(Color.GREEN);
myPaint.setStyle(Paint.Style.STROKE);
myPaint.setStrokeWidth(3);
for (int i = 0; i < numberOfFaceDetected; i++) {
Face face = myFace[i];
PointF myMidPoint = new PointF();
face.getMidPoint(myMidPoint);
myEyesDistance = face.eyesDistance();
canvas.drawRect((int) (myMidPoint.x - myEyesDistance * 2),
(int) (myMidPoint.y - myEyesDistance * 2),
(int) (myMidPoint.x + myEyesDistance * 2),
(int) (myMidPoint.y + myEyesDistance * 2), myPaint);
}
}
Télécharger le code source complet ici: https://github.com/Jorgesys/Android_Face_Detection
-vous également la possibilité d'exécuter la Les bibliothèques Intel Performance sur le HTC? si oui, je pense qu'OpenCV peut s'associer à IPP pour générer des gains de performances impressionnants. – Denis