【发布时间】:2016-12-24 03:32: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) 任何说人脸是否真的可用的库都是可用的。
如果有人有想法请提出建议,如何解决上述问题(任何代码都可用然后与我分享),感谢回复!
如何使用自适应学习方法来判断真假图片/视频帧。
【问题讨论】:
-
你有没有尝试过任何“可能的方式”?您想如何从视频中检测假脸?
-
我们如何使用自适应学习方法来得出真假图片/视频帧。我不想从视频中检测,我想从相机中检测,继续相机将运行并检查是否检测到人脸
-
您可以进行瞳孔和虹膜检测并在分类器中对其进行验证,很难在脸上伪造眼睛。我不认为只写几行代码就能解决这个问题。你需要大量的图像分析知识才能达到这个目标
-
你可以看看Eulerian Video Magnification。引用:“许多看似静态的场景包含肉眼看不见的细微变化。但是,可以通过使用我们开发的算法从视频中提取这些细微变化。我们提供了一种可视化这些细微变化的方法通过放大它们,我们提出算法以从这些视频中提取有趣的信号,例如人体脉搏、振动物体的声音和热空气的运动。”
-
@Micka 两个摄像头就够了。在两个摄像头前从两个预定义的角度同步同一个人的两个视频真的很难
标签: java android opencv face-detection face-recognition