2010-11-08 24 views
27

Actualmente estoy trabajando en una aplicación de cámara experimental. Estoy buscando implementar la detección de rostros en este momento y actualmente estoy evaluando mis opciones.¿Detección de la cara en Android?

He considerado el puerto OpenCV disponible para Android y el uso de sus funciones de detección de rostros, pero a partir de demostraciones que he visto de implementaciones anteriores, la cámara parece estar muy retrasada.

Considerando que la cámara en el HTC Desire tiene soporte de detección de rostros, sé que debe ser posible tener instalado al menos un sistema de detección de rostros semi-decente. Me preguntaba si alguien tenía una opinión sobre cómo podría obtener los mejores resultados ... ¿Usando una biblioteca disponible? Implementando un algoritmo particular yo mismo?

Respuesta

6

El Android SDK viene con un FaceDetector que se puede usar para find faces en un mapa de bits dado.

No lo he usado, pero los desarrolladores de aplicaciones de distorsión facial dicen que no es muy preciso en comparación con OpenCV. Aunque puede que se ajuste a tus necesidades, es probablemente lo que usa la aplicación de cámara de HTC Desire.

+0

¿También tienen la capacidad de ejecutar el Bibliotecas Intel Performance en el HTC? en caso afirmativo, creo que OpenCV puede acoplarse con IPP para ofrecer ganancias de rendimiento muy impresionantes. – Denis

11
  1. Pruebe FaceDetector en el SDK de Android. Devuelve posiciones de caras y ángulos en BMP. Pero no es muy rápido.

    Aquí hay un realtime face detection sample usando FaceDetector y OpenGL (dibuja rectángulos) que funciona en Android 2.2.

  2. OpenCV in Android

    Será mejor que intente esto en Linux (lo he probado en Windows, pero fracasaron).

  3. JavaCV (muy recomendable)

    No es un ejemplo de código de detección de rostros en tiempo real usando la cámara. Consulte "javacv-src - *. Zip" en la página de descarga.

+0

su http://opencv.willowgarage.com/wiki/Android está roto – eeadev

+1

También puede probar la nueva API de Android Face (tenga en cuenta que esto es diferente de la clase FaceDetector mencionada anteriormente). Ver: https://developers.google.com/vision/ – pm0733464

3

Este es un ejemplo básico usando FaceDetector clase

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); 
     } 
    } 

enter image description here

descargar el código fuente completo aquí: https://github.com/Jorgesys/Android_Face_Detection