Как узнать, что обнаруженное лицо является реальным или поддельным

Я разрабатываю один проект, связанный с безопасностью, необходимо проверить, обнаружено ли какое-либо лицо или нет, если лицо обнаружено, а затем выполните некоторые действия, если лицо не обнаружено, а затем закрыть приложение.

Все отлично работает, я использую 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) Доступна любая библиотека, в которой говорится, что человеческое лицо действительно доступно или нет.

Если у кого есть идея, пожалуйста, предложите, как решить вышеуказанную проблему (любой код доступен, а затем поделитесь со мной), ответ оценивается!

Как можно использовать адаптацию способов обучения для завершения реального фальшивого кадра изображения / видео.

Solutions Collecting From Web of "Как узнать, что обнаруженное лицо является реальным или поддельным"

Вы можете использовать эффект параллакса. Сначала вы делаете 2 снимка из двух разных мест, которые похожи на 2 см друг от друга. То вы можете сравнить изображения и посмотреть:

* Если они очень похожи (почти такие же), то изображение равно 2d, и это плакат

* Если они очень разные, то это 3D-лицо

Другой способ сделать это – использовать вспышку камеры . Вспышка могла бы немного отразиться на фотографиях, и это помешало бы людям использовать видео для обхода вашей системы, поскольку экран заставил бы много бликов блокировать лицо, чтобы камера не обнаруживала лицо. Все, что вам нужно сделать, это добавить вспышку (желательно мигать примерно на 100 Гц, чтобы люди не могли ее видеть, но она отображалась на картинке)

Надеюсь, это помогло 🙂