繁体   English   中英

Android(玻璃)无法在onFaceDetection中检测到人脸

[英]Android (Glass) Unable to Detect Faces in onFaceDetection

我有一个小应用程序,仅用于测试相机预览和面部识别。 预览表面显示出来,我可以看到调用了onFaceDetection回调。 如果我在onFaceDetection中放置一个Log调用,我会看到它被重复调用,但是有一个空的Faces []数组。

注意:下面的“ Log”调用不是被调用的,在下面的示例中从未调用Log调用。 但是我可以在for语句之外添加另一个Log调用,该调用将被调用。

这是我的代码:

package com.example.glassgoggles;

import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.Face;
import android.hardware.Camera.FaceDetectionListener;
import android.hardware.Camera.Parameters;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class CameraPreviewView extends SurfaceView implements SurfaceHolder.Callback, FaceDetectionListener {

    private SurfaceHolder surfaceHolder = null;
    private Camera camera = null;

    @SuppressWarnings("deprecation")
    public CameraPreviewView(Context context) {
        super(context);

        surfaceHolder = this.getHolder();
        surfaceHolder.addCallback(this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {

        camera = Camera.open();
        this.setCameraParameters();
        try 
        {
            camera.setPreviewDisplay(holder);
        } 
        catch (Exception e) 
        {
            this.releaseCamera();
        }

    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        if (camera != null)
        {
            camera.setFaceDetectionListener(this);
            camera.startPreview();
            this.startFaceDetectionIfSupported();
        }

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        this.releaseCamera();       
    }

    public void releaseCamera() 
    {
        if (camera != null) 
        {
            camera.release();
            camera = null;
        }
    }

    public void setCameraParameters()
    {
        if (camera != null)
        {
            Parameters parameters = camera.getParameters();
            parameters.setPreviewFpsRange(30000, 30000);
            camera.setParameters(parameters);   
        }
    }

    public void startFaceDetectionIfSupported() {
        if (camera != null) {
            Parameters parameters = camera.getParameters();
            if (parameters.getMaxNumDetectedFaces() > 0) {
                Log.d("Face Detection", "Starting...");
                camera.startFaceDetection();
            } else {
                Log.d("Face Detection", "No faces allowed...");
            }
        }
    }

    @Override
    public void onFaceDetection(Face[] faces, Camera camera) {
        for(int i = 0; i < faces.length; i++) {
            Log.d("Face Check", "Found a face...");
        }
    }

}

人脸检测不是人脸识别。 这只是一种识别摄像头预览中是否存在面部的方法,它可以用于诸如电话摄像头预览在面部周围绘制框或将焦点聚焦在面部上的功能。 但是Glass拥有固定焦点的相机,因此面部检测并不是真正适用。 最重要的是...

Google眼镜玻璃规章明确禁止面部识别。

C.1.e节说:

请勿使用相机或麦克风进行交叉引用,并立即提供可识别除用户之外的任何人的个人信息,包括用例,例如面部识别和语音打印。 这样做的玻璃器皿目前不会被批准。

参考:

https://developers.google.com/glass/policies

我希望这可以使您的问题更加清楚。 如果您使用“面部识别”是一个错字,而您想说“面部识别”,则应该编辑您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM