2010-11-08 2 views
27

В настоящее время я работаю над экспериментальным приложением камеры. Я изучаю процесс обнаружения лиц в данный момент, и в настоящее время я взвешиваю свои варианты.Распознавание лиц в Android?

Я рассматривал порт OpenCV, доступный для Android, и используя функции распознавания лиц, но из демонстраций, которые я видел в предыдущих реализациях, камера, похоже, сильно отстает.

Учитывая, что камера на HTC Desire имеет поддержку распознавания лиц, я знаю, что должно быть возможно получить по крайней мере полупорядочную систему обнаружения лиц на месте. Мне просто интересно, есть ли у кого-то мнение о том, как я могу получить наилучшие результаты ... Используя доступную библиотеку? Внедрение конкретного алгоритма?

ответ

6

Android SDK поставляется с FaceDetector, который может использоваться для find faces в данном растровом изображении.

Я не использовал его сам, но разработчики приложений для искажения лица говорят, что он не очень точен по сравнению с OpenCV. Он может соответствовать вашим потребностям, но, вероятно, это то, что использует приложение камеры HTC Desire.

+0

у вас также есть возможность запускать Библиотеки производительности Intel на HTC? если да, я думаю, что OpenCV может сочетаться с IPP, чтобы обеспечить очень впечатляющую производительность. – Denis

11
  1. Попробуйте FaceDetector в Android SDK. Он возвращает лицевые позиции и углы в BMP. Но это не очень быстро.

    Вот realtime face detection sample с использованием FaceDetector и OpenGL (рисует прямоугольники), который работает в Android 2.2.

  2. OpenCV in Android

    Лучше попробовать это на Linux (я пробовал его на Windows, но не удалось).

  3. JavaCV (настоятельно рекомендуется)

    Существует образец код в режиме реального времени обнаружения лица с помощью фотокамеры. См. «Javacv-src - *. Zip» на странице загрузки.

+0

ваш http://opencv.willowgarage.com/wiki/Android не работает – eeadev

+1

Вы также можете попробовать новый интерфейс Face Face (обратите внимание, что это отличается от класса FaceDetector, упомянутого выше). См. Https://developers.google.com/vision/ – pm0733464

3

Это базовый пример использования FaceDetector класса

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

Загрузить полный исходный код здесь: https://github.com/Jorgesys/Android_Face_Detection