Formats and Configuration
Formats
4Finger ID can output the following formats for capture actions:
VERIDFP - Veridium proprietary fingerprint format VeridiumFP.
NIST - ANSI/NIST ITL 1-2007, National Institute of Standards and Technology's Data Format for the Interchange of Fingerprint, Facial, & Other Biometric Information. Contactless output conforms to NIST SP500-339. Can contain Type 9 minutiae data, as well as either Type 4 or Type 14 image data.
Interpol - International Criminal Police Organization INT-I : Interpol’s implementation for I-24/7 secure global police network. Contactless output conforms to NIST SP500-339.
JSON - All prints are contained within a single JSON file which contains Base64 encoded images. Supports images encoded in WSQ, PNG, or RAW. In addition, it can contain an
Audit Image
, a low resolution, print obscured, version of the captured image, for the purpose of human audit. JSON output also supports writing of multiple scales; 500dpi; 500dpi + 15%, 500dpi - 15%. To enable the multiple scales, applyExportConfig.setPackExtraScale(true).
Each fingertip image is named using the NIST specification:Finger 1: Right thumb
Finger 2: Right index finger
Finger 3: Right middle finger
Finger 4: Right ring finger
Finger 5: Right little finger
Finger 6: Left thumb
Finger 7: Left index finger
Finger 8: Left middle finger
Finger 9: Left ring finger
Finger 10: Left little finger
ISO2005 - ISO/IEC 19794-4 (2005) - An image container format.
ISO2002 - ISO/IEC 19794-6 (2005) - A minutiae container format with Finger Minutiae Records in ISO formatting.
ANSI-387 (2004) - A minutiae container format with Finger Minutiae Records in ANSI-378 format.
EBTS (Version 11) - Electronic Biometric Transmission Specification using Type 4 and Type 9 records.
ZIP - For data collection and debugging only.
To configure the use of a specific format use ExportConfig.setFormat()
, for example:
ExportConfig.setFormat(IBiometricFormats.TemplateFormat.FORMAT_JSON);
Configuring Settings: ExportConfig
The following can be configured by calling set()
methods of the ExportConfig
class. Import import com.veridiumid.sdk.fourfintegrationexport.ExportConfig;
.
Selecting prints to capture
Android
To configure the prints to capture call setFingersToCapture()
with an ExportMode
. The following modes are available:
FOUR_F_LEFT_ENFORCED
- all left hand fingersFOUR_F_RIGHT_ENFORCED
- all right hand fingersFOUR_F_LEFT_SWITCHABLE
- all left hand fingers with a user option to switchFOUR_F_RIGHT_SWITCHABLE
- all right hand fingers with a user option to switchEIGHT_F
- all left hand fingers followed by right hand fingersTEN_F
- all digits, including thumbsTWO_THUMB
- both thumbs
Alternatively, an overload of setFingersToCapture
takes a list of FingerID
s, for example to capture the right index and thumb:
ExportConfig.setFingersToCapture(Arrays.asList(ExportConfig.FingerID.INDEX_RIGHT, ExportConfig.FingerID.THUMB_RIGHT ));
iOS
To configure to capture 4 fingers use the convenience method setHand
:
exportConfig.setHand(chosenHand: VeridiumFourFHandChoice)
where VeridiumFourFHandChoice
can be:
VeridiumFourFHandChoiceForceLeftHandEnroll
VeridiumFourFHandChoiceForceRightHandEnroll
VeridiumFourFHandChoiceEitherHandEnroll (always left hand first)
VeridiumFourFHandChoiceBothHands (always left hand first)
VeridiumFourFHandChoiceAllFingers
To configure capture of arbitrary fingers/thumbs call setFingers()
. Pass a Set of values between 1 and 10, where:
VeridiumFourFFingerChoice.THUMB_RIGHT = 1
VeridiumFourFFingerChoice.INDEX_RIGHT = 2
VeridiumFourFFingerChoice.MIDDLE_RIGHT = 3
VeridiumFourFFingerChoice.RING_RIGHT = 4
VeridiumFourFFingerChoice.LITTLE_RIGHT = 5
VeridiumFourFFingerChoice.THUMB_LEFT = 6
VeridiumFourFFingerChoice.INDEX_LEFT = 7
VeridiumFourFFingerChoice.MIDDLE_LEFT = 8
VeridiumFourFFingerChoice.RING_LEFT = 9
VeridiumFourFFingerChoice.LITTLE_LEFT = 10
For example, to capture left and right thumbs,
let fingers = Set([NSNumber(value: VeridiumFourFFingerChoice.THUMB_RIGHT.rawValue),
NSNumber(value: VeridiumFourFFingerChoice.THUMB_LEFT.rawValue)])
exportConfig.setFingers(fingers)
Legacy Support Export < v5.10.x
4Finger ID in Veridium SDK 5.11.x introduced an improved pipeline for processing of fingerprint images for export. Where required, an Export Config switch is provided to revert to the pipeline used in 5.10.x and earlier. [Note, internal matching is unaffected. SDK 5.11.0 uses 4F v5.5.0 or later].
Android:
ExportConfig.setLegacyExport()
iOS:ExportConfig.legacyExport
True - Use the 5.10.x pipeline
False (Default) - Use the 5.11.x pipeline
Capture Settings
Timeout
Android:
ExportConfig.configureTimeout(enabled, time_seconds, allowed_retries, allow_skipping)
iOS:
configureTimeoutEnabled:(BOOL)new_timeout_enabled andTimoutSeconds:(int)new_timeout_time_seconds andAllowedRetries:(NumberOfRetries)new_allowed_retries andAllowSkipping:(BOOL)new_allow_skipping;
Configure capture timeout behaviour.
enabled TRUE implies a capture can time out, FALSE implies cannot.
can_restart
DEPRECATED
Always TRUE. Timeout is applied per capture.time_seconds number of seconds to be allowed for capture before a timeout is triggered
allowed_retries restrict the user to a fixed number of retries per capture.
allow_skipping BETA FEATUER. When TRUE, if a capture times out it will be skipped and the next capture started. If all captures time out a failure will be returned. Note, templates are output only for successful captures and hence some requested prints might be missing in the ouput. When FALSE any time out event will result in the whole capture process halting and a failure result.
Format - Android:
ExportConfig.setFormat()
iOS:ExportConfig.exportFormat
Set the output format for all capture actions available (See formats for details). This may be any one of:CODE- IBiometricFormats.FORMAT_VERIDFP - IBiometricFormats.FORMAT_NIST - IBiometricFormats.FORMAT_INTERPOL - IBiometricFormats.FORMAT_ZIP (for debug and data collection purposes only) - IBiometricFormats.FORMAT_JSON (Default) - IBiometricFormats.FORMAT_ISO_4_2005 - IBiometricFormats.FORMAT_ISO_5_2005 - IBiometricFormats.FORMAT_ANSI378_2004 - IBiometricFormats.FORMAT_EBTS_11
(Format options only apply to capture events. Enrolment and authentication require the VeridiumID proprietary fingerprint format, VERIDFP.)
NIST Record Type - Android:
ExportConfig.setNistType()
iOS:ExportConfig.nist_type
Set the NIST output record types. Type-4 and Type-14 contain 500dpi greyscale images. Type-9 contains minutiae data.
Android:T14 (Default)
T4
T9
T14_9 (Write image and minutiae data)
T4_9 (Write image and minutiae data)
iOS:
Nist_type_T14 (Default)
Nist_type_T4
Nist_type_T9
Nist_type_T14_9 (Write image and minutiae data)
Nist_type_T4_9 (Write image and minutiae data)
NIST Software Information - Android:
ExportConfig.setSoftwareInfo()
iOS:ExportConfig.softwareInfo
A string to include in the ANSI/NIST Type 2 record 2.907 field for software information. 2.907 will be entered using colon separators as follows: “[software_info]:[device_OS_version]:[veridium_SDK_version]:[4Finger_ID_Version]”String, default empty
NIST Transaction Control ID - Android:
ExportConfig.setTransactionControlID()
iOS:ExportConfig.transactionControlID
An identifier for the biometric transaction entered into ANSI/NIST Type 1 record 1.009 field.String, default is the UTC timestamp (%Y-%m-%dT%H:%M:%S).
EBTS Originating Agency Identifier - Android:
ExportConfig.set_originating_agency_identifier()
iOS:ExportConfig.originating_agency_identifier
An identifier for the source of an EBTS transaction. Must be 9 characters in length.EBTS Destination Agency Identifier - Android:
ExportConfig.set_destination_agency_identifier()
iOS:ExportConfig.destination_agency_identifier
An identifier for the intended destination of an EBTS transaction. Must be 9 characters in length.EBTS Attention indicator - Android:
ExportConfig.set_attention_indicator()
iOS:ExportConfig.attention_indicator
The intended recipient.EBTS Contributor Case Identifier - Android:
ExportConfig.set_contributor_case_identifier()
iOS:ExportConfig.contributor_case_identifier
An identifier for the transaction.EBTS Contributor Case Prefix- Android:
ExportConfig.set_contributor_case_prefix()
iOS:ExportConfig.contributor_case_prefix
Prefix for the (Max 24 chars) case ID.EBTS Contributor Case Identifier extension - Android:
ExportConfig.set_contributor_case_identifier_extension()
iOS:ExportConfig.contributor_case_identifier_extension
Supplement to the case ID to allow association with multiple other cases.Optimise For Index Capture - Android:
ExportConfig.optimiseForIndex()
iOS:ExportConfig.targetIndexFinger
optimise capture for optimal image quality on the index finger at the expense of other fingers.True
False (Default)
Optimise For All Fingers (Two Shot Capture) - Android:
ExportConfig.optimiseForIndexLittle()
iOS: Set bothExportConfig.targetIndexFinger
andExportConfig.targetLittleFinger
. Optimise capture for quality on all fingers by taking two shots in a single capture session.True
False (Default)
Use liveness - Android:
ExportConfig.setUseLiveness()
iOS:ExportConfig.useLiveness
Switch liveness ON/OFF.True
False (Default)
Liveness Factor - Android:
ExportConfig.setLivenessFactor()
iOS:ExportConfig.liveness_factor
Adjust the difficulty factor for liveness tests. A higher factor has a higher false rejection rate, but a lower false acceptance rate. (Currently, 80 or below applies standard liveness; a value of 81 or higher enables addition liveness for impressed print overlays).[0,99] (80 Default)
WSQ Compression Ratio - Android:
ExportConfig.setWSQCompressionRatio()
iOS:ExportConfig.wsq_compression_ratio
compression ratio for WSQ file output (for finer control see WSQ Bitrate below). Can be any of the following:WSQCompressRatio.COMPRESS_15to1
WSQCompressRatio.COMPRESS_10to1
WSQCompressRatio.COMPRESS_5to1
WSQCompressRatio.COMPRESS_2to1 (Default)
Pack WSQ - Android:
ExportConfig.setPack_wsq()
iOS:ExportConfig.pack_wsq
switch output of WSQ on/off (scaled to 500 PPI),True (Default)
False
Pack RAW - Android:
ExportConfig.()
iOS:ExportConfig.pack_raw
switch output of RAW on/off (scaled to 500 PPI) when using JSON. No codec is required for reading raw images. They are not compressed. Image pixels are stored row-by-row, 1 byte per pixel (8-bit grayscale). Use the image width and height, provided in the JSON output, to correctly reconstruct the image.True (Default)
False
Pack PNG - Android:
ExportConfig.setPack_png()
iOS:ExportConfig.pack_png
switch output of PNG on/off (scaled to 500 PPI),True
False (Default)
Pack BMP - Android:
ExportConfig.setPack_bmp()
iOS:ExportConfig.pack_bmp
switch output of BMP on/off (scaled to 500 PPI),True
False (Default)
Pack Extra scales - JSON - Android:
ExportConfig.setPackExtraScale()
iOS:ExportConfig.extra_scaled_image
switch output of additionally scaled images inside the JSON format on/off (scaled to 500 PPI, +15%, -15%).True (Default)
False
Pack ISO Finger Minutiae Records - JSON - Android:
ExportConfig.setPack_FMR_ISO()
iOS:ExportConfig.pack_fmr_iso
Base64 encoded FMR (minutiae) in ISO format for each finger, and additionally for all fingers in a single FMR at the top level of the JSON.Pack ANSI378 Finger Minutiae Records - JSON - Android:
ExportConfig.setPack_FMR_ansi()
iOS:ExportConfig.pack_fmr_ansi
Base64 encoded FMR (minutiae) in ANSI378 format for each finger, and additionally for all fingers in a single FMR at the top level of the JSON.Pack an Audit Image - JSON - Android:
ExportConfig.setPackAuditImage()
iOS:ExportConfig.pack_audit_image
switch output of an audit image inside the JSON format on/off.True (Default)
False
Output NFIQ Scores - Android:
ExportConfig.setCalculate_NFIQ()
iOS:ExportConfig.calculate_nfiq
switch output of NFIQ scores on/off when using JSON formats.True
False (Default)
The NFIQ score is an industry standard that produces values between 1 and 5, where 1 = excellent quality, and 5 = very poor quality. Values of 1, 2, or 3 are generally accepted as viable for matching.
Pack Dev Output - Android:
ExportConfig.setPackDevOutput()
iOS:ExportConfig.packDevOutput
Switch output of additional information for development purposes. This data is made available in slot 3 of the output data array. Output of this data will slow down processing. See Handling An Operational Result.True
False (Default)
Fixed Print Width - Android:
ExportConfig.setFixedPrintSize(width, height)
iOS:ExportConfig.fixed_print_width``ExportConfig.fixed_print_height
If this value is set to values greater than 0, then the size of the print is fixed to this size in pixels. Otherwise, it is set to default values. If the fixed size is smaller than the natural size of the print image the edges are cropped away.0,0 (Default)
Any positive integers
For example, to configure output in JSON format on Android, with 15 to 1 compression, with NFIQ score output:
import com.veridiumid.sdk.fourfintegration.ExportConfig;
ExportConfig.setFormat(IBiometricFormats.FORMAT_JSON);
ExportConfig.setCalculate_NFIQ(true);
ExportConfig.setWSQCompressionRatio(ExportConfig.WSQCompressionRatio.COMPRESS_15_1)
Agent Capture Mode
4FingerID can be configured to alter the UI and orientation to improve capture of prints by a 2rd party, or agent (as opposed to self capture). Ensure you are invoking a UI fragment designed for agent capture. Agent mode expects users hands to be presented from the right side of the device when held in landscape mode. Thumbs are expected to be presented from the bottom of the device held in portrait mode.
To use agent capture, set the ExportConfig as follows:
Android:ExportConfig.setAgentMode(true);
Override fragmentToShow()
in your custom 4F activity:
public class CustomFourFActivity extends com.veridiumid.sdk.fourf.FourFBiometricsActivity {
@Override
protected <FourFFragmentInterfaceUnion extends Fragment & FourFUIInterface> FourFFragmentInterfaceUnion fragmentToShow() {
return (FourFFragmentInterfaceUnion) new FourFAgentUIFragment();
}
}
iOS:ExportConfig.agentMode = true;
. No other configuration is required.
Audit Image
4FingerID outputs a downscaled version of the image originally captured by the device, with the users prints obscured. This allows for later manual inspection if required such as if you suspect a user of attempting to spoof the system. This feature is currently available when outputting the JSON format, set Android:ExportConfig.setPackAuditImage(true)
iOS:ExportConfig.pack_audit_image = true
.