Python bindings for NBIS fingerprint processing using Rust + UniFFI
Project description
NBIS-rs
This is a Rust binding to the NIST Biometric Image Software (NBIS) library, which is used for processing biometric images, particularly in the context of fingerprint recognition.
Features
- Bindings to NBIS functions for minutia extraction, and matching
- Exports minutiae templates in ISO/IEC 19794-2:2005 format
- Matches minutiae templates against each other using the NBIS Bozorth3 algorithm
Installation
To use NBIS-rs, add the following to your Cargo.toml:
[dependencies]
nbis = "0.1"
Usage
Here's a simple example of how to use NBIS-rs in your project:
fn main() -> Result<(), Box<dyn std::error::Error>> {
use nbis;
use nbis::Minutiae;
// Read the bytes from a file (you could also use nbis::extract_minutiae_from_image_file)
// but here we just load the image bytes as image paths on mobile platforms can be tricky.
let image_bytes = std::fs::read("test_data/p1/p1_1.png")?;
let minutiae_1 = nbis::extract_minutiae(&image_bytes, None)?;
let image_bytes = std::fs::read("test_data/p1/p1_2.png")?;
let minutiae_2 = nbis::extract_minutiae(&image_bytes, None)?;
let image_bytes = std::fs::read("test_data/p1/p1_3.png")?;
let minutiae_3 = nbis::extract_minutiae(&image_bytes, None)?;
// Compare the two sets of minutiae
let score = minutiae_1.compare(&minutiae_2);
assert!(score > 50, "Expected a high similarity score between p1_1 and p1_2");
let score = minutiae_1.compare(&minutiae_3);
assert!(score > 50, "Expected a high similarity score between p1_1 and p1_3");
let score = minutiae_2.compare(&minutiae_3);
assert!(score > 50, "Expected a high similarity score between p1_2 and p1_3");
// Next we will demonstrate conversion to ISO/IEC 19794-2:2005 format
// and back to a `Minutiae` object.
// First, convert the minutiae to ISO template bytes
let iso_template: Vec<u8> = minutiae_1.to_iso_19794_2_2005();
// And load it back
let minutiae_from_iso = nbis::load_iso_19794_2_2005(&iso_template)?;
// Compare the original minutiae with the one loaded from ISO template
for (a, b) in minutiae_from_iso.get().iter().zip(minutiae_1.get().iter()) {
assert_eq!(a.x(), b.x());
assert_eq!(a.y(), b.y());
assert_eq!(a.angle(), b.angle());
assert_eq!(a.kind(), b.kind());
// Reliability is quantized in the round-trip conversion,
// so we allow a small margin of error.
assert!((a.reliability() - b.reliability()).abs() < 1e-1);
}
// Finally we demonstrate loading from a file and comparing a negative match
let minutiae_4 = nbis::extract_minutiae_from_image_file("test_data/p2/p2_1.png", None)?;
let score = minutiae_1.compare(&minutiae_4);
assert!(score < 50, "Expected a low similarity score between p1_1 and p2_1");
Ok(())
}
Contributing
Contributions are welcome! Please open an issue or submit a pull request on GitHub.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nbis_py-0.1.0-py3-none-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: nbis_py-0.1.0-py3-none-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 1.2 MB
- Tags: Python 3, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ea0ca2ced8c187ce33af4cebc7d02a2f0354eadd4c9828900e879797fa02080
|
|
| MD5 |
58be9e48feca67f3eebc47fb941ec60f
|
|
| BLAKE2b-256 |
622fd0b4a82a659205d82f061890609b750038ad1bc8f4ee3c02d200278913ef
|
File details
Details for the file nbis_py-0.1.0-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: nbis_py-0.1.0-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.0 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ebd22d7bd7fa7fd68278d3bfe46c63b28ce86ddab18acad6d9feb1191697876c
|
|
| MD5 |
79ea665da274d1bed1656a8a2808399e
|
|
| BLAKE2b-256 |
1332d49b34927f2adb8fd233c982cdda5f73223d54c72be42905b99b175fa95d
|