Как можно использовать 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)
Вы можете проверить пару (немного устаревших, но все же полезных) статей, которые я сделал когда-то с коллегой: