Google Glass上的人脸检测侦听器

时间:2014-03-31 09:58:08

标签: java android google-glass

我一直在尝试在Google Glass上启用面部检测。它应该是实时运行,因为我想要触发一个自定义方法,如果在相机视线上有脸。不幸的是它始终检测到零面。 我想在应用程序启动后立即开始检测,因此我开始对表面创建进行面部识别:

@Override
public void surfaceCreated(SurfaceHolder holder) {
    camera = Camera.open();
    this.setCameraParameters(camera);
    try {
        camera.setPreviewDisplay(this.getHolder());
    } catch (IOException e1) {
        Log.e("surface created", e1.getMessage());
    }
    camera.startPreview();
    try {
        camera.setPreviewDisplay(holder);
        CameraManager manager = new CameraManager(this, camera);
        manager.startFaceRecognition();
    } catch (Exception e) {
        this.releaseCamera();
    }
}

manager.startFaceRecognition的实现:

public void startFaceRecognition() {
    ...
    camera.setFaceDetectionListener(new FaceDetectionTriggeringListener());
}

它是我传递给构造函数的相同对象。面部检测监听器的实现:

public class FaceDetectionTriggeringListener implements FaceDetectionListener {

    @Override
    public void onFaceDetection(Face[] faces, Camera camera) {
        if (faces.length > 0) {
            Log.d("onFaceDetection", Integer.toString(faces.length));
        }
        for (Face face : faces) {
            Log.d("onFaceDetection", Integer.toString(face.score));
        }
    }
}

在最后一个代码中,faces.length部分始终为零,并且没有记录任何内容。我已经尝试记录faces.length,它确实输出零。我尝试了不同的面孔,包括我的项目经理和谷歌搜索的图片。 请注意,我想实时做到这一点,我不需要最终的准确性。我已经尝试过包括图片转码的方法,但是它们太慢并且使用了太多的CPU,因此,这会使Glass变热并且耗费大量电池。目标是写下这样的东西:

if (faces.length > 0){
    Foo.bar();
}

这个问题有解决办法吗?如果可以实时工作,则接受替代解决方案。

0 个答案:

没有答案