人脸检测是否需要SurfaceView才能工作?

时间:2012-03-20 05:41:11

标签: android camera surfaceview android-4.0-ice-cream-sandwich face-detection

使用API​​ 14我已经创建了一个成功使用面部检测的Activity(我在这个Face Detection中有点新手)。

我不想显示相机的预览;我只是想知道用户的脸在镜头前的时间。我添加了几个按钮来使SurfaceView可见/不可见,我发现当人脸检测不可见或已经过时,它会停止工作。

有没有办法在不需要布局中的SurfaceView的情况下启用面部检测?

以下是我编码的方式:

            mCamera.setPreviewDisplay(mSurfaceHolder);
            mCamera.startPreview();

            if(mCamera.getParameters().getMaxNumDetectedFaces() >0) {
                mCamera.setFaceDetectionListener(new Camera.FaceDetectionListener() {
                    @Override public void onFaceDetection(Face[] faces, Camera camera) {

                        if(faces.length > 0) {
                            System.out.println("Found someone");
                        }

                    }
                });
                mCamera.startFaceDetection();
            }

要隐藏surfaceview,我添加了一个黑色视图。 : - )

<View android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#000"/>

我有一个合理的环顾四周,我还没有找到使用startFaceDetection()的代码。

感谢您的任何想法/帮助。

2 个答案:

答案 0 :(得分:1)

您应该为您的目的使用虚拟 SurfaceTexture

  1. 通过传递任何整数(例如

    )来创建SurfaceTexture对象
     mSurfaceTexture = new SurfaceTexture(1);
    
  2. 现在,打开相机并执行以下操作:

    mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); 
     try{ 
      mCamera.setPreviewTexture(mSurfaceTexture);
    } 
    catch (IOException t) {
      //Do Something here   
    }
    
  3. 3)你可以用同样的方式做其他事情,即使用面部检测。

答案 1 :(得分:0)

如果省略

,则不会显示相机预览
setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

我还没有使用人脸检测对此进行测试(没有4.0设备且模拟器还不支持它)。但它应该有用。

参考:https://groups.google.com/forum/?fromgroups#!topic/android-developers/EzBgJRetaCo

你也可以尝试使用setPreviewTexture(SurfaceTexture st)而不是setPreviewDisplay,并使用你可以控制的SurfaceTexture。