Line |
Branch |
Exec |
Source |
1 |
|
|
/******************************************************************************* |
2 |
|
|
|
3 |
|
|
License: |
4 |
|
|
This software and/or related materials was developed at the National Institute |
5 |
|
|
of Standards and Technology (NIST) by employees of the Federal Government |
6 |
|
|
in the course of their official duties. Pursuant to title 17 Section 105 |
7 |
|
|
of the United States Code, this software is not subject to copyright |
8 |
|
|
protection and is in the public domain. |
9 |
|
|
|
10 |
|
|
This software and/or related materials have been determined to be not subject |
11 |
|
|
to the EAR (see Part 734.3 of the EAR for exact details) because it is |
12 |
|
|
a publicly available technology and software, and is freely distributed |
13 |
|
|
to any interested party with no licensing requirements. Therefore, it is |
14 |
|
|
permissible to distribute this software as a free download from the internet. |
15 |
|
|
|
16 |
|
|
Disclaimer: |
17 |
|
|
This software and/or related materials was developed to promote biometric |
18 |
|
|
standards and biometric technology testing for the Federal Government |
19 |
|
|
in accordance with the USA PATRIOT Act and the Enhanced Border Security |
20 |
|
|
and Visa Entry Reform Act. Specific hardware and software products identified |
21 |
|
|
in this software were used in order to perform the software development. |
22 |
|
|
In no case does such identification imply recommendation or endorsement |
23 |
|
|
by the National Institute of Standards and Technology, nor does it imply that |
24 |
|
|
the products and equipment identified are necessarily the best available |
25 |
|
|
for the purpose. |
26 |
|
|
|
27 |
|
|
This software and/or related materials are provided "AS-IS" without warranty |
28 |
|
|
of any kind including NO WARRANTY OF PERFORMANCE, MERCHANTABILITY, |
29 |
|
|
NO WARRANTY OF NON-INFRINGEMENT OF ANY 3RD PARTY INTELLECTUAL PROPERTY |
30 |
|
|
or FITNESS FOR A PARTICULAR PURPOSE or for any purpose whatsoever, for the |
31 |
|
|
licensed product, however used. In no event shall NIST be liable for any |
32 |
|
|
damages and/or costs, including but not limited to incidental or consequential |
33 |
|
|
damages of any kind, including economic damage or injury to property and lost |
34 |
|
|
profits, regardless of whether NIST shall be advised, have reason to know, |
35 |
|
|
or in fact shall know of the possibility. |
36 |
|
|
|
37 |
|
|
By using this software, you agree to bear all risk relating to quality, |
38 |
|
|
use and performance of the software and/or related materials. You agree |
39 |
|
|
to hold the Government harmless from any claim arising from your use |
40 |
|
|
of the software. |
41 |
|
|
|
42 |
|
|
*******************************************************************************/ |
43 |
|
|
|
44 |
|
|
/*********************************************************************** |
45 |
|
|
LIBRARY: FING - NIST Fingerprint Systems Utilities |
46 |
|
|
|
47 |
|
|
FILE: BZ_IO.C |
48 |
|
|
ALGORITHM: Allan S. Bozorth (FBI) |
49 |
|
|
MODIFICATIONS: Michael D. Garris (NIST) |
50 |
|
|
Stan Janet (NIST) |
51 |
|
|
DATE: 09/21/2004 |
52 |
|
|
UPDATED: 01/11/2012 by Kenneth Ko |
53 |
|
|
UPDATED: 03/08/2012 by Kenneth Ko |
54 |
|
|
UPDATED: 07/10/2014 by Kenneth Ko |
55 |
|
|
|
56 |
|
|
Contains routines responsible for supporting command line |
57 |
|
|
processing, file and data input to, and output from the |
58 |
|
|
Bozorth3 fingerprint matching algorithm. |
59 |
|
|
|
60 |
|
|
*********************************************************************** |
61 |
|
|
|
62 |
|
|
ROUTINES: |
63 |
|
|
#cat: parse_line_range - parses strings of the form #-# into the upper |
64 |
|
|
#cat: and lower bounds of a range corresponding to lines in |
65 |
|
|
#cat: an input file list |
66 |
|
|
#cat: set_progname - stores the program name for the current invocation |
67 |
|
|
#cat: set_probe_filename - stores the name of the current probe file |
68 |
|
|
#cat: being processed |
69 |
|
|
#cat: set_gallery_filename - stores the name of the current gallery file |
70 |
|
|
#cat: being processed |
71 |
|
|
#cat: get_progname - retrieves the program name for the current invocation |
72 |
|
|
#cat: get_probe_filename - retrieves the name of the current probe file |
73 |
|
|
#cat: being processed |
74 |
|
|
#cat: get_gallery_filename - retrieves the name of the current gallery |
75 |
|
|
#cat: file being processed |
76 |
|
|
#cat: get_next_file - gets the next probe (or gallery) filename to be |
77 |
|
|
#cat: processed, either from the command line or from a |
78 |
|
|
#cat: file list |
79 |
|
|
#cat: get_score_filename - returns the filename to which the output line |
80 |
|
|
#cat: should be written |
81 |
|
|
#cat: get_score_line - formats output lines based on command line options |
82 |
|
|
#cat: specified |
83 |
|
|
#cat: bz_load - loads the contents of the specified XYT file into |
84 |
|
|
#cat: structured memory |
85 |
|
|
#cat: fd_readable - when multiple bozorth processes are being run |
86 |
|
|
#cat: concurrently and one of the processes determines a |
87 |
|
|
#cat: has been found, the other processes poll a file |
88 |
|
|
#cat: descriptor using this function to see if they |
89 |
|
|
#cat: should exit as well |
90 |
|
|
|
91 |
|
|
***********************************************************************/ |
92 |
|
|
|
93 |
|
|
#include <string.h> |
94 |
|
|
#include <ctype.h> |
95 |
|
|
#include <sys/time.h> |
96 |
|
|
#include <bozorth.h> |
97 |
|
|
|
98 |
|
|
/***********************************************************************/ |
99 |
|
|
|
100 |
|
|
/***********************************************************************/ |
101 |
|
|
|
102 |
|
|
/* Used by the following set* and get* routines */ |
103 |
|
|
static char program_buffer[ 1024 ]; |
104 |
|
|
static char * pfile; |
105 |
|
|
static char * gfile; |
106 |
|
|
|
107 |
|
|
/***********************************************************************/ |
108 |
|
|
|
109 |
|
|
/***********************************************************************/ |
110 |
|
|
|
111 |
|
|
/***********************************************************************/ |
112 |
|
|
|
113 |
|
|
/***********************************************************************/ |
114 |
|
✗ |
char * get_progname( void ) |
115 |
|
|
{ |
116 |
|
✗ |
return program_buffer; |
117 |
|
|
} |
118 |
|
|
|
119 |
|
|
/***********************************************************************/ |
120 |
|
✗ |
char * get_probe_filename( void ) |
121 |
|
|
{ |
122 |
|
✗ |
return pfile; |
123 |
|
|
} |
124 |
|
|
|
125 |
|
|
/***********************************************************************/ |
126 |
|
✗ |
char * get_gallery_filename( void ) |
127 |
|
|
{ |
128 |
|
✗ |
return gfile; |
129 |
|
|
} |
130 |
|
|
|
131 |
|
|
/***********************************************************************/ |
132 |
|
|
|
133 |
|
|
/***********************************************************************/ |
134 |
|
|
/* returns CNULL on error */ |
135 |
|
|
|
136 |
|
|
/***********************************************************************/ |
137 |
|
|
|
138 |
|
|
/************************************************************************ |
139 |
|
|
Load a 3-4 column (X,Y,T[,Q]) set of minutiae from the specified file |
140 |
|
|
and return a XYT sturcture. |
141 |
|
|
Row 3's value is an angle which is normalized to the interval (-180,180]. |
142 |
|
|
A maximum of MAX_BOZORTH_MINUTIAE minutiae can be returned -- fewer if |
143 |
|
|
"DEFAULT_BOZORTH_MINUTIAE" is smaller. If the file contains more minutiae than are |
144 |
|
|
to be returned, the highest-quality minutiae are returned. |
145 |
|
|
*************************************************************************/ |
146 |
|
|
|
147 |
|
|
/***********************************************************************/ |
148 |
|
|
|
149 |
|
|
/************************************************************************ |
150 |
|
|
Load a XYTQ structure and return a XYT struct. |
151 |
|
|
Row 3's value is an angle which is normalized to the interval (-180,180]. |
152 |
|
|
A maximum of MAX_BOZORTH_MINUTIAE minutiae can be returned -- fewer if |
153 |
|
|
"DEFAULT_BOZORTH_MINUTIAE" is smaller. If the file contains more minutiae than are |
154 |
|
|
to be returned, the highest-quality minutiae are returned. |
155 |
|
|
*************************************************************************/ |
156 |
|
|
|
157 |
|
|
/***********************************************************************/ |
158 |
|
|
#ifdef PARALLEL_SEARCH |
159 |
|
|
int fd_readable( int fd ) |
160 |
|
|
{ |
161 |
|
|
int retval; |
162 |
|
|
fd_set rfds; |
163 |
|
|
struct timeval tv; |
164 |
|
|
|
165 |
|
|
|
166 |
|
|
FD_ZERO( &rfds ); |
167 |
|
|
FD_SET( fd, &rfds ); |
168 |
|
|
tv.tv_sec = 0; |
169 |
|
|
tv.tv_usec = 0; |
170 |
|
|
|
171 |
|
|
retval = select( fd+1, &rfds, NULL, NULL, &tv ); |
172 |
|
|
|
173 |
|
|
if ( retval < 0 ) { |
174 |
|
|
perror( "select() failed" ); |
175 |
|
|
return 0; |
176 |
|
|
} |
177 |
|
|
|
178 |
|
|
if ( FD_ISSET( fd, &rfds ) ) { |
179 |
|
|
/*fprintf( stderr, "data is available now.\n" );*/ |
180 |
|
|
return 1; |
181 |
|
|
} |
182 |
|
|
|
183 |
|
|
/* fprintf( stderr, "no data is available\n" ); */ |
184 |
|
|
return 0; |
185 |
|
|
} |
186 |
|
|
#endif |
187 |
|
|
|