Compare commits

..
Author SHA1 Message Date
Benjamin BergandBenjamin Berg 2a9ad74ec4 print: Reject enroll images that can't be matched
If the score of a print matching itself is too low to match, then
reject it. It can never match and it is therefore completely useless.

Also change this into a non-fatal error, the user is free to retry the
enroll step in the hope that more minutiae is found (e.g. longer swipe).
2022-05-17 19:16:32 +00:00
9 changed files with 23 additions and 30 deletions
-11
View File
@@ -1,17 +1,6 @@
This file lists notable changes in each release. For the full history of all This file lists notable changes in each release. For the full history of all
changes, see ChangeLog. changes, see ChangeLog.
2022-05-24: v1.94.4 release
Highlights:
* synaptics: New PIDs 0x0168, 0x015f
* elan: New PID 0x0c4b
* elanspi: New PID 0x241f
* synaptics: Minor fix to interrupt transfer resubmission
* Avoid sysfs writes if value is already expected
* Improvements to the testing setup
* Fixes to the internal critical section API
2021-11-02: v1.94.3 release 2021-11-02: v1.94.3 release
Highlights: Highlights:
-6
View File
@@ -190,7 +190,6 @@ usb:v06CBp0123*
usb:v06CBp0126* usb:v06CBp0126*
usb:v06CBp0129* usb:v06CBp0129*
usb:v06CBp0168* usb:v06CBp0168*
usb:v06CBp015F*
ID_AUTOSUSPEND=1 ID_AUTOSUSPEND=1
ID_PERSIST=0 ID_PERSIST=0
@@ -258,7 +257,6 @@ usb:v138Ap0091*
ID_PERSIST=0 ID_PERSIST=0
# Known unsupported devices # Known unsupported devices
usb:v04E8p730B*
usb:v04F3p036B* usb:v04F3p036B*
usb:v04F3p0C00* usb:v04F3p0C00*
usb:v04F3p0C4C* usb:v04F3p0C4C*
@@ -281,7 +279,6 @@ usb:v06CBp00C9*
usb:v06CBp00D8* usb:v06CBp00D8*
usb:v06CBp00DA* usb:v06CBp00DA*
usb:v06CBp00DC* usb:v06CBp00DC*
usb:v06CBp00E4*
usb:v06CBp00E7* usb:v06CBp00E7*
usb:v06CBp00E9* usb:v06CBp00E9*
usb:v06CBp00FD* usb:v06CBp00FD*
@@ -297,7 +294,6 @@ usb:v0A5Cp5845*
usb:v0BDAp5812* usb:v0BDAp5812*
usb:v10A5p0007* usb:v10A5p0007*
usb:v10A5p9200* usb:v10A5p9200*
usb:v10A5p9800*
usb:v1188p9545* usb:v1188p9545*
usb:v138Ap0007* usb:v138Ap0007*
usb:v138Ap003A* usb:v138Ap003A*
@@ -319,7 +315,6 @@ usb:v1C7Ap0576*
usb:v27C6p5042* usb:v27C6p5042*
usb:v27C6p5110* usb:v27C6p5110*
usb:v27C6p5117* usb:v27C6p5117*
usb:v27C6p5125*
usb:v27C6p5201* usb:v27C6p5201*
usb:v27C6p521D* usb:v27C6p521D*
usb:v27C6p5301* usb:v27C6p5301*
@@ -331,7 +326,6 @@ usb:v27C6p5385*
usb:v27C6p538C* usb:v27C6p538C*
usb:v27C6p538D* usb:v27C6p538D*
usb:v27C6p5395* usb:v27C6p5395*
usb:v27C6p5503*
usb:v27C6p5584* usb:v27C6p5584*
usb:v27C6p55A2* usb:v27C6p55A2*
usb:v27C6p55A4* usb:v27C6p55A4*
-1
View File
@@ -43,7 +43,6 @@ static const FpIdEntry id_table[] = {
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0126, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0126, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0129, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0129, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0168, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0168, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x015F, },
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
}; };
-1
View File
@@ -21,7 +21,6 @@
#define FP_COMPONENT "device" #define FP_COMPONENT "device"
#include <math.h> #include <math.h>
#include <fcntl.h> #include <fcntl.h>
#include <errno.h>
#include "fpi-log.h" #include "fpi-log.h"
+1 -1
View File
@@ -277,7 +277,7 @@ fpi_image_device_minutiae_detected (GObject *source_object, GAsyncResult *res, g
{ {
print = fp_print_new (device); print = fp_print_new (device);
fpi_print_set_type (print, FPI_PRINT_NBIS); fpi_print_set_type (print, FPI_PRINT_NBIS);
if (!fpi_print_add_from_image (print, image, &error)) if (!fpi_print_add_from_image (print, image, priv->bz3_threshold, &error))
{ {
g_clear_object (&print); g_clear_object (&print);
+20 -4
View File
@@ -154,11 +154,14 @@ minutiae_to_xyt (struct fp_minutiae *minutiae,
gboolean gboolean
fpi_print_add_from_image (FpPrint *print, fpi_print_add_from_image (FpPrint *print,
FpImage *image, FpImage *image,
gint bz3_threshold,
GError **error) GError **error)
{ {
g_autofree struct xyt_struct *xyt = NULL;
GPtrArray *minutiae; GPtrArray *minutiae;
struct fp_minutiae _minutiae; struct fp_minutiae _minutiae;
struct xyt_struct *xyt; gint probe_len;
gint score;
if (print->type != FPI_PRINT_NBIS || !image) if (print->type != FPI_PRINT_NBIS || !image)
{ {
@@ -173,8 +176,8 @@ fpi_print_add_from_image (FpPrint *print,
if (!minutiae || minutiae->len == 0) if (!minutiae || minutiae->len == 0)
{ {
g_set_error (error, g_set_error (error,
G_IO_ERROR, FP_DEVICE_RETRY,
G_IO_ERROR_INVALID_DATA, FP_DEVICE_RETRY_GENERAL,
"No minutiae found in image or not yet detected!"); "No minutiae found in image or not yet detected!");
return FALSE; return FALSE;
} }
@@ -185,7 +188,20 @@ fpi_print_add_from_image (FpPrint *print,
xyt = g_new0 (struct xyt_struct, 1); xyt = g_new0 (struct xyt_struct, 1);
minutiae_to_xyt (&_minutiae, image->width, image->height, xyt); minutiae_to_xyt (&_minutiae, image->width, image->height, xyt);
g_ptr_array_add (print->prints, xyt);
probe_len = bozorth_probe_init (xyt);
score = bozorth_to_gallery (probe_len, xyt, xyt);
fp_dbg ("self-match score %d/%d", score, bz3_threshold);
if (score <= bz3_threshold)
{
g_set_error (error,
FP_DEVICE_RETRY,
FP_DEVICE_RETRY_GENERAL,
"Not enough minutiae to generate a match!");
return FPI_MATCH_SUCCESS;
}
g_ptr_array_add (print->prints, g_steal_pointer (&xyt));
g_clear_object (&print->image); g_clear_object (&print->image);
print->image = g_object_ref (image); print->image = g_object_ref (image);
+1
View File
@@ -40,6 +40,7 @@ void fpi_print_set_device_stored (FpPrint *print,
gboolean fpi_print_add_from_image (FpPrint *print, gboolean fpi_print_add_from_image (FpPrint *print,
FpImage *image, FpImage *image,
gint bz3_threshold,
GError **error); GError **error);
FpiMatchResult fpi_print_bz3_match (FpPrint * template, FpiMatchResult fpi_print_bz3_match (FpPrint * template,
-5
View File
@@ -29,7 +29,6 @@ static const FpIdEntry whitelist_id_table[] = {
* You can generate this list from the wiki page using e.g.: * You can generate this list from the wiki page using e.g.:
* gio cat https://gitlab.freedesktop.org/libfprint/wiki/-/wikis/Unsupported-Devices.md | sed -n 's!|.*\([0-9a-fA-F]\{4\}\):\([0-9a-fA-F]\{4\}\).*|.*! { .vid = 0x\1, .pid = 0x\2 },!p' * gio cat https://gitlab.freedesktop.org/libfprint/wiki/-/wikis/Unsupported-Devices.md | sed -n 's!|.*\([0-9a-fA-F]\{4\}\):\([0-9a-fA-F]\{4\}\).*|.*! { .vid = 0x\1, .pid = 0x\2 },!p'
*/ */
{ .vid = 0x04e8, .pid = 0x730b },
{ .vid = 0x04f3, .pid = 0x036b }, { .vid = 0x04f3, .pid = 0x036b },
{ .vid = 0x04f3, .pid = 0x0c00 }, { .vid = 0x04f3, .pid = 0x0c00 },
{ .vid = 0x04f3, .pid = 0x0c4c }, { .vid = 0x04f3, .pid = 0x0c4c },
@@ -52,7 +51,6 @@ static const FpIdEntry whitelist_id_table[] = {
{ .vid = 0x06cb, .pid = 0x00d8 }, { .vid = 0x06cb, .pid = 0x00d8 },
{ .vid = 0x06cb, .pid = 0x00da }, { .vid = 0x06cb, .pid = 0x00da },
{ .vid = 0x06cb, .pid = 0x00dc }, { .vid = 0x06cb, .pid = 0x00dc },
{ .vid = 0x06cb, .pid = 0x00e4 },
{ .vid = 0x06cb, .pid = 0x00e7 }, { .vid = 0x06cb, .pid = 0x00e7 },
{ .vid = 0x06cb, .pid = 0x00e9 }, { .vid = 0x06cb, .pid = 0x00e9 },
{ .vid = 0x06cb, .pid = 0x00fd }, { .vid = 0x06cb, .pid = 0x00fd },
@@ -68,7 +66,6 @@ static const FpIdEntry whitelist_id_table[] = {
{ .vid = 0x0bda, .pid = 0x5812 }, { .vid = 0x0bda, .pid = 0x5812 },
{ .vid = 0x10a5, .pid = 0x0007 }, { .vid = 0x10a5, .pid = 0x0007 },
{ .vid = 0x10a5, .pid = 0x9200 }, { .vid = 0x10a5, .pid = 0x9200 },
{ .vid = 0x10a5, .pid = 0x9800 },
{ .vid = 0x1188, .pid = 0x9545 }, { .vid = 0x1188, .pid = 0x9545 },
{ .vid = 0x138a, .pid = 0x0007 }, { .vid = 0x138a, .pid = 0x0007 },
{ .vid = 0x138a, .pid = 0x003a }, { .vid = 0x138a, .pid = 0x003a },
@@ -90,7 +87,6 @@ static const FpIdEntry whitelist_id_table[] = {
{ .vid = 0x27c6, .pid = 0x5042 }, { .vid = 0x27c6, .pid = 0x5042 },
{ .vid = 0x27c6, .pid = 0x5110 }, { .vid = 0x27c6, .pid = 0x5110 },
{ .vid = 0x27c6, .pid = 0x5117 }, { .vid = 0x27c6, .pid = 0x5117 },
{ .vid = 0x27c6, .pid = 0x5125 },
{ .vid = 0x27c6, .pid = 0x5201 }, { .vid = 0x27c6, .pid = 0x5201 },
{ .vid = 0x27c6, .pid = 0x521d }, { .vid = 0x27c6, .pid = 0x521d },
{ .vid = 0x27c6, .pid = 0x5301 }, { .vid = 0x27c6, .pid = 0x5301 },
@@ -102,7 +98,6 @@ static const FpIdEntry whitelist_id_table[] = {
{ .vid = 0x27c6, .pid = 0x538c }, { .vid = 0x27c6, .pid = 0x538c },
{ .vid = 0x27c6, .pid = 0x538d }, { .vid = 0x27c6, .pid = 0x538d },
{ .vid = 0x27c6, .pid = 0x5395 }, { .vid = 0x27c6, .pid = 0x5395 },
{ .vid = 0x27c6, .pid = 0x5503 },
{ .vid = 0x27c6, .pid = 0x5584 }, { .vid = 0x27c6, .pid = 0x5584 },
{ .vid = 0x27c6, .pid = 0x55a2 }, { .vid = 0x27c6, .pid = 0x55a2 },
{ .vid = 0x27c6, .pid = 0x55a4 }, { .vid = 0x27c6, .pid = 0x55a4 },
+1 -1
View File
@@ -1,5 +1,5 @@
project('libfprint', [ 'c', 'cpp' ], project('libfprint', [ 'c', 'cpp' ],
version: '1.94.4', version: '1.94.3',
license: 'LGPLv2.1+', license: 'LGPLv2.1+',
default_options: [ default_options: [
'buildtype=debugoptimized', 'buildtype=debugoptimized',