IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

enroll echoue, libfprint


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Par défaut enroll echoue, libfprint
    Bonjour,
    j'ai un probleme avec la libfprint. je vais poser le code mais juste avant j'explique ce qui ce passe:
    c'est dans la fonction enroll que les choses vont mal car on a visiblement jamais le cas FP_ENROLL_COMPLETED.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <libfprint/fprint.h>
     
    /********************************************************
     *      DEFINES and CONST
     *******************************************************/
     
    /********************************************************
     * global var   
     *******************************************************/
     
    /********************************************************
     * function prototype   
     *******************************************************/
    struct fp_dscv_dev *discover_device(struct fp_dscv_dev **disc_devs);
    struct fp_print_data *enroll(struct fp_dev *dev);
    /********************************************************
     * function implementation      
     *******************************************************/
     
    /************ main *************************************/
    int main(int argc, char **argv)
    {
    	struct fp_dscv_dev *ddev=NULL;
    	struct fp_dscv_dev **devlist=NULL;
    	struct fp_dev *dev=NULL;
    	struct fp_print_data *data=NULL;
    	int r=1;
     
    	if(fp_init()!=0)
    	{
    		fprintf(stderr,"Libfprint Init error\n");
    		return EXIT_FAILURE;
    	}
     
    	devlist = fp_discover_devs();
     
    	if(devlist==NULL)
    	{
    		fprintf(stdout,"No scan finger devices found\n");
    		fp_exit();
    		return EXIT_FAILURE;
    	}
     
    	ddev=discover_device(devlist);
    	if(ddev==NULL)
    	{
    		fprintf(stderr,"No Devices detected.\n");
    		fp_dscv_devs_free(devlist);
    		fp_exit();
    		return EXIT_FAILURE;
    	}
     
    	dev=fp_dev_open(ddev);
    	fp_dscv_devs_free(devlist);
     
    	if(dev==NULL)
    	{
    		fprintf(stderr,"Could not open device\n");
    		fp_exit();
    		return EXIT_FAILURE;
    	}
     
    	fprintf(stdout,"Let enroll your RIGHT INDEX.\n\n");
    	data=enroll(dev);
     
    	if(data==NULL)
    		goto out;
     
    	r=fp_print_data_save(data,RIGHT_INDEX);
    	if(r<0)
    		fprintf(stderr,"Data save failed, code %d\n",r);
     
    	fp_print_data_free(data);
     
    out:
    	fp_dev_close(dev);
    	fp_exit();
     
    	return EXIT_SUCCESS;
    }
     
    /************ discover device *************************************/
    struct fp_dscv_dev *discover_device(struct fp_dscv_dev **disc_devs)
    {
    	struct fp_dscv_dev *ddev=disc_devs[0];
    	struct fp_driver *drv;
    	if(!ddev)
    		return NULL;
     
    	drv=fp_dscv_dev_get_driver(ddev);
    	fprintf(stdout,"Found Device claimed by %s driver\n",fp_driver_get_full_name(drv));
    	return ddev;
    }
     
    /************ enroll *************************************/
    struct fp_print_data *enroll(struct fp_dev *dev)
    {
    	struct fp_print_data *enrolled_print=NULL;
    	int r,num=1;
    	int stg=fp_dev_get_nr_enroll_stages(dev);
     
    	fprintf(stdout,"You will need to successfully scann your finder %d time%c to"
    			"complete the process.\n",stg,(stg>1)?'s':' ');
    	do
    	{
    		struct fp_img *img=NULL;
    		sleep(1);
    		fprintf(stdout,"Scan your finger %d/%d\n",num,stg);
     
    		r=fp_enroll_finger_img(dev,&enrolled_print,&img);
    		fprintf(stdout,"r=%d\n",r);
    		if(img)
    		{
    			fp_img_save_to_file(img,"enrolled.pgm");
    			fprintf(stdout,"Wrote scanned image to enrolled.pgm\n");
    			fp_img_free(img);
    		}
    		if(r<0)
    		{
    			fprintf(stderr,"Enroll Failed with error %d\n",r);
    			return NULL;
    		}
    		++num;
    		switch(r)
    		{
    			case FP_ENROLL_COMPLETE:
    				fprintf(stdout,"Enroll complete!\n");
    				break;
    			case FP_ENROLL_FAIL:
    				fprintf(stdout,"Enroll failed, something wen't wrong\n");
    				return enrolled_print;
    			case FP_ENROLL_PASS:
    				fprintf(stdout,"Scan OK\n");
    				break;
    			case FP_ENROLL_RETRY:
    				--num;
    				fprintf(stdout,"Please try again\n");
    				break;
    			case FP_ENROLL_RETRY_TOO_SHORT:
    				--num;
    				fprintf(stdout,"Your swipe was too short,Please try again\n");
    				break;
    			case FP_ENROLL_RETRY_CENTER_FINGER:
    				--num;
    				fprintf(stdout,"Didn't catch, Please center your finger on sensor and try again\n");
    				break;
    			case FP_ENROLL_RETRY_REMOVE_FINGER:
    				--num;
    				fprintf(stdout,"Scan failed Please remove your finger and then try again\n");
    				break;
    		}
    	}
    	while(r != FP_ENROLL_COMPLETE);
     
    	if(enrolled_print==NULL)
    	{
    		fprintf(stderr,"Enroll complete but no print?\n");
    		return NULL;
    	}
     
    	fprintf(stdout,"Enrollment successfully completed!\n\n");
    	return enrolled_print;
    }
    et quand j'execute j'ai:
    su -c './enrolltest'
    Password:
    Found Device claimed by UPEK Eikon 2 driver
    Let enroll your RIGHT INDEX.

    You will need to successfully scann your finder 5 times tocomplete the process.
    Scan your finger 1/5
    r=3
    Scan OK
    Scan your finger 2/5
    r=3
    Scan OK
    Scan your finger 3/5
    r=3
    Scan OK
    Scan your finger 4/5
    r=3
    Scan OK
    Scan your finger 5/5
    r=3
    Scan OK
    Scan your finger 6/5
    r=-22
    Enroll Failed with error -22
    visiblement il fait un dernier scan et ca echoue, mais pendant qu'il attend pour le scan j'ai remarque que la lumier du scaneur est arretee, donc visiblement le materiel considere que le scan est complet.

    je sais pas ce quoi le probleme

    ps:le materiel est a coup sur bien reconnu car je l'utilise sous fedora 14 et 16 pour l'authentification GDM. A note aussi que avec le fprint_demo j'ai la meme erreur qu'avec mon code.
    Merci d'avance

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lilington Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    	do
    	{
    		struct fp_img *img=NULL;
    		sleep(1);
    		fprintf(stdout,"Scan your finger %d/%d\n",num,stg);
     
    		r=fp_enroll_finger_img(dev,&enrolled_print,&img);
    		fprintf(stdout,"r=%d\n",r);
    		if(img)
    		{
    			fp_img_save_to_file(img,"enrolled.pgm");
    			fprintf(stdout,"Wrote scanned image to enrolled.pgm\n");
    			fp_img_free(img);
    		}
    		if(r<0)
    		{
    			fprintf(stderr,"Enroll Failed with error %d\n",r);
    			return NULL;
    		}
    		++num;
    		switch(r)
    		{
    			case FP_ENROLL_COMPLETE:
    				fprintf(stdout,"Enroll complete!\n");
    				break;
    			case FP_ENROLL_FAIL:
    				fprintf(stdout,"Enroll failed, something wen't wrong\n");
    				return enrolled_print;
    			case FP_ENROLL_PASS:
    				fprintf(stdout,"Scan OK\n");
    				break;
    			case FP_ENROLL_RETRY:
    				--num;
    				fprintf(stdout,"Please try again\n");
    				break;
    			case FP_ENROLL_RETRY_TOO_SHORT:
    				--num;
    				fprintf(stdout,"Your swipe was too short,Please try again\n");
    				break;
    			case FP_ENROLL_RETRY_CENTER_FINGER:
    				--num;
    				fprintf(stdout,"Didn't catch, Please center your finger on sensor and try again\n");
    				break;
    			case FP_ENROLL_RETRY_REMOVE_FINGER:
    				--num;
    				fprintf(stdout,"Scan failed Please remove your finger and then try again\n");
    				break;
    		}
    	}
    	while(r != FP_ENROLL_COMPLETE);

    visiblement il fait un dernier scan et ca echoue, mais pendant qu'il attend pour le scan j'ai remarque que la lumier du scaneur est arretee, donc visiblement le materiel considere que le scan est complet.
    Salut

    Pas facile de t'aider car ton matériel et tes fonctions sont totalement inconnues pour moi. Effectivement, comme ça affiche à chaque itération "Scan OK" ça veut dire que r vaut FP_ENROLL_PASS (et non FP_ENROLL_COMPLETE).

    Ce qu'il faudrait faire, c'est vérifier dans la doc à quelle condition fp_enroll_finger_img() renvoie FP_ENROLL_COMPLETE. Accessoirement, tu peux rajouter un affichage au format %s de strerror(errno) histoire de voir le message système (s'il y en a un) associé à ce 6° enroll.

    De mon coté, j'ai déjà eu à faire à des fonctions qui traitent des éléments en chaine et qui ne savent pas détecter qu'elles sont sur le dernier élément (notamment dans le cas des msq). Dans ce cas, une solution de base est de boucler sur le nombre d'élément à traiter quand il est connu. Or il est connu puisque tu l'affiches...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre extrêmement actif
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Par défaut
    ok , je vais verifier le message et je fait un edit.
    sinon ce qui me derange le plus c'est que fprint_demo justement fait la meme chose, donc quand je lance le programme qui vient avec la lib pour tester ca ne marche pas or je m'authentifie avec le lecteur d'emprunte et l'enrollement marche sous fedora, et surprise surprise, la lib utilise est la meme. donc je suppose que oubien il ya un truc illogique, oubien alors ils ont fait comme tu as dis, soit arreter quand le nombre de test est atteint!?

Discussions similaires

  1. Réponses: 9
    Dernier message: 30/05/2006, 14h57
  2. [IDE][VS2003] Pourquoi mon mode "Design" échoue ?
    Par Mucho dans le forum Visual Studio
    Réponses: 6
    Dernier message: 03/05/2006, 16h34
  3. [C#]Pourquoi l'envoi d'un mail ou sa réception échoue ?
    Par Cazaux-Moutou-Philippe dans le forum C#
    Réponses: 1
    Dernier message: 28/04/2006, 08h19
  4. Lancement de Gnome échoue
    Par OraScott dans le forum Gnome
    Réponses: 7
    Dernier message: 16/11/2005, 17h47
  5. [PowerAmc 10.1]Génération du modèle a échoué
    Par Sabricole dans le forum PowerAMC
    Réponses: 1
    Dernier message: 21/07/2004, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo