Заснемане на рамка на камерата в android след разпознаване на лице

Работя с разпознаване на лица в Android и искам да постигна следното:
1. Използвайте слушател за разпознаване на лица в Android за откриване на лица в рамката на камерата.
2. Ако в рамката на камерата бъде разпознато лице, извлечете лицето и го запазете във външна памет.

След като прегледах съществуващите въпроси, открих, че няма директен начин за конвертиране на открито лице в растерно изображение и съхраняването му на диска. Така че сега искам да заснема и запазя целия кадър на камерата, в който е открито лицето, но не успях да го направя.

Текущата структура на кода е както следва:

FaceDetectionListener faceDetectionListener = new FaceDetectionListener() {

    @Override
    public void onFaceDetection(Face[] faces, Camera camera) {

        if (faces.length == 0) {
        } else {
            displayMessage("Face detected!");   
            // CODE TO SAVE CURRENT FRAME AS IMAGE
            finish();
        }
    }
};

Опитах се да постигна това, като извиках takePicture в горния метод, но не успях да запазя рамката, използвайки този подход. Моля, предложете начин, по който мога да запазя рамката на камерата.


person Bhoot    schedule 29.01.2014    source източник


Отговори (1)


Не можах да разбера директен начин за запазване на рамката на камерата в рамките на FaceDetectionListener. Затова за моето приложение промених начина, по който обработвах данните за визуализация на камерата. Използвах PreviewCallback интерфейса на Camera клас и внедрих логиката в onPreviewFrame метод на интерфейса. Схемата на изпълнение е следната:

class SaveFaceFrames extends Activity implements Camera.PreviewCallback, Camera.FaceDetectionListener {

    boolean lock = false; 

    public void onPreviewFrame(byte[] data, Camera camera) {
        ...
        if(lock) {
            Camera.Parameters parameters = camera.getParameters();
            Camera.Size size = parameters.getPreviewSize();
            YuvImage image = new YuvImage(data, parameters.getPreviewFormat(), size.width, size.height, null);
            ByteArrayOutputStream outstr = new ByteArrayOutputStream();
            image.compressToJpeg(new Rect(0, 0, image.getWidth(), image.getHeight()), 100, outstr);
            Bitmap bmp = BitmapFactory.decodeByteArray(outstr.toByteArray(), 0, outstr.size());
            lock = false;
        }
    }

    public void onFaceDetection(Camera.Face[] faces, Camera camera) {
        ...
        if(!lock) {
            if(faces.length() != 0) lock = true;
        }
    }
}

Това не е идеалното решение, но в моя случай проработи. Има библиотеки на трети страни, които могат да се използват в тези сценарии. Една библиотека, която съм използвал и работи много добре, е SDK на Qualcomm Snapdragon. Надявам се някой да намери това за полезно.

person Bhoot    schedule 28.04.2015
comment
здрасти! имам нужда от това в моето приложение. можете ли да ми предоставите подходящ поток или код, където мога да намеря заснемане на видео с разпознаване на лица. - person Reshma; 16.12.2015
comment
@Reshma: Предлагам ви да разгледате SDK на Qualcomm Snapdragon за Android - разработчик. qualcomm.com/software/snapdragon-sdk-android. - person Bhoot; 16.12.2015