Hi,
I've attached a little patch that allows the fprint_demo to check the image
quality during the enrolling stage.
Dave.
--- fprint_demo/src/enroll.c 2008-01-23 12:03:13.000000000 -0300
+++ fprint_demo-hack/src/enroll.c 2008-01-23 15:42:25.000000000 -0300
@@ -19,6 +19,7 @@
#include <gtk/gtk.h>
#include <libfprint/fprint.h>
+#include <stdlib.h>
#include "fprint_demo.h"
@@ -81,6 +82,7 @@
edlg_last_fp_img = NULL;
edlg_last_image = NULL;
}
+
switch (r) {
case FP_ENROLL_COMPLETE:
@@ -111,17 +113,46 @@
g_timeout_add(1500, scan_preview_complete, GINT_TO_POINTER(passed));
}
+static char *analyze_img_quality(int quality)
+{
+ switch(quality) {
+ case 1:
+ return "EXCELLENT";
+ case 2:
+ return "GOOD";
+ case 3:
+ return "AVERAGE";
+ case 4:
+ return "BAD";
+ case 5:
+ return "AWFUL";
+ default:
+ return "UNKNOWN";
+ }
+
+}
+
static gboolean scan_preview_complete(gpointer data)
{
int passed = GPOINTER_TO_INT(data);
+ int quality;
+ float confidence;
+ char *quality_str = (char *)malloc(1024*sizeof(char));
if (edlg_last_fp_img) {
if (passed) {
+ quality = fp_img_get_quality_score(edlg_last_fp_img);
+ confidence = fp_img_get_quality_confidence(edlg_last_fp_img);
+
+ sprintf(quality_str, "Image quality is <b>%s</b> (%f%% confidence)",
+ analyze_img_quality(quality), 100*confidence);
+
struct fp_img *img_bin = fp_img_binarize(edlg_last_fp_img);
GdkPixbuf *pixbuf = img_to_pixbuf(img_bin);
gtk_image_set_from_pixbuf(GTK_IMAGE(edlg_last_image), pixbuf);
g_object_unref(G_OBJECT(pixbuf));
fp_img_free(img_bin);
+
} else {
gtk_container_remove(GTK_CONTAINER(edlg_img_hbox), edlg_last_image);
edlg_last_image = NULL;
@@ -132,13 +163,18 @@
if (edlg_enroll_data) {
gtk_label_set_markup(GTK_LABEL(edlg_progress_lbl),
- "<b>Enrollment complete!</b>");
+ "<b>Enrollment complete!</b>");
+
+ gtk_label_set_markup(GTK_LABEL(edlg_progress_lbl),
+ quality_str);
+
gtk_label_set_text(GTK_LABEL(edlg_instr_lbl), "Click OK to save "
"and continue.");
gtk_dialog_set_response_sensitive(GTK_DIALOG(edlg_dialog),
GTK_RESPONSE_ACCEPT, TRUE);
gtk_dialog_set_response_sensitive(GTK_DIALOG(edlg_dialog),
GTK_RESPONSE_REJECT, TRUE);
+
} else if (passed == 2) {
gtk_label_set_markup(GTK_LABEL(edlg_progress_lbl),
"<b>Enrollment failed due to bad scan data.</b>");
@@ -152,6 +188,8 @@
edlg_run_enroll_stage();
}
+ free(quality_str);
+
return FALSE;
}
_______________________________________________
fprint mailing list
[email protected]
http://lists.reactivated.net/mailman/listinfo/fprint