【问题标题】:Android (Glass) Unable to Detect Faces in onFaceDetectionAndroid(玻璃)无法在 onFaceDetection 中检测人脸
【发布时间】:2014-07-06 20:54:29
【问题描述】:

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

注意:下面的“日志”调用不是被调用的,在我下面的示例中,日志调用是从不调用的。但我可以在 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...");
        }
    }

}

【问题讨论】:

标签: android android-camera google-glass face-detection


【解决方案1】:

人脸检测不是人脸识别。这只是一种识别相机预览中是否有人脸的方法,它可以用于诸如手机相机预览在人脸周围绘制一个框并可能聚焦于人脸的功能。但 Glass 有一个定焦摄像头,因此人脸检测并不适用。最重要的是...

Google Glass 的 Glassware 政策明确禁止面部识别。

C.1.e 节说:

请勿使用摄像头或麦克风来交叉引用和立即提供可识别用户以外任何人的个人信息,包括面部识别和声纹等用例。目前不会批准这样做的玻璃器皿。

参考:

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

我希望这可以使您的问题更加清晰。如果您对“面部识别”的使用是一个错字,并且您的意思是“面部检测”,您应该编辑您的问题。

【讨论】:

    猜你喜欢
    • 2012-11-29
    • 2013-09-24
    • 2013-07-03
    • 2011-07-31
    • 1970-01-01
    • 2018-06-19
    • 2019-02-27
    • 2016-11-18
    • 2011-05-06
    相关资源
    最近更新 更多