2016-08-17 123 views
12

我正在开发一个安全相关的项目,需要检查是否检测到任何脸部,如果检测到脸部,则执行一些操作,如果脸部未检测到,则关闭应用程序。如何找出检测到的脸部是真实还是假的

一切都是完美的工作,我使用SurfaceView这是实现SurfaceHolder.Callback并打开相机和相机有一个方法名是startFaceDetection使用这种方法我脸检测。

参考

public class SurfaceViewPreview extends SurfaceView implements SurfaceHolder.Callback { 

    private SurfaceHolder mHolder; 
    private Camera mCamera; 

    public SurfaceViewPreview(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setWillNotDraw(false); 
     mHolder = getHolder(); 
     mHolder.addCallback(this); 
     mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 

    public void surfaceCreated(SurfaceHolder holder) { 
     try { 
      if (Camera.getNumberOfCameras() <= 0 || ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) 
        != PackageManager.PERMISSION_GRANTED) 
       return; 

      mCamera = Camera.open(0); 
      mCamera.setPreviewDisplay(mHolder); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      if (this.mCamera != null) { 
       this.mCamera.release(); 
       this.mCamera = null; 
      } 
     } 
    } 

    public void surfaceDestroyed(SurfaceHolder holder) { 
     if (Camera.getNumberOfCameras() <= 0 || ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) 
       != PackageManager.PERMISSION_GRANTED) 
      return; 
     mCamera.stopPreview(); 
     mCamera.release(); 
     mCamera = null; 
    } 

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
     if (Camera.getNumberOfCameras() <= 0 || ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) 
       != PackageManager.PERMISSION_GRANTED) 
      return; 

     mCamera.startPreview(); 
     mCamera.setFaceDetectionListener(new Camera.FaceDetectionListener() { 
      @Override 
      public void onFaceDetection(Camera.Face[] faces, Camera camera) { 
       // face is detected. 
      } 
     }); 

     mCamera.startFaceDetection(); 
    } 
} 

代码现在,问题的话,如果显示相机我任何人后则检测为人类,但我想真正的人脸检测不出来的海报脸。

可能的方式来处理我的要求。

1)定期捕捉10张图片,并检查所有变化是否相同,这意味着有静态面孔(例如安装在墙上的海报)。

2)写出任何适当的算法,告诉检测到的脸是真实的人脸还是假脸。

3)任何图书馆都是可用的,据说人脸真的有或没有。

如果有人有想法请提出,如何解决以上问题(任何代码可用,然后与我分享),反应表示赞赏!

如何使用自适应学习的方式来得出真实与虚假的图片/视频帧。

+0

你尝试任何你的“可能的方式”?你想如何检测视频中的假脸? – Micka

+0

我们如何使用适应性的学习方式来推断真实与虚假的图片/视频帧。 \t 我不想从视频中检测到,我想从相机检测,继续相机将运行并检查脸部是否被检测到 –

+1

您可以使用瞳孔和虹膜检测并在分类器中验证它很难伪造眼睛在脸上。我不认为用几行代码就可以解决这个问题。你需要大量的图像分析知识才能达到这个目标 –

回答

1

您可以使用视差效果。首先你从2个不同的地方拍摄2张图片,相距2厘米。那么你可以比较的图像,并请参阅:

*如果他们都非常相似(几乎相同),那么图像是2D,它是一个海报

*如果他们是非常不同的,那么它是一个三维人脸

另一种方法,你可以做到这一点是通过使用相机闪光灯。闪光灯会对照片产生一点反思,这会阻止人们使用视频绕过系统,因为屏幕会导致大量眩光,会阻挡脸部,从而防止相机检测脸部。所有你需要做的就是添加一个闪光(最好是像100Hz的闪烁使人们看不到它,但它会在一个画面显示)

我希望这有助于:)

+0

如果你可以添加一些引用的闪光的想法,我认为这将是更好的OP。 (和我自己:P) – Raskayu

+0

但我的相机是静态的,所以如何从两个位置捕获 –

+0

@Hulk它可以旋转的最小量? – Paul

相关问题