Physical ID Card Capture

The physical ID Capture introduces a way to capture photos of physical ID documents

Steps to implementation

Step 1

In your layout file add the SmartCardView. We advise on giving the view as much real estate as possible so match parent on both height and width is advisable

<com.smileidentity.libsmileid.core.idcapture.SmartCardView
        android:id="@+id/id_capture"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        <!--optional fields for customisation-->
        xmlns:app="http://schemas.android.com/apk/res-auto"
        app:faceDetectedMessage="Custom face detected message"
        app:blurryMessage="Custom message for when capture is blurry"
        app:insufficientLightMessage="Custom message for when there is insufficient light"
        app:fitIdMessage="Custom message informing the user to fit the id on the rectangle and tap for focus"
        app:flashMissingErrorMessage="Custom flash missing error message"
        app:loadingMessage="Custom message for when ID capture is loading"
        app:detectingFaceMessage="Custom message for when ID capture face detection is in progress"
        app:noFaceDetectedMessage="Custom no face detected message"
        app:capturedBlurryMessage="Custom blurriness detected in captured image"
        app:capturedDarkMessage="Custom darkness detected in captured image"
        >
 </com.smileidentity.libsmileid.core.idcapture.SmartCardView>

Step 2

Initialize the view in your view controller as normal and set the listener so that the SDK can pass back information on the capture

SmartCardView smartCardView = findViewById(R.id.id_capture);
smartCardView.setListener(this);

Step 3

Set your desired id type, this is an instance of IDType enum with options

  • Idcard => Aspect ratio 1.4 or normal credit card sized IDs

  • Passport => Aspect ratio 1.6 or normal passbort booklet sized IDs

  • Other => will default to 1.4 aspect ratio

smartCardView.setIdType(<IdType>);

Step 4

Start Capture, typically this should be called in your onResume so that the view maintains state with the implementing Activity/Fragment

@Override
protected void onResume() {
    super.onResume();
    try {
        mSmartCardView.startCapture(mCurrentTag);
    } catch (SIDException e) {
        e.printStackTrace();
    }
}

The start capture method will display the view which should look like below

The method has a couple of possible errors that should be catered for this is important to make sure users get the best user experience and for handling possible failures gracefully.

  • //When camera initialisation fails
    SIDError.COULD_NOT_INITIALIZE_CAMERA
    
    //when no listener is set
    SIDError.MISSING_LISTENER
    
    //When an empty or invalid tag is set
    SIDError.INVALID_TAG_FORMAT
    
    //If your app does not have camera permissions
    SIDError.PERMISSION_ERROR
    
    //If the camera fails to process the captured image
    SIDError.ID_CARD_PICTURE_CALLBACK_FAILED

Step 5

Implement pausing on the capture to handle view lifecycles

@Override
protected void onPause() {
    super.onPause();
    mSmartCardView.pauseCapture();
}

Step 6

Error handling and callbacks from the ID Capture

 @Override
public void onSmartCardViewError(Exception error) {
    //todo:handle this
}

@Override
public void onSmartCardViewComplete(Bitmap idCardBitmap, boolean faceFound) {
    //idCardBitmap the captured id card image
    //faceFound true if a face was found  on the ID 
}

@Override
public void onSmartCardViewClosed() {
  //User pressed X and the ID Card has been closed
}

ID Capture Custom Messaging

To enable customization and internationalization from version 7.1.0 the ID Capture allows messaging customization through out the whole capture process as demonstrated in step 1

Last updated