我正在开发一个与安全性相关的项目,需要检查是否检测到任何人脸,如果检测到人脸,请执行一些操作,如果未检测到人脸,则关闭应用程序。

一切工作正常,我使用的是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)任何可用的库都可以说真的可以使用人脸。

如果有人有任何想法请提出建议,如何解决以上问题(任何代码可用,然后与我分享),感谢您的答复!

如何使用适应性学习方法来得出真实或虚假图片/视频帧。

最佳答案

您可以使用视差效果。首先,您从2个不同的位置(相距2厘米)拍摄2张照片。那么您可以比较图像并查看:

*如果它们非常相似(几乎相同),则图像为2d并且是海报

*如果它们非常不同,则为3d面孔

您可以执行此操作的另一种方法是使用相机闪光灯。闪光灯会在照片上产生一点反射,这会阻止人们使用视频绕过您的系统,因为屏幕会引起很多眩光,从而会挡住脸部,从而使相机无法检测到脸部。您需要做的就是添加一个闪光灯(最好以100Hz的频率闪烁,这样人们看不到它,但是它会显示在图片中)

我希望这会有所帮助:)

10-08 06:17