Open-source iris recognition SDK for Android, iOS and JVM

Add iris enrollment, verification and 1:N identification to your app or back end. Run our open-source SDK on the device or your own server, or let the cloud API keep the gallery and catch duplicate enrollments for you.

SDK on GitHub   Talk to us about the API

Two ways to integrate

Biometric SDK

A Kotlin Multiplatform library for Android, iOS and the JVM. Everything runs locally: no images leave the device unless you send them. It is open source under GPL-3.0 and published on Maven Central (net.iriscan:biometric-sdk) and CocoaPods (BiometricSdk). If GPL does not suit your product, ask us about other terms.

Cloud Iris API

A REST service built on the same algorithm. You send eye images; it stores the templates in a separate gallery for your organization, refuses to enroll the same iris twice under different names, and searches the whole gallery in a fraction of a second. Each response includes per-eye image quality so you can ask for a retake on the spot. See the API documentation and pricing.

What the SDK does

Code

val sdk = BiometricSdkFactory.getInstance()!!

val eye = sdk.io().readImage(bytes)
val quality = sdk.iris().quality().assess(eye)          // ask for a retake if it is poor

val template = sdk.iris().encoder().extractAndEncode(eye)

val same  = sdk.iris().matcher().matches(template, enrolled)     // 1:1
val score = sdk.iris().matcher().score(template, enrolled)       // 0.0 to 1.0
val best  = sdk.iris().matcher().identify(template, gallery)     // 1:N, null if nobody matches

Initialization, image formats and the template format are described in the README.

Iris recognition on Android

Add the dependency from Maven Central and call the SDK from Kotlin or Java. A USB iris scanner connects to the phone or tablet over USB OTG; the SDK takes the image from the scanner's driver and does the rest on the device, without a network connection.

dependencies {
    implementation("net.iriscan:biometric-sdk-android:<version>")
}

Iris recognition on iOS

The same code is published as the BiometricSdk pod and is called from Swift. Images from the camera or from a CGImage go through the same pipeline as on Android, so templates created on one platform match templates from the other.

pod 'BiometricSdk'

Accuracy

On the public CASIA-Iris-Interval dataset (393 eyes, 2,639 images, all genuine and impostor pairs) the current version reaches:

Results depend on the camera, lighting and the people you enroll. The SDK includes the benchmark we use, so you can run it on images from your own scanners and pick the threshold that fits your false match budget.

Supported USB iris scanners

The SDK works with near-infrared images from dedicated iris cameras. We supply and support Vista EY2, Vista FA2 and the BIOSID tablet, and can help you choose a device for field enrollment.

Questions

How big is an iris template?

1,032 bytes per eye: an 8-byte header, a 4,096-bit iris code and a 4,096-bit mask of valid bits. A register of a million people with both eyes enrolled fits in about 2 GB of memory.

Can I store templates in a standard format?

Yes. The SDK reads and writes ISO/IEC 19794-6 iris image records, so you can keep the images in a standard container and re-create templates when the algorithm improves.

Does it need a network connection?

No. Enrollment, quality checks and matching run on the device or your server. The cloud de-duplication service is optional.

Where it is used

Customer identification for lenders and microfinance, patient and member identification in health insurance and hospitals, de-duplication of voter and beneficiary registers, and migration away from closed biometric systems.

Start

Developers can start with the SDK today. For the cloud API, a pilot or help with integration, write to us and tell us about your use case and volumes.

Contact us