Tech5 Client Edition SDK 2.7.0
common.h
1/*****************************************************************************
2 common.h - the common header file
3
4*******************************************************************************/
5
6#ifndef COMMON_H__
7#define COMMON_H__
8
9#include <stdint.h>
10#include <stdbool.h>
11#include <string.h>
12
13#include "win2lin.h"
14#include "ansi_nist_itl_1.h"
15
16// packing defines
17#define _CORE_TIGHT 1
18#define _CORE_PACKING 8
19
20#define _DBG_INFO
21#define _DBG_INFO_1
22#define _DBG_INFO_2
23
25#define MAX_MINUTIAE 255
26
27#ifdef __cplusplus
28 extern "C"{
29#endif
30/******************************************************************
31 THE CONSTANRS
32******************************************************************/
37ENUM_DECLARATION MATCH_SPEED
38{
39 LOWEST_MATCH_SPEED = 0,
40 LOW_MATCH_SPEED = 1,
41 REDUCED_MATCH_SPEED = 2,
42 NORMAL_MATCH_SPEED = 3,
43 INCREASED_MATCH_SPEED = 4,
44 HIGH_MATCH_SPEED = 5,
45 HIGHEST_MATCH_SPEED = 6,
46};
47
52ENUM_DECLARATION NIST_QUALITY
53{
55 QUAL_POOR = 20,
57 QUAL_FAIR = 40,
59 QUAL_GOOD = 60,
61 QUAL_VGOOD = 80,
63 QUAL_EXCELLENT = 100
64};
65
70ENUM_DECLARATION IMAGE_TYPE
71{
73 UNDEFINED_IMAGE = 0,
75 WSQ_IMAGE = 1,
77 BMP_IMAGE = 2,
79 J2K_IMAGE = 3,
81 JPEG_IMAGE = 4,
83 PNG_IMAGE = 5,
85 TIFF_IMAGE = 6,
86};
87
88
89
94ENUM_DECLARATION IMPRESSION_TYPE
95{
97 IMPTYPE_LP = 0,
99 IMPTYPE_LR = 1,
101 IMPTYPE_NP = 2,
103 IMPTYPE_NR = 3,
105 IMPTYPE_L_I = 4,
107 IMPTYPE_L_T = 5,
109 IMPTYPE_L_P = 6,
111 IMPTYPE_L_L = 7,
113 IMPTYPE_SW = 8,
115 IMPTYPE_LCL = 9,
117 IMPTYPE_PALM_LS = 10,
119 IMPTYPE_PALM_NON_LS = 11,
121 IMPTYPE_PALM_LT_IMP = 12,
123 IMPTYPE_PALM_LT_TRACING = 13,
125 IMPTYPE_PALM_LT_PHOTO = 14,
127 IMPTYPE_PALM_LT_LIFT = 15,
128
130 IMPTYPE_FP_LS_OP_CT_PL = 20,
132 IMPTYPE_FP_LS_OP_CT_RD = 21,
134 IMPTYPE_FP_LS_NON_OP_CT_PL = 22,
136 IMPTYPE_FP_LS_NON_OP_CT_RD = 23,
138 IMPTYPE_FP_LS_OP_CS_PL = 24,
140 IMPTYPE_FP_LS_OP_CS_RD = 25,
142 IMPTYPE_FP_LS_NON_OP_CS_PL = 26,
144 IMPTYPE_FP_LS_NON_OP_CS_RD = 27,
145
147 IMPTYPE_OTHER = 28,
149 IMPTYPE_UNKNOWN = 29,
150
152 IMPTYPE_PLANTAR_LS = 30,
154 IMPTYPE_PLANTAR_NON_LS = 31,
156 IMPTYPE_PLANTAR_LT_IMP = 32,
158 IMPTYPE_PLANTAR_LT_TRACING = 33,
160 IMPTYPE_PLANTAR_LT_PHOTO = 34,
162 IMPTYPE_PLANTAR_LT_LIFT = 35,
163
165 IMPTYPE_U_FR_LT_IMP = 36,
167 IMPTYPE_U_FR_LT_TRACING = 37,
169 IMPTYPE_U_FR_LT_PHOTO = 38,
171 IMPTYPE_U_FR_LT_LIFT = 39,
172
174 IMPTYPE_FP_LS_OP_MS_PL = 40,
176 IMPTYPE_FP_LS_OP_MS_RD = 41
177
178};
179
184ENUM_DECLARATION FINGERS
185{
186#ifdef __cplusplus
188 FINGPOS_UK = (int32_t)NIST_POS_CODE::POS_CODE_U_FINGER,
190 FINGPOS_RT = (int32_t)NIST_POS_CODE::POS_CODE_R_THUMB,
192 FINGPOS_RI = (int32_t)NIST_POS_CODE::POS_CODE_R_INDEX_F,
194 FINGPOS_RM = (int32_t)NIST_POS_CODE::POS_CODE_R_MIDDLE_F,
196 FINGPOS_RR = (int32_t)NIST_POS_CODE::POS_CODE_R_RING_F,
198 FINGPOS_RL = (int32_t)NIST_POS_CODE::POS_CODE_R_LITTLE_F,
200 FINGPOS_LT = (int32_t)NIST_POS_CODE::POS_CODE_L_THUMB,
202 FINGPOS_LI = (int32_t)NIST_POS_CODE::POS_CODE_L_INDEX_F,
204 FINGPOS_LM = (int32_t)NIST_POS_CODE::POS_CODE_L_MIDDLE_F,
206 FINGPOS_LR = (int32_t)NIST_POS_CODE::POS_CODE_L_RING_F,
208 FINGPOS_LL = (int32_t)NIST_POS_CODE::POS_CODE_L_LITTLE_F,
209
212 POS_CODE_U_PALM = (int32_t)NIST_POS_CODE::POS_CODE_U_PALM,
214 POS_CODE_R_FULL_PALM = (int32_t)NIST_POS_CODE::POS_CODE_R_FULL_PALM,
216 POS_CODE_R_WR_PALM = (int32_t)NIST_POS_CODE::POS_CODE_R_WR_PALM,
218 POS_CODE_L_FULL_PALM = (int32_t)NIST_POS_CODE::POS_CODE_L_FULL_PALM,
220 POS_CODE_L_WR_PALM = (int32_t)NIST_POS_CODE::POS_CODE_L_WR_PALM,
222 POS_CODE_R_LOWER_PALM = (int32_t)NIST_POS_CODE::POS_CODE_R_LOWER_PALM,
224 POS_CODE_R_UPPER_PALM = (int32_t)NIST_POS_CODE::POS_CODE_R_UPPER_PALM,
226 POS_CODE_L_LOWER_PALM = (int32_t)NIST_POS_CODE::POS_CODE_L_LOWER_PALM,
228 POS_CODE_L_UPPER_PALM = (int32_t)NIST_POS_CODE::POS_CODE_L_UPPER_PALM,
230 POS_CODE_R_OTHER = (int32_t)NIST_POS_CODE::POS_CODE_R_OTHER,
232 POS_CODE_L_OTHER = (int32_t)NIST_POS_CODE::POS_CODE_L_OTHER,
234 POS_CODE_R_INTERDIGITAL = (int32_t)NIST_POS_CODE::POS_CODE_R_INTERDIGITAL,
236 POS_CODE_R_THENAR = (int32_t)NIST_POS_CODE::POS_CODE_R_THENAR,
238 POS_CODE_R_HYPOTHENAR = (int32_t)NIST_POS_CODE::POS_CODE_R_HYPOTHENAR,
240 POS_CODE_L_INTERDIGITAL = (int32_t)NIST_POS_CODE::POS_CODE_L_INTERDIGITAL,
242 POS_CODE_L_THENAR = (int32_t)NIST_POS_CODE::POS_CODE_L_THENAR,
244 POS_CODE_L_HYPOTHENAR = (int32_t)NIST_POS_CODE::POS_CODE_L_HYPOTHENAR
245#else
247 FINGPOS_UK = (int32_t)POS_CODE_U_FINGER,
249 FINGPOS_RT = (int32_t)POS_CODE_R_THUMB,
251 FINGPOS_RI = (int32_t)POS_CODE_R_INDEX_F,
253 FINGPOS_RM = (int32_t)POS_CODE_R_MIDDLE_F,
255 FINGPOS_RR = (int32_t)POS_CODE_R_RING_F,
257 FINGPOS_RL = (int32_t)POS_CODE_R_LITTLE_F,
259 FINGPOS_LT = (int32_t)POS_CODE_L_THUMB,
261 FINGPOS_LI = (int32_t)POS_CODE_L_INDEX_F,
263 FINGPOS_LM = (int32_t)POS_CODE_L_MIDDLE_F,
265 FINGPOS_LR = (int32_t)POS_CODE_L_RING_F,
267 FINGPOS_LL = (int32_t)POS_CODE_L_LITTLE_F,
268
271 FINGPOS_U_PALM = (int32_t)POS_CODE_U_PALM,
273 FINGPOS_R_FULL_PALM = (int32_t)POS_CODE_R_FULL_PALM,
275 FINGPOS_R_WR_PALM = (int32_t)POS_CODE_R_WR_PALM,
277 FINGPOS_L_FULL_PALM = (int32_t)POS_CODE_L_FULL_PALM,
279 FINGPOS_L_WR_PALM = (int32_t)POS_CODE_L_WR_PALM,
281 FINGPOS_R_LOWER_PALM = (int32_t)POS_CODE_R_LOWER_PALM,
283 FINGPOS_R_UPPER_PALM = (int32_t)POS_CODE_R_UPPER_PALM,
285 FINGPOS_L_LOWER_PALM = (int32_t)POS_CODE_L_LOWER_PALM,
287 FINGPOS_L_UPPER_PALM = (int32_t)POS_CODE_L_UPPER_PALM,
289 FINGPOS_R_OTHER = (int32_t)POS_CODE_R_OTHER,
291 FINGPOS_L_OTHER = (int32_t)POS_CODE_L_OTHER,
293 FINGPOS_R_INTERDIGITAL = (int32_t)POS_CODE_R_INTERDIGITAL,
295 FINGPOS_R_THENAR = (int32_t)POS_CODE_R_THENAR,
297 FINGPOS_R_HYPOTHENAR = (int32_t)POS_CODE_R_HYPOTHENAR,
299 FINGPOS_L_INTERDIGITAL = (int32_t)POS_CODE_L_INTERDIGITAL,
301 FINGPOS_L_THENAR = (int32_t)POS_CODE_L_THENAR,
303 FINGPOS_L_HYPOTHENAR = (int32_t)POS_CODE_L_HYPOTHENAR
304#endif
305};
306
307
312ENUM_DECLARATION MinexTemplateType
313{
315 NIST_TEMPLATE = 0,
317 ISO_TEMPLATE = 1,
319 NIST_T5_TEMPLATE = 2,
320};
321
323const int32_t MAX_WIDTH = (4 * 1024);
325const int32_t MAX_HEIGHT = (4 * 1024);
326
331ENUM_DECLARATION MINUTIAE_TYPE
332{
334 BIFURCATION = 0,
336 ENDING = 1
337};
338
339
345{
349 uint32_t m_width ;
351 uint32_t m_height ;
353 uint8_t *m_image ;
355 uint16_t m_ppi ;
358
359#ifdef __cplusplus
360 RawImage()
361 {
362 m_finger = FINGERS::FINGPOS_UK;
363 m_width = 0;
364 m_height = 0;
365 m_image = nullptr;
366 m_ppi = 0;
367 m_impression_type = IMPRESSION_TYPE::IMPTYPE_LP;
368 }
369#endif
370};
371
372
378{
382 uint8_t* m_image;
384 uint32_t m_imageSize;
386 uint16_t m_ppi;
391
392#ifdef __cplusplus
393 ImageData()
394 {
395 m_type = IMAGE_TYPE::UNDEFINED_IMAGE ;
396 m_image = nullptr;
397 m_imageSize = 0;
398 m_ppi = 0;
399 m_fingerPos = FINGERS::FINGPOS_UK;
400 m_impression_type = IMPRESSION_TYPE::IMPTYPE_LP;
401 }
402#endif
403};
404
405#pragma pack(push, _CORE_TIGHT)
409struct P_PACKED_1 PersonalData
410{
412 uint8_t m_sex;
414 uint16_t m_birthYear;
422 uint16_t m_region;
424 uint8_t m_reserved[8];
425#ifdef __cplusplus
428 {
429 clear();
430 }
432 void clear()
433 {
434 memset(this, 0, sizeof(PersonalData));
435 }
437 PersonalData& operator=(const PersonalData& pd)
438 {
439 memcpy(this, &pd, sizeof(PersonalData));
440 return *this;
441 }
443 PersonalData(const PersonalData& pd)
444 {
445 *this = pd;
446 }
447#endif // __cplusplus
448};
449#pragma pack(pop)
450
451#pragma pack(push, _CORE_PACKING)
456struct P_PACKED_8 MatchResult
457{
463 int32_t similarity;
465 uint32_t numPairs;
468 int16_t minutiaeNum[MAX_MINUTIAE][2];
471 int32_t xcP;
473 int32_t ycP;
475 int32_t xcG;
477 int32_t ycG;
479 int32_t angle;
480
481
482#ifdef __cplusplus
484 {
485 clear();
486 }
487 void clear()
488 {
489 memset(this, 0, sizeof(MatchResult));
490 }
491#endif
492};
493#pragma pack (pop)
494
501{
503 int32_t x;
505 int32_t y;
507 uint8_t prob;
509 int32_t angle;
511 uint8_t density;
512
513#ifdef __cplusplus
514 Feature()
515 {
516 x = 0;
517 y = 0;
518 prob = 0;
519 angle = 0;
520 density = 0;
521 }
522#endif
523};
524
530#ifdef __cplusplus
531struct Minutiae : public ::Feature
532{
534 enum MINUTIAE_TYPE type;
535 Minutiae() : Feature()
536 {
537 type = MINUTIAE_TYPE::BIFURCATION;
538 }
539};
540#else
542{
544 int32_t x;
546 int32_t y;
548 uint8_t prob;
550 int32_t angle;
552 uint8_t density;
555};
556
557#endif
558
559#ifdef __cplusplus
560 } // extern "C"{
561#endif
562
563#endif // COMMON_H__
564
565
566
FINGERSFinger position enumeration.
IMAGE_TYPESupported Image types enumeration.
IMPRESSION_TYPEFingerprint impression type constants enumeration.
MATCH_SPEEDMatching speed constants enumeration.
MINUTIAE_TYPEMinutiae types enumeration.
MinexTemplateTypeenumerates types of minex template.
NIST_QUALITYNIST quality constants enumeration.
Featurestructure keeps information about position any features (minutiae and singularity) NOTE: all c...
Definition: common.h:501
int32_t x
x position from top-left corner, pixels
Definition: common.h:503
int32_t y
y positionf rom top-left corner, pixels
Definition: common.h:505
uint8_t prob
probability, %
Definition: common.h:507
uint8_t density
distance between redges, pixels
Definition: common.h:511
int32_t angle
direction (clockwise from OX axis), degree (-180...180)
Definition: common.h:509
ImageDatastructure keeps information about image data.
Definition: common.h:378
uint16_t m_ppi
Image resolution (e.g. 500 , 1000)
Definition: common.h:386
uint32_t m_imageSize
size of image
Definition: common.h:384
enum FINGERS m_fingerPos
finger Position, 0...10 refer to ANSI/NIST standard
Definition: common.h:388
uint8_t * m_image
pointer to buffer with whole image file containt.
Definition: common.h:382
enum IMPRESSION_TYPE m_impression_type
impression type
Definition: common.h:390
enum IMAGE_TYPE m_type
image type
Definition: common.h:380
MatchResultkeeps information about matching results.
Definition: common.h:457
int32_t ycP
y coordinate of found minutiae center on probe fingerprint
Definition: common.h:473
uint32_t numPairs
number of found minutiae pairs
Definition: common.h:465
int32_t similarity
similarity score of compared fingerprints in a range 0...MAX_SCORE
Definition: common.h:463
int32_t angle
clockwise angle rotation of gallery fingerprint relatively probe fingerprint around found minutiae ce...
Definition: common.h:479
enum FINGERS fingerP
probe finger number
Definition: common.h:459
enum FINGERS fingerG
gallery finger number
Definition: common.h:461
int32_t xcG
x coordinate of found minutiae center on gallery fingerprint
Definition: common.h:475
int32_t xcP
Definition: common.h:471
int32_t ycG
y coordinate of found minutiae center on gallery fingerprint
Definition: common.h:477
Minutiaestructure keeps information about minutiae NOTE: all coordinates is applied to 500 DPI finger...
Definition: common.h:542
enum MINUTIAE_TYPE type
minutiae type
Definition: common.h:554
uint8_t density
distance between redges, pixels
Definition: common.h:552
int32_t x
x position from top-left corner, pixels
Definition: common.h:544
int32_t y
y positionf rom top-left corner, pixels
Definition: common.h:546
uint8_t prob
probability, %
Definition: common.h:548
int32_t angle
direction (clockwise from OX axis), degree (-180...180)
Definition: common.h:550
PersonalData.
Definition: common.h:410
uint8_t m_leftSlapError
less than 4 fingers was found in left slap
Definition: common.h:416
uint16_t m_region
region number (or any other data that are used for binning) 0 - means not using this data for binning
Definition: common.h:422
uint16_t m_birthYear
year of birth
Definition: common.h:414
uint8_t m_rightSlapError
less than 4 fingers was found in right slap
Definition: common.h:418
uint8_t m_sex
sex (of the Sex values)
Definition: common.h:412
uint8_t m_thumbsError
less than 2 fingers was found in thumbs slap
Definition: common.h:420
RawImagestructure keeps information about RAW image.
Definition: common.h:345
uint16_t m_ppi
Image resolution (e.g. 500 , 1000)
Definition: common.h:355
uint8_t * m_image
image buffer
Definition: common.h:353
enum IMPRESSION_TYPE m_impression_type
impresssion type
Definition: common.h:357
uint32_t m_height
image height, pixels
Definition: common.h:351
enum FINGERS m_finger
finger position
Definition: common.h:347
uint32_t m_width
image width, pixels
Definition: common.h:349