Skip to main content

Touchless Capture Results

TouchlessResults​

data class TouchlessResults(
val rawFingerprintImages: ArrayList<Bitmap>? = null,
val processedFingerprintImages: ArrayList<Bitmap>? = null,
val enhancedFingerprintImages: ArrayList<Bitmap>? = null,
val slapImage: Bitmap? = null,
val slapWsqData: ByteArray? = null,
val fullFrameImage: Bitmap? = null,
val wsqData: ArrayList<ByteArray>? = null,
val metrics: CaptureMetrics? = null
)

data class CaptureMetrics(
val nfiqMetrics: List<NfiqMetrics> = emptyList(),
val livenessConfidence: Double = 0.0,
val qualityMetric: Double = 0.0
)

data class NfiqMetrics(
val nfiqScore: Int = 0,
val mlpScore: Float = 0f
)

Accessing captured images​

The SDK returns images at three fidelity levels depending on device capability. Always use the fallback chain:

onResults = { result: TouchlessResults ->
val fingerImages = (
result.enhancedFingerprintImages
?: result.processedFingerprintImages
?: result.rawFingerprintImages
)?.toList().orEmpty()

val wsqBytes = result.wsqData?.firstOrNull()

// Quality metrics
val nfiqMetric = result.metrics?.nfiqMetrics?.firstOrNull()
val nfiq = nfiqMetric?.nfiqScore
val mlp = nfiqMetric?.mlpScore
val quality = result.metrics?.qualityMetric
val liveness = result.metrics?.livenessConfidence

// Convert WSQ to Base64 for upload
val wsqBase64 = wsqBytes?.let { Base64.encodeToString(it, Base64.NO_WRAP) }
}

Results fields​

FieldDescription
enhancedFingerprintImagesHighest-quality processed bitmaps — prefer these
processedFingerprintImagesMid-level processed bitmaps
rawFingerprintImagesRaw camera-frame bitmaps
wsqDataList of WSQ binary templates (one per finger segment)
metrics.nfiqMetrics[n].nfiqScoreNIST NFIQ 2.x quality score (0–100, higher = better)
metrics.nfiqMetrics[n].mlpScoreMLP quality score
metrics.qualityMetricOverall capture quality (0.0–100.0)
metrics.livenessConfidenceLive-finger confidence (0.0–1.0)

NFIQ quality bands​

NFIQ scoreQuality
0–29Poor — retake recommended
30–59Fair
60–74Good
75–100Excellent
info

NFIQ metrics are only populated when computeNfiqMetrics(true) is set in the configuration builder.

Full results screen example​

@Composable
fun FingerprintResultScreen(result: TouchlessResults, onDone: () -> Unit) {
val images = (result.enhancedFingerprintImages
?: result.processedFingerprintImages
?: result.rawFingerprintImages)?.toList().orEmpty()
val nfiq = result.metrics?.nfiqMetrics?.firstOrNull()?.nfiqScore
val quality = result.metrics?.qualityMetric
val ws = result.wsqData?.size ?: 0

Column(modifier = Modifier.padding(16.dp)) {
Text("Capture complete", style = MaterialTheme.typography.headlineSmall)
Spacer(Modifier.height(12.dp))
Text("Fingers captured: ${images.size}")
Text("WSQ templates: $ws")
nfiq?.let { Text("NFIQ score: $it") }
quality?.let { Text("Quality: ${String.format("%.0f", it)}") }
Spacer(Modifier.height(16.dp))
Button(onClick = onDone) { Text("Done") }
}
}