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

Reply via email to