我一直在尝试在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();
}
这个问题有解决办法吗?如果可以实时工作,则接受替代解决方案。