Observed since 20 Oct, 21:07 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
AFIS library: minutiae extraction (classical + LEADER ONNX), matching, and quality
AFIS toolkit for fingerprint minutiae extraction, matching, and quality assessment.
pip install afis
# or
uv add afis
From source (includes the optional native NBIS library):
make install # uv sync + make native
from afis import NbisExtractor, MindtctExtractor, SafisExtractor, LeaderExtractor, compute_nfiq2
nbis = NbisExtractor()
a = nbis.extract_minutiae("finger_a.png")
b = nbis.extract_minutiae("finger_b.png")
print(nbis.match(a, b))
# Mix extractor / matcher
proc = NbisExtractor(extractor="gabor", matcher="mcc")
t = proc.extract_minutiae("finger_a.png")
leader = LeaderExtractor()
lt = leader.extract_minutiae("finger_a.png")
q = compute_nfiq2(image) # NFIQ2-style 0–100
print(q.score)
| Name | Kind |
|---|---|
nbis_mindtct | Native NBIS MINDTCT / LFS V2 |
mindtct | Pure-Python MINDTCT |
safis | SourceAFIS minutiae path |
gabor | Gabor enhance + crossing-number |
stft | STFT enhance + crossing-number |
leader | LEADER ONNX |
| Name | Kind |
|---|---|
nbis_bozorth3 | Native Bozorth3 |
bozorth3 | Pure-Python Bozorth3 |
safis | SourceAFIS edge crawl |
mcc | Minutia Cylinder-Code |
geometric | Rigid geometric |
compute_nfiq2(image) returns a 0–100 score (ISO/IEC 29794-4 / NFIQ 2 style).
FVC B-set protocol on DB1–4_B (10×8 images/DB): genuine = all same-finger impression pairs; impostor = first impressions across fingers. Metrics are macro-averaged over the four DBs.
uv run python examples/benchmark.py \
--root /path/to/fingerprint_datasets \
--workers 10
Subset / custom combos:
uv run python examples/benchmark.py \
--dbs DB1_B DB3_B --max-fingers 8 --max-imps 4 \
--extractors nbis_mindtct leader \
--matchers nbis_bozorth3 mcc geometric \
--workers 8
| Extractor | Matcher | EER % | FMR100 % | verify ms | extract ms | match ms |
|---|---|---|---|---|---|---|
| leader | geometric | 6.78 | 13.48 | 1175.9 | 1167.0 | 8.91 |
| nbis_mindtct | nbis_bozorth3 | 10.10 | 25.45 | 35.6 | 20.9 | 14.75 |
| leader | nbis_bozorth3 | 11.82 | 17.59 | 1170.3 | 1167.0 | 3.31 |
| leader | mcc | 14.03 | 24.91 | 1169.4 | 1167.0 | 2.41 |
| nbis_mindtct | mcc | 15.52 | 26.79 | 25.7 | 20.9 | 4.83 |
| nbis_mindtct | geometric | 21.34 | 46.70 | 31.9 | 20.9 | 11.08 |
| Preset | Extractor | Matcher | EER % | verify ms |
|---|---|---|---|---|
| fast | nbis_mindtct | mcc | 15.52 | 25.7 |
| balanced | leader | nbis_bozorth3 | 11.82 | 1170.3 |
| deep | leader | geometric | 6.78 | 1175.9 |
verify_ms ≈ mean extract + mean match (1:1 verify proxy).
afis extract finger.png finger.xyt
afis extract finger.png out.xyt --extractor mindtct
afis extract finger.png out.xyt --extractor leader
afis match a.xyt b.xyt --method bozorth3 --height 480
afis match a.xyt b.xyt --method mcc
afis quality finger.png
make install
make test
make build
MIT. Copyright (c) 2026 Ashok Pant.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 1.2.7 | 19 Aug 2026 | 7 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 21:07 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:165e03baa2b4611ea049e38baa3665145bab348b4ff748891dd1c5bc89ebef73