Manual Capture

Enable selfie capture without asking users to smile.

Why do we need users to Smile to capture a SmartSelfie?

While it might not be a difficult/embarrassing thing for some users - many users simply don’t want to smile when capturing a SmartSelfie. So, if you take that into mind and then you think about a process where you’re forcing a user to smile that really doesn’t want to smile - you end up with a clunky, long and frustrating user experience.

First, let’s explain why we ask users to smile - we do this when determining “proof of liveliness”. If a user doesn’t smile our proof of liveliness algorithms aren't able perform to the best of their ability.

While we don’t require a user to smile, we do need to capture a minimum number of frames before a job can be captured. You will know when the SDK has the minimum number of frames when the OnFaceStateChangeListener changes state to DO_SMILE. At this point the job can be completed using: smartSelfieManager.takePicture()What are your options if users don’t smile?

  1. Allow the user to manually capture the photo

Example of displaying the option for a user to manually capture photo job:

@Override public void onFaceStateChange(FaceState faceState) {
switch (faceState) {
case DO_SMILE:
if (timeElapsed>timeMinimum) {
btnUserCapture.setVisibility(View.VISIBLE);
}
}
}
}

Then you’ll need to call takePicture on the button click:

@Override public void onCaptureButtonClicked(View view){
smartSelfieManager.takePicture(); }

2. Automatically capture the photo after a certain amount of time

A timeout can be used to automatically capture the selfie required. In the snippet below you will see that the timeout is set to 0 ms. This means as soon as we have the minimum number of frames to perform a job we will capture the selfie. An example of a using a timeout:

SelfieCaptureConfig.Builder(Context)
.setCameraType(SelfieCaptureConfig.FRONT_CAMERA)
.setPreview(CameraSourcePreview)
.setManualSelfieCapture(false)
.setFlashScreenOnShutter(true)
.setFrameTimeout(0)
.build();