【问题标题】:Capturing camera frame in android after face detection人脸检测后在android中捕获相机帧
【发布时间】:2014-02-21 03:03:43
【问题描述】:

我正在使用 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 来实现这一点,但我无法使用该方法保存帧。请提出一种我可以保存相机框架的方法。

【问题讨论】:

    标签: android face-detection


    【解决方案1】:

    我无法找到将相机帧保存在FaceDetectionListener 中的直接方法。因此,对于我的应用程序,我改变了处理相机预览数据的方式。我使用了Camera类的PreviewCallback接口,并在接口的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;
            }
        }
    }
    

    这不是一个理想的解决方案,但它在我的情况下有效。在这些场景中可以使用第三方库。我使用过并且运行良好的一个库是 Qualcomm 的 Snapdragon SDK。我希望有人觉得这很有用。

    【讨论】:

    • 嗨!我在我的应用程序上需要这个。你能给我提供适当的流程或代码吗?我可以在其中找到带有面部检测的视频捕获。
    • @Reshma:我建议你看看 Qualcomm 的 Snapdragon SDK for Android -developer.qualcomm.com/software/snapdragon-sdk-android
    猜你喜欢
    • 2016-09-22
    • 2017-09-07
    • 2015-03-29
    • 1970-01-01
    • 2019-03-20
    • 2013-09-24
    • 2020-12-16
    • 2015-04-20
    • 1970-01-01
    相关资源
    最近更新 更多