Setup Accura Face Liveness

Contact AccuraScan at contact@accurascan.com for Liveness SDK or API

Add following code in Manifest.

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

<application
    ...
    android:networkSecurityConfig="@xml/network_security_config"
    >

 </application>
 
Note : 'android:networkSecurityConfig="@xml/network_security_config"' setup will permit clear text traffic   

Add following code to your Application class or MainActivity for hostname verification

new HostnameVerifier() {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier();
        return hv.verify("your url host name", session);
    }
};

Open camera for liveness Detectcion.

Must have to Grant camera permission

private final static int ACCURA_LIVENESS_CAMERA = 100;

// To customize your screen theme and feed back messages
LivenessCustomization livenessCustomization = new LivenessCustomization();

livenessCustomization.backGroundColor = getResources().getColor(R.color.livenessBackground);
livenessCustomization.closeIconColor = getResources().getColor(R.color.livenessCloseIcon);
livenessCustomization.feedbackBackGroundColor = Color.TRANSPARENT;
livenessCustomization.feedbackTextColor = Color.BLACK;
livenessCustomization.feedbackTextSize = 18;
livenessCustomization.feedBackframeMessage = "Frame Your Face";
livenessCustomization.feedBackAwayMessage = "Move Phone Away";
livenessCustomization.feedBackOpenEyesMessage = "Keep Your Eyes Open";
livenessCustomization.feedBackCloserMessage = "Move Phone Closer";
livenessCustomization.feedBackCenterMessage = "Move Phone Center";
livenessCustomization.feedBackMultipleFaceMessage = "Multiple Face Detected";
livenessCustomization.feedBackHeadStraightMessage = "Keep Your Head Straight";
livenessCustomization.feedBackBlurFaceMessage = "Blur Detected Over Face";
livenessCustomization.feedBackGlareFaceMessage = "Glare Detected";
livenessCustomization.feedBackLowLightMessage = "Low light detected";
livenessCustomization.feedbackDialogMessage = "Loading...";
livenessCustomization.feedBackProcessingMessage = "Processing...";
livenessCustomization.showlogo = 0; // Set 0 to hide logo from selfie camera screen
livenessCustomization.logoIcon = R.drawable.your_logo; // To set your custom logo
    
// LivenessCustomization.CAMERA_FACING_FRONT to set selfie camera       
// LivenessCustomization.CAMERA_FACING_BACK to set rear camera
livenessCustomization.facing = LivenessCustomization.CAMERA_FACING_FRONT;
    
// 0 for full dark face and 100 for full bright face or set it -1 to remove low light filter
livenessCustomization.setLowLightTolerence(-1/*lowLightTolerence*/);

// 0 for clean face and 100 for Blurry face or set it -1 to remove blur filter
livenessCustomization.setBlurPercentage(80/*blurPercentage*/); // To allow blur on face
                                                
// Set min and max percentage for glare or set it -1 to remove glare filter
livenessCustomization.setGlarePercentage(6/*glareMinPercentage*/, 99/*glareMaxPercentage*/);

// must have to call SelfieCameraActivity.getCustomIntent() to create intent
Intent intent = SelfieCameraActivity.getCustomIntent(this, livenessCustomization);
startActivityForResult(intent, ACCURA_LIVENESS_CAMERA);


// Handle accura liveness result.
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if (requestCode == ACCURA_LIVENESS_CAMERA && data != null) {
            AccuraVerificationResult result = data.getParcelableExtra("Accura.liveness");
            if (result == null) {
                return;
            }
            if (result.getStatus().equals("1")) {
                // result get bitmap of face by using following code
                Bitmap bitmap = result.getFaceBiometrics();
                 // do some code to call liveness api to get liveness score of result.getFaceUri() Image.
            } else {
                Toast.makeText(this, result.getStatus() + " " + result.getErrorMessage(), Toast.LENGTH_SHORT).show();
            }
        }
    }
}

ProGuard

Depending on your ProGuard (DexGuard) config and usage, you may need to include the following lines in your proguards.

-keep public class com.docrecog.scan.ImageOpencv {;}
-keep class com.accurascan.ocr.mrz.model.* {;}
-keep class com.accurascan.ocr.mrz.interfaces.* {;}
-keep public class com.inet.facelock.callback.FaceCallback {*;}
-keep public class com.inet.facelock.callback.FaceDetectionResult {*;}

Last updated