Как можно использовать API-интерфейсы для Android в приложениях, отличных от камеры?

Я хотел бы использовать некоторые API Android 4 в приложении, отличном от камеры.

API включает в себя некоторые очень красивые классы распознавания лиц, включая класс Camera.Face, доступный с API 14. Я бы хотел применить те же классы распознавания лиц, чтобы реализовать распознавание лиц на изображениях, сохраненных на устройстве. Я бы предпочел использовать это для обработки изображений, хранящихся на самом устройстве (например: социальное тегирование, манипуляция с изображениями лиц и т.д.).

Мне требуется руководство по выполнению этой задачи повторного использования.

Ответ 1

FaceDetectionListener - это то, что вы хотите использовать для обнаружения лиц, но оно только прослушивается на камере. Это единственная натурная функция. Если вы действительно хотите использовать его на изображениях на пользовательском устройстве, я бы предложил просто загрузить исходный код API-камеры и адаптировать метод, который вам нужен.

Здесь вы можете найти источник для всего кода Android: https://android.googlesource.com/

Удачи!

Ответ 2

Если вам нужно обнаружить лица на изображениях, хранящихся на устройстве, вы можете это сделать без взлома исходного кода android!

Существует API FaceDetector, доступный под пакетом android.media, поскольку API 1, который принимает Bitmap как (форматируется в формате 565) и дает вам положение лиц на этом снимке.

Вот необходимые шаги:

1- Загрузите Bitmap и преобразуйте его в 565 format (при условии, что у вас есть facesPicture файл под ваши ресурсы)

Bitmap originalBitmap = 
            BitmapFactory.decodeResource(getResources(),R.drawable.facesPicture);

Bitmap bitmap = originalBitmap .copy(Bitmap.Config.RGB_565, true);

originalBitmap .recycle(); // allow the GC to collect this object

2- Определите массив Face для хранения информации об обнаруженных лицах и инициализации FaceDetector

int MAX_FACES = 20; // assuming that the image will have maximum 20 faces

FaceDetector.Face[] faces = new FaceDetector.Face[MAX_FACES];

FaceDetector faceDetector = 
             new FaceDetector(bitmap.getWidth(), bitmap.getHeight(), MAX_FACES);

3- Поиск лиц и результатов процесса

int facesCount = faceDetector.findFaces(bitmap, faces);

for(int i=0; i<facesCount; i++) {
    FaceDetector.Face face = faces[i];

    float detectionConfidence = face.confidence(); // over 0.3 is OK

    PointF eyesMidPoint = new PointF();

    face.getMidPoint(eyesMidPoint);

    float eyesDistance = face.eyesDistance();

    float rotationX = face.pose(FaceDetector.Face.EULER_X);

    float rotationY = face.pose(FaceDetector.Face.EULER_Y);

    float rotationZ = face.pose(FaceDetector.Face.EULER_Z);

    // Do something with these values

}

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

Если вы хотите что-то более продвинутое, вам следует рассмотреть возможность использования OpenCV

Ответ 3

Вы знаете FaceDetector класс? Это там, так как API v1 и работает неплохо. Если вам нужно что-то более продвинутое, вы всегда можете использовать некоторые специализированные фреймворки, например OpenCV (с некоторыми привязками Java, чтобы легко интегрируется в приложения Android)

Вы можете проверить пару (немного устаревших, но все же полезных) статей, которые я сделал когда-то с коллегой: