2012-03-20 68 views
3

使用API​​ 14我创建了一个Activity,它成功地使用了人脸检测(我在这个人脸检测方面有点新鲜)。人脸检测是否需要SurfaceView才能正常工作?

但我不想显示相机的预览,我只想知道用户的脸部位于相机的前方。我添加了几个按钮来使SurfaceView可见/不可见,并且我发现当它是INVISIBLE或GONE时,面部检测停止工作。

有没有办法启用面部检测而不需要布局中的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()多的代码呢。

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

+0

你有没有找到这个问题的答案?我找到了一个使用人脸检测的项目,但只尝试使用没有表面视图的人脸检测,我还没有想出如何去做。 https://github.com/ProjPossibility/2014-CSUN-Cam4Blind – portfoliobuilder 2015-04-29 18:31:12

回答

0

预览没有得到显示的相机,如果你省略

setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

我还没有与人脸检测(无4.0设备和仿真器还不支持它)测试此。但它应该工作。

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

你也可以尝试使用setPreviewTexture(表面纹理ST),而不是setPreviewDisplay并使用表面纹理,你可以控制的。

+0

该参考文献相当老旧,而且过时。同时已弃用['setType(int)'](http://developer.android.com/reference/android/view/SurfaceHolder.html#setType%28int%29),并根据文档设置该标志将对新设备没有影响:*“这被忽略,这个值在需要的时候自动设置。”*'setPreviewTexture(SurfaceTexture)'可以工作,但仅在API 11+中可用。也许两者的结合将会诀窍? :) – 2012-08-16 02:16:08

1

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

  1. 通过传递任何整数只要创建一个表面纹理对象,如

    mSurfaceTexture = new SurfaceTexture(1); 
    
  2. 现在,打开你的摄像头,并做到以下几点:

    mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); 
    try{ 
        mCamera.setPreviewTexture(mSurfaceTexture); 
    } 
    catch (IOException t) { 
        //Do Something here 
    } 
    

3)你可以以同样的方式完成其他任何操作,即使用人脸检测。

+0

这对我不起作用,它看起来像你错误的标识符传入'Camera.open'。 (我不认为'CameraInfo'常量是相机ID。) – Sam 2014-11-15 13:43:43