Я разрабатываю один проект, связанный с безопасностью, необходимо проверить, обнаружено ли какое-либо лицо или нет, если лицо обнаружено, а затем выполните некоторые действия, если лицо не обнаружено, а затем закрыть приложение.
Все отлично работает, я использую 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) Доступна любая библиотека, в которой сказано, что человеческое лицо действительно доступно или нет.
Если у кого-нибудь есть идея, предложите, как решить вышеизложенную проблему (любой код доступен, а затем поделитесь со мной), ответ будет оценен!
как можно использовать адаптацию способов обучения для завершения реального vs фальшивого кадра изображения/видео.