Pracuję nad jednym projektem związanym z bezpieczeństwem, należy sprawdzić, czy wykryto jakąkolwiek twarz, jeśli wykryto twarz, to wykonaj jakąś czynność, jeśli twarz nie zostanie wykryta, to zamknij aplikację .Jak wykryć wykrytą twarz jest prawdziwa lub fałszywa
Wszystko działa idealnie, używam SurfaceView
, który jest zaimplementowany SurfaceHolder.Callback
iw tej otwartej kamerze i aparacie ma jedną nazwę metody: startFaceDetection
za pomocą tej metody wykrywają twarz.
odsyłające
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();
}
}
Teraz problem, jeśli żaden człowiek po gdybym pokazany na aparacie następnie wykrywane jako człowieka, ale chcę prawdziwy ludzki nie wykrywania twarzy fałszywe plakat twarz.
Możliwe postępowanie z moim wymaganiem.
1) Przechwytuj 10 obrazów okresowo i sprawdź, czy wszystkie odmiany są takie same, oznacza to, że jest tam nieruchoma twarz (jak plakat zamontowany w ścianie).
2) Napisz odpowiedni algorytm, który mówi, że wykryta twarz jest prawdziwą ludzką lub fałszywą twarzą.
3) Dostępna jest dowolna biblioteka, która mówi, że ludzka twarz jest naprawdę dostępna.
jeśli ktoś ma pomysł, proszę zasugerować, jak rozwiązać powyższy problem (dowolny kod jest dostępny, a następnie podzielić się ze mną), odpowiedź jest doceniana!
w jaki sposób można zastosować adaptację sposobów uczenia się do zawarcia rzeczywistej lub fałszywej ramki obrazu/wideo.
pan spróbować każdy swoich "możliwych sposobów"? Jak chcesz wykryć fałszywe twarze z wideo? – Micka
, w jaki sposób możemy wykorzystać adaptację sposobów uczenia się do zawarcia rzeczywistej lub fałszywej ramki obrazu/wideo. \t Nie chcę wykrywać z wideo, chcę wykryć z kamery, kontynuuję pracę kamery i sprawdzam czy twarz jest wykrywana czy nie –
możesz wykluczyć źrenicę i tęczówkę i zweryfikować ją w klasyfikatorze ciężko udawać oczy w twarz. Nie wyobrażam sobie, że umieszczenie kilku linii kodu rozwiąże ten problem. Aby osiągnąć ten cel, potrzebujesz dużej wiedzy z zakresu analizy obrazu. –