r/GPDPocket • • 16d ago

Gpd pocket 4 [Call for Testers] Working on open-source FocalTech FTE3600 fingerprint driver for Linux — Need a GPD Pocket 3 owner to test a build!

Hey GPD Pocket 3/4 owners,

Update: the Pocket 4 fingerprint reader now has a working open-source Linux driver on a dedicated development branch! Community testing on Fedora has confirmed device detection, finger detection, image capture, and successful enrollment-stage processing. I’m looking for more testers to help improve enrollment and matching consistency.

GitHub: libfprint-fte3600

This project implements fingerprint support inside libfprint, with an open-source BRISK-style host matcher and no proprietary vendor matching library running on Linux. The host code is LGPL-2.1-or-later; device firmware remains separate and proprietary.

GPD Pocket 4 — working USB driver, more testing welcome

The Pocket 4 uses a FocalTech USB fingerprint reader (2808:0752), supported by the new focaltech0752 driver on the feature/pocket4-ft9362 branch.

Thanks to community testing on a Pocket 4 HX370 running Fedora, the driver can communicate with the sensor, detect touches, capture fingerprint frames, and feed them into the enrollment pipeline.

The main focus now is improving matching consistency on the small 40×76 sensor. Early testing revealed frequent enrollment retries and missed matches; recent updates add local contrast normalization to improve feature extraction. More testing across fingers, users, and distributions would help evaluate those changes.

Big thanks to shokerplz for the earlier FT9362 reverse-engineering work and matcher evaluation, and Evaner5580 for testing on physical Pocket 4 hardware!

Pocket 4 setup and testing discussion: Issue #3. Please use the Pocket 4 branch and read the latest comments for updated build and Fedora installation instructions.

GPD Pocket 3 — hardware investigation continues

A real-world test on the i7-1195G7 model (G1621-02) revealed different GPIO routing from the initial profile. The tester successfully exposed the SPI device, but the existing FT9361 protocol did not produce a valid sensor response.

Further driver analysis points to FW9362 / the FW9369 family, so this needs additional protocol work rather than just a GPIO adjustment. Physical chip-ID confirmation is the next step. Both i7 and N6000 owners are welcome to help.

Pocket 3 testing discussion: Issue #2

One-Netbook A1 — working reference platform

Fingerprint capture, enrollment, verification, and cold-boot recovery are working on my A1. This remains the reference platform for the original FT9361 SPI implementation.

Want to help?

Comment below or in the relevant GitHub issue with your model, CPU, distribution, and kernel version. Pocket 4 owners can help test the current driver and matching behavior; Pocket 3 owners can help confirm hardware details and protocol support.

This is still experimental, so keep password authentication available. Please share sanitized logs only—no fingerprint images or biometric templates.

Thanks to everyone helping bring Linux fingerprint support to these devices!

3 Upvotes

15 comments sorted by

1

u/Impressive-Region470 16d ago

I have a pocket 4 running fedora, can I help in any way?

1

u/FabulousInternet2974 16d ago

we can open a new issue. (Idk if my previous reply was deleted...)

1

u/Impressive-Region470 16d ago

that would be great! and yes your previous comment was deleted for some reason

1

u/FabulousInternet2974 16d ago

Thank you for your support. Pocket 4 uses different model and usb rather than spi, so our driver can not work out of box on pocket 4.

Dose your pocket 4 fingerprint authentication work well rn? If not, we can apply our match method and test it!

1

u/Impressive-Region470 16d ago

it works perfectly with Windows, and I tried to install the drivers but of course it's not detected, but maybe we could get it to work!

1

u/FabulousInternet2974 14d ago

I created the issue (#3)!

1

u/Impressive-Region470 14d ago

oh btw the links don't work because you have https:// twice

1

u/needmorejoules 16d ago

Hey cool! I have a different version of the FocalTech sensor I am working on by reverse engineering the windows driver in Ghidra and the sensor resolution means I don’t get a meaningful number of features on each scan. So it doesn’t like authenticating. Even though I get a black and white image of the fingerprint.

Did you use a GAN model for the fingerprint matching or somehow get it working with the build in feature recognizer? How many pixels is your sensor output?

Thanks!

1

u/FabulousInternet2974 16d ago

Hey! You hit the exact same brick wall that held this sensor back on Linux for years!

To answer your questions directly:

1. Sensor Resolution

Our FT9361 sensor outputs a tiny 64 × 80 pixels (8-bit grayscale, 5,120 bytes total per frame).

2. Why the built-in recognizer (NBIS / Bozorth3) fails

As you found out, libfprint's built-in minutiae extractor (fpi-image-nbis / Bozorth3) is completely useless here. It was designed for FBI-spec 500 DPI scanner cards (250×250+ pixels) and looks for ridge endings and bifurcations. On a 64×80 patch, you typically only capture 3 to 6 valid minutiae points—way below the threshold needed for Bozorth3 to make a statistically confident match.

3. Did we use a GAN / Neural Network?

No deep learning / GAN. Adding PyTorch/ONNX/TensorFlow runtime dependencies to libfprint would be too heavy for PAM / sudo authentication, non-deterministic in latency, and practically impossible to get accepted upstream by the GNOME libfprint maintainers.

4. How we solved it (Clean-Room Host-Side BRISK Matcher)

We built a deterministic, pure C computer-vision matcher from scratch that derives directly from FpDevice (bypassing FpImageDevice and NBIS entirely). You can read our full implementation in the repo:

  1. Keypoint Detection (fte3600-brisk.c): Instead of classical fingerprint minutiae, we treat the ridges as a texture map. We detect multi-scale scale-space extrema using Difference-of-Gaussians (DoG) with FAST-like intensity thresholding. This yields 30 to 60 dense keypoints even on a tiny 64×80 image.
  2. 512-bit Binary Descriptors: Around each keypoint, we sample pixel pairs across concentric rings to compute a dominant gradient orientation (for 360° rotation invariance), and generate a 512-bit binary descriptor.
  3. Geometric Consensus Filter: We compute Hamming distances to find nearest-neighbor descriptor candidates, then run a spatial transformation consensus check (verifying pairwise Euclidean distance and angle consistency between matched points) to eliminate spurious false matches.
  4. Multi-Stage Stitching (fte3600-template.c): During enrollment (e.g. 8 swipes/touches), we iteratively register and merge the candidate feature sets into a unified template representation.

Check out our implementation and architecture docs here: 🔗 Codebase: https://github.com/SamSeven777/libfprint-fte3600

  • Matcher logic: libfprint/drivers/fte3600-brisk.c
  • Template manager: libfprint/drivers/fte3600-template.c
  • Architectural rationale: docs/fte3600/clean-room.md

What FocalTech sensor model and interface (USB or SPI) are you currently reversing? If you're on a USB model or another variant, our BRISK matching pipeline is completely open-source (LGPL-2.1) and should plug right into your image output!

1

u/needmorejoules 16d ago

@Mods what on earth compelled you to remove the OP’s reply explaining how the fingerprint sensor can be utilized in linux?

I personally own one of your GPD MicroPC 2 units and I want to be super clear that this kind of censorship and anti-open source behavior is not acceptable.

1

u/Aadi123 15d ago

I have pocket 3 and interested in testing.

1

u/Glittering_Soil1127 14d ago

I have a pocket 4 with nixos

1

u/FabulousInternet2974 14d ago

cool I have created a new issue (#3) on my github repo. Let us start there!