Hardware and diagnostics
Compatibility
vinoAuthFace only speaks V4L2 via uvcvideo. There’s no libcamera integration, so a camera behind a
different kernel stack (Intel IPU6, MIPI CSI) is unreachable whatever format it reports. Within
uvcvideo it needs an IR capture node (GREY, YUYV or Y16) for the spoof resistance in
security.md to hold. The pixel format is read from the driver, not assumed.
Y16 from a 10- or 12-bit sensor may sit in the low bits of each sample; capture scales it up
from the highest bit seen during the scan, so either alignment works.
| Camera stack | vinoauthface-camera-diag list output |
Support |
|---|---|---|
UVC IR (uvcvideo + GREY/YUYV/Y16 IR node) |
DRIVER=uvcvideo, a node reports GREY/YUYV/Y16 |
✅ Supported |
UVC RGB-only (uvcvideo, no IR node) |
DRIVER=uvcvideo, only a colour-format node exists |
⚠️ Never auto-detected, and MJPEG is refused. A YUYV node set explicitly as device will capture, but with no IR there’s no spoof resistance |
| Intel IPU6 / MIPI / libcamera | camera doesn’t appear as a plain uvcvideo node |
❌ Not supported |
x86_64 only: V4L2 ioctl numbers and struct layouts are hardcoded.
Reports
| Laptop | IR camera | Driver | Tier | Notes |
|---|---|---|---|---|
| Unconfirmed model, FHD webcam with IR | 2b7e:55c0, IR on /dev/video2, 360x360 GREY |
uvcvideo |
✅ Supported | Reference hardware for this fork |
If vinoAuthFace works (or doesn’t) on yours, please
open an issue with your
sudo vinoauthface doctor --report output (it leaves out usernames, paths and hostnames), or
vinoauthface-camera-diag list if it isn’t installed. Table format borrowed from
Visage’s hardware docs.
vinoauthface-camera-diag
A small offline tool, not installed by deploy.sh. Grab it from
Releases:
curl -fLO https://github.com/karanshukla/vinoAuthFace/releases/latest/download/vinoauthface-camera-diag-x86_64-unknown-linux-musl
chmod +x vinoauthface-camera-diag-x86_64-unknown-linux-musl
or build it with cargo build --release -p face-camera-diag.
list shows every V4L2 node with driver, card name, USB VID:PID, current format, and which one
auto-detect would pick:
$ vinoauthface-camera-diag list
DEVICE DRIVER CARD VID:PID FORMAT NOTES
/dev/video0 uvcvideo Integrated_Webcam_FHD: Integrat 2b7e:55c0 1920x1080 MJPG
/dev/video1 uvcvideo Integrated_Webcam_FHD: Integrat 2b7e:55c0 -
/dev/video2 uvcvideo Integrated_Webcam_FHD: Integrat 2b7e:55c0 360x360 GREY <- auto-detect picks this
/dev/video3 uvcvideo Integrated_Webcam_FHD: Integrat 2b7e:55c0 -
GREY, YUYV or Y16 is a format vinoAuthFace can capture. - usually means a paired metadata
node. The card name here says nothing about IR (sysfs truncates it at 32 bytes); auto-detect
still finds the sensor because it’s a physical node streaming native greyscale, which RGB webcams
never do.
dump captures one frame as a 16-bit PGM, to confirm you’re seeing a lit IR image and not noise
or a black frame:
vinoauthface-camera-diag dump --device /dev/video2 --out frame.pgm
Other tools
From a source checkout:
| Command | Shows |
|---|---|
cargo run --example detect-camera |
Why each node is or isn’t treated as IR |
cargo run --example frame-stats |
Per-frame brightness, for spotting a strobing illuminator |
cargo run --release --example bench |
Per-stage timings |
vinoauthface-similarity-check scores photos against your enrolled templates through the same pipeline,
for gauging false-accept risk without a second person at the camera. Templates are root-owned, so
it needs sudo:
sudo vinoauthface-similarity-check --user $USER photo1.jpg photo2.png
Batch mode measures the pipeline instead of eyeballing single scores. Point it at a directory of photos of you and a directory of other people; it reports TAR, FAR and the equal error rate at the configured threshold. Photos with no detectable face are skipped and counted on stderr.
sudo vinoauthface-similarity-check --user $USER --genuine-dir me/ --impostor-dir others/ \
--sweep 0.30:0.70:0.02 --csv scores.csv
--sweep prints threshold,far,frr rows (CSV) so runs can be diffed; --csv writes every
per-image score. Either directory may be given alone, in which case only its own rate is reported.