Android(Glass)无法在onFaceDetection中检测人脸

Android(Glass)无法在onFaceDetection中检测人脸,android,android-camera,google-glass,face-detection,Android,Android Camera,Google Glass,Face Detection,我有一个小应用程序只是为了测试相机预览和面部识别。预览界面显示,我可以看到onFaceDetection回调被调用。如果我在onFaceDetection中放置一个日志调用,我会看到它被重复调用,但带有一个空的Faces[]数组 注意:下面的“Log”调用不是被调用的,下面示例中的Log调用从未被调用。但是我可以在for语句之外添加另一个日志调用,该调用将被调用 这是我的密码: package com.example.glassgoggles; import android.content.C

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

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

这是我的密码:

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...");
        }
    }

}
package com.example.glassgoggles;
导入android.content.Context;
导入android.hardware.Camera;
导入android.hardware.Camera.Face;
导入android.hardware.Camera.FaceDetectionListener;
导入android.hardware.Camera.Parameters;
导入android.util.Log;
导入android.view.SurfaceHolder;
导入android.view.SurfaceView;
公共类CameraPreviewView扩展了SurfaceView实现了SurfaceHolder.Callback,FaceDetectionListener{
private SurfaceHolder SurfaceHolder=null;
私人摄像机=空;
@抑制警告(“弃用”)
公共CameraPreviewView(上下文){
超级(上下文);
surfaceHolder=this.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(surfaceHolder.SURFACE\u TYPE\u PUSH\u缓冲区);
}
@凌驾
已创建的公共空白表面(表面持有人){
camera=camera.open();
此.setCameraParameters();
尝试
{
摄像头。设置预览显示(支架);
} 
捕获(例外e)
{
这个。释放照相机();
}
}
@凌驾
公共无效表面更改(表面文件夹持有者,整型格式,整型宽度,
整数高度){
如果(照相机!=null)
{
camera.setFaceDetectionListener(此);
camera.startPreview();
this.startFaceDetectioniSupported();
}
}
@凌驾
公共空间表面覆盖(表面覆盖物持有人){
这个。释放照相机();
}
公共无效释放摄影机()
{
如果(照相机!=null)
{
相机。释放();
摄像机=零;
}
}
public void setCameraParameters()
{
如果(照相机!=null)
{
Parameters=camera.getParameters();
参数。setPreviewFpsRange(30000,30000);
设置参数(参数);
}
}
public void startFaceDetectioniSupported(){
如果(照相机!=null){
Parameters=camera.getParameters();
if(parameters.getMaxNumDetectedFaces()>0){
Log.d(“人脸检测”,“开始…”);
camera.startFaceDetection();
}否则{
Log.d(“人脸检测”,“不允许人脸…”);
}
}
}
@凌驾
人脸检测(人脸[]人脸,摄像头){
对于(int i=0;i
人脸检测不是人脸识别。这只是一种识别相机预览中是否有人脸的方法,它可以用于一种功能,比如当手机相机预览在人脸周围绘制一个方框时,可能会聚焦在人脸上。但是Glass有一个固定焦距的摄像头,所以人脸检测并不适用。除此之外

谷歌玻璃器皿政策明确禁止面部识别

第C.1.e节规定:

不要使用相机或麦克风交叉引用并立即显示识别用户以外任何人的个人信息,包括面部识别和声纹等用例。此时不批准使用这种玻璃器皿

参考:


我希望这能使你的问题更加清楚。如果您使用的“面部识别”是一个打字错误,并且您想说“面部检测”,那么您应该编辑您的问题。

请参阅:上面的链接给人的印象是没有解决方案-使用预览时,Glass不会捕捉任何面部。这是你的结论吗@DavidKullmann?如果是的话,你玩过面部检测器和眼镜吗?