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