【发布时间】: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...");
}
}
}
【问题讨论】:
-
上面的链接给人的印象是没有解决方案 - Glass 在使用预览时不会捕捉任何人脸。这是你的结论@DavidKullmann 吗?如果是这样,您是否使用过 FaceDetector 和 Glass?
标签: android android-camera google-glass face-detection