2010-11-08 19 views
27

Ich arbeite gerade an einer experimentellen Kamera-App. Ich bin gerade dabei, die Gesichtserkennung zu implementieren und wäge gerade meine Möglichkeiten ab.Gesichtserkennung in Android?

Ich habe den OpenCV-Port für Android und ihre Gesichtserkennung Funktionen berücksichtigt, aber von Demos, die ich von früheren Implementierungen gesehen habe, scheint die Kamera viel zu verzögern.

In Anbetracht der Kamera auf dem HTC Desire hat Gesichtserkennung Unterstützung, ich weiß, es muss möglich sein, mindestens ein halbwegs anständiges Gesichtserkennungssystem an Ort und Stelle zu bekommen. Ich habe mich nur gefragt, ob jemand eine Meinung dazu hat, wie ich die besten Ergebnisse erzielen könnte ... Mit einer verfügbaren Bibliothek? Einen bestimmten Algorithmus selbst implementieren?

Antwort

6

Das Android SDK wird mit einer FaceDetector geliefert, die in einer bestimmten Bitmap zu find faces verwendet werden kann.

Ich habe es nicht selbst verwendet, aber Entwickler von Gesichtsverzerrung apps sagen, es ist nicht sehr genau im Vergleich zu OpenCV. Es kann jedoch Ihren Bedürfnissen entsprechen, es ist wahrscheinlich, was die HTC Desire Kamera-App verwendet.

+0

haben Sie auch die Möglichkeit, die laufen Intel Performance-Bibliotheken auf dem HTC? Wenn ja, denke ich, dass OpenCV mit IPP zusammenarbeiten kann, um sehr beeindruckende Leistungssteigerungen zu erzielen. – Denis

11
  1. Versuchen Sie FaceDetector im Android SDK. Es gibt Gesichtspositionen und Winkel in BMPs zurück. Aber es ist nicht sehr schnell.

    Hier ist ein realtime face detection sample mit FaceDetector und OpenGL (zeichnet Rechtecke), die in Android 2.2 funktioniert.

  2. OpenCV in Android

    Sie besser das auf Linux versuchen würde (ich habe auf Windows versuchte es, aber nicht).

  3. JavaCV (dringend empfohlen)

    Es gibt einen Beispielcode von Echtzeit-Gesichtserkennung der Kamera. Siehe "javacv-src - *. Zip" auf der Download-Seite.

+0

Ihr http://opencv.willowgarage.com/wiki/Android ist defekt – eeadev

+1

Sie könnten auch die neue Android Face API ausprobieren (beachten Sie, dass dies anders ist als die oben erwähnte FaceDetector-Klasse). Siehe: https://developers.google.com/vision/ – pm0733464

3

Dies ist ein einfaches Beispiel FaceDetector Klasse

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

Laden Sie den vollständigen Quellcode mit hier: https://github.com/Jorgesys/Android_Face_Detection