LibFPrint was originally developed as part of an academic project at the University Of Manchester.
It aimed to hide the differences between consumer fingerprint scanners and provide a single uniform API to application developers.
The ultimate goal of the FPrint project is to make fingerprint scanners widely and easily usable under common Linux environments.
Section 6 of the license states that for compiled works that use
this library, such works must include LibFPrint copyright notices
alongside the copyright notices for the other parts of the work.
LibFPrint includes code from NIST's NBIS software distribution.
We include Bozorth3 from the US Export Controlled distribution, which we have determined to be fine being shipped in an open source project.
This fork adds support for the Goodix 53x5 (27c6:53x5) fingerprint sensor
using SIGFM, a custom OpenCV/SIFT-based fingerprint matcher that replaces
the traditional NBIS/Bozorth3 minutiae pipeline for this device.
See the Technical Architecture section below and CHANGELOG.md for full details.
The upstream LibFPrint matching path relies on NBIS Bozorth3, a minutiae-based algorithm originally developed by NIST. While robust for optical sensors with high-contrast ridge maps, Bozorth3 struggles with the lower-resolution, noisier images produced by capacitive sensors such as the Goodix 53x5.
SIGFM (SIFT-based Fingerprint Matcher) replaces the minutiae extraction + Bozorth3 scoring path with a feature-descriptor approach built on OpenCV's SIFT (Scale-Invariant Feature Transform):
Capture → CLAHE Enhancement → SIFT Detect & Compute → BFMatcher (kNN) → Geometric Verification → Score
| Change | Detail |
|---|---|
| Project languages | Added cpp to the Meson project() declaration. |
| OpenCV dependency | opencv4 is pulled via dependency('opencv4') in libfprint/meson.build. |
| Static library | libsigfm is compiled from sigfm/sigfm.cpp with -std=c++17 and linked into the main shared library. |
The following thresholds were tuned specifically for the Goodix 53x5 capacitive sensor characteristics (elastic skin distortion, partial prints, and hardware noise):
| Parameter | Upstream Default | Tuned Value | Rationale |
|---|---|---|---|
distance_match (Lowe's Ratio) |
0.85 | 0.90 | Retains more SIFT candidate matches before geometric verification. |
length_match |
0.05 (5 %) | 0.10 (10 %) | Accommodates length variance caused by pressure differences and elastic skin deformation. |
angle_match |
0.05 (5 %) | 0.10 (10 %) | Tolerates rotational variance from inconsistent finger placement. |
CLAHE clipLimit |
2.0 | 3.0 | Suppresses high-frequency noise inherent to Goodix capacitive sensor hardware while preserving ridge detail. |
On modern distributions (Ubuntu 24.04+ / Questing and similar), GNUTLS
handshake failures can prevent fprintd from completing D-Bus
authentication. A Systemd service override is required:
# /etc/systemd/system/fprintd.service.d/override.conf
[Service]
Environment="G_TLS_GNUTLS_PRIORITY=NORMAL:%COMPAT"After creating the file, reload and restart:
sudo systemctl daemon-reload
sudo systemctl restart fprintd.service- IRC -
#fprint@irc.oftc.net - Matrix -
#fprint:matrix.orgbridged to the IRC channel - MailingList - low traffic, not much used these days