Распознавание лиц в Android?

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

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

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

Ответ 1

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

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

  • OpenCV в Android

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

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

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

Ответ 2

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

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

Ответ 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