Как можно использовать API камеры Android в приложениях без камеры?

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

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

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

3 ответов


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

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

удачи!


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

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

вот шаги, которые вам нужны:

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

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

}

вы можете скачать полный пример проекта здесь что описано в этой статье обнаружение лица с Android API

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


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

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

  1. обнаружение лица на части Andriod-I
  2. обнаружение лица на Andriod Part-II