gpt4 book ai didi

java - 如何判断检测到的人脸是真人还是假人

转载 作者:搜寻专家 更新时间:2023-10-30 21:12:52 25 4
gpt4 key购买 nike

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

一切都很完美,我正在使用 SurfaceView 实现了 SurfaceHolder.Callback 并且在那个打开的相机和相机中有一个方法名称是 startFaceDetection 使用这种方法我检测到人脸。

code for reference

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 张​​图片。然后您可以比较图像并查看:

*如果它们非常相似(几乎相同)则图像是二维的并且是海报

*如果它们非常不同,那么它就是 3d 面孔

另一种方法是使用相机闪光灯。闪光灯会在照片上造成一点反射,这会阻止人们使用视频绕过您的系统,因为屏幕会导致大量眩光会阻挡面部,从而阻止相机检测到面部。您需要做的就是添加一个闪光灯(最好以 100Hz 的频率闪烁,这样人们看不到它,但它会显示在图片中)

我希望这对您有所帮助:)

关于java - 如何判断检测到的人脸是真人还是假人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38997240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com