Обнаружение лица в Android? - PullRequest
       12

Обнаружение лица в Android?

27 голосов
/ 08 ноября 2010

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

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

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

Ответы [ 3 ]

12 голосов
/ 19 мая 2011
  1. Попробуйте FaceDetector в Android SDK.Возвращает положение лица и углы в BMP.Но это не очень быстро.

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

  2. OpenCV в Android

    Вам лучше попробовать это в Linux (я пробовал в Windows, но не получилось).

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

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

7 голосов
/ 08 ноября 2010

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

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

3 голосов
/ 13 ноября 2014

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

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

...