Fingerprint question

For other supported Arduino products from Adafruit: Shields, accessories, etc.

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
User avatar
hmxmghl
 
Posts: 5
Joined: Thu Jul 13, 2017 2:08 pm

Re: Fingerprint question

Post by hmxmghl »

I am glad to share this.

https://github.com/hmxmghl/Modified_Ada ... or_Library

HUGE THANKS to Don Jeronimo for his fantastic work. I am happy I was able to contribute something.

Thanks again, Rick, for your guidance.

User avatar
samuelbles
 
Posts: 7
Joined: Sat Aug 12, 2017 12:59 am

Re: Fingerprint question

Post by samuelbles »

hi there,

I'm using adafruit library. I found

Code: Select all

#define FINGERPRINT_HISPEEDSEARCH 0x1B
at the adafruit_fingerprint.h and using it at fastsearch but I can't find 1B instruction command at the datasheet. I wonder if somebody can explain where it is come from.

thanks

User avatar
adafruit_support_rick
 
Posts: 35092
Joined: Tue Mar 15, 2011 11:42 am

Re: Fingerprint question

Post by adafruit_support_rick »

Sorry, but I don't know where that came from. The datasheet in the tutorial is the only one we have.
Possibly, it's something that SFGDemo does? Maybe somebody traced out the data stream from SFGDemo?

User avatar
samuelbles
 
Posts: 7
Joined: Sat Aug 12, 2017 12:59 am

Re: Fingerprint question

Post by samuelbles »

hi rick, thanks for your reply!

in the library I found this.

Code: Select all

uint8_t Adafruit_Fingerprint::fingerFastSearch(void) {
  fingerID = 0xFFFF;
  confidence = 0xFFFF;
  // high speed search of slot #1 starting at page 0x0000 and page #0x00A3
  uint8_t packet[] = {FINGERPRINT_HISPEEDSEARCH, 0x01, 0x00, 0x00, 0x00, 0xA3};
  writePacket(theAddress, FINGERPRINT_COMMANDPACKET, sizeof(packet)+2, packet);
  uint8_t len = getReply(recvPacket);

  if ((len != 1) && (recvPacket[0] != FINGERPRINT_ACKPACKET))
   return -1;

  fingerID = recvPacket[2];
  fingerID <<= 8;
  fingerID |= recvPacket[3];

  confidence = recvPacket[4];
  confidence <<= 8;
  confidence |= recvPacket[5];

  return recvPacket[1];
}
it says something about slot. what is exactly slot means? and it says search from 0x0000 to #0x00A3 means that 162 is the last page it search. I can enroll until 1k finger (enroll example), but I can't make a match from that function until 1k. I already change 0xA3 to 0x3EB and can’t match until 1k either. I already using precise match after load model and loop it through 1k but I have to wait about 14s to reach it. I want to speed up the match, maybe somebody here have a clue?

big thanks!

User avatar
adafruit_support_rick
 
Posts: 35092
Joined: Tue Mar 15, 2011 11:42 am

Re: Fingerprint question

Post by adafruit_support_rick »

The fingerprint sensor only stores 162 finger templates. Enroll may let you provide a number up to 1000, but the actual sensor only goes up to 162.

User avatar
samuelbles
 
Posts: 7
Joined: Sat Aug 12, 2017 12:59 am

Re: Fingerprint question

Post by samuelbles »

Thanks rick for the reply,

I tried storing same fingerprint template to the sensor database until 1000 id. First i capture my fingerprint then extract to buffer 1, loop the buffer 1 and increment the id until 1000 (because i don't have more than 162 fingerprint lol) and i never get error. Is it actually store 1000 fingerprint or i miss something?

User avatar
adafruit_support_rick
 
Posts: 35092
Joined: Tue Mar 15, 2011 11:42 am

Re: Fingerprint question

Post by adafruit_support_rick »

It will only store 162. I don't know why it doesn't give you an error.

User avatar
zehks
 
Posts: 1
Joined: Wed Sep 20, 2017 11:22 pm

Re: Fingerprint question

Post by zehks »

Hi, I'm new to electronics but I have some experience at programming. I need to add a fingerprint system to an existing user database.

Is it possible to:

1 - Add a fingerprint to an existing user in database?
2 - Perform user identification using the sensor and comparing to the database?

The setup would be a MySQL Server running under Windows. Could I build a webapp as a GUI for managing users, such as adding fingerprint for existing users?

Thanks.

User avatar
adafruit_support_rick
 
Posts: 35092
Joined: Tue Mar 15, 2011 11:42 am

Re: Fingerprint question

Post by adafruit_support_rick »

It's technically possible, but practically a bit messy.

After enrolling a finger, you would have to retrieve the fingerprint 'template' from the sensor and store it in your database.
In order to match, you would have to upload the template back to the sensor. The user would have to identify himself to your system before scanning his finger, so that you could upload the correct template.

We don't have any example software or library support for downloading and uploading templates. User Don Jeronimo wrote some code for this purpose. Apparently, it works well, but I've never tried it out:
viewtopic.php?f=22&t=33229&hilit=templa ... 60#p359231

User avatar
jf23perez
 
Posts: 1
Joined: Mon Oct 02, 2017 12:44 pm

Re: Fingerprint question

Post by jf23perez »

Hi guys,

Actually I'm trying to get involve in the Internet of Things world, and I'm trying to use a Fingerprint sensor the one that is provided by Adafruit but I have some questions. There is a form to have a master database that contains all the fingerprints enrolled and if is that possible how to create the database and export this into other Adafruit fingerprint sensor.
If someone can help me I'll be truly grateful.

Thanks.

User avatar
adafruit_support_rick
 
Posts: 35092
Joined: Tue Mar 15, 2011 11:42 am

Re: Fingerprint question

Post by adafruit_support_rick »

See the previous post about Don Jeronimo's work. The finger data is stored as 'templates'. You need to download the templates from one sensor and upload them to the other.

User avatar
Suzybbb
 
Posts: 1
Joined: Wed Nov 29, 2017 3:45 am

Re: Fingerprint question

Post by Suzybbb »

Hello!
Is it possible to enrol with sensor1 and veriy it to sensor2 and all the data will be save in mySQL database. Im using arduino uno and adafruit fingerprint. Arduino is connected to vb.net program.

User avatar
DedeAsya
 
Posts: 2
Joined: Mon Jan 15, 2018 6:13 am

Re: Fingerprint question

Post by DedeAsya »

sercanaygun wrote:Dear Don_Jeronimo, first of all I serve my loads of thanks to you.
And, the other question to whole forum, do you know what kind of scientific algorithms (standarts) are applied during feature extraction of finger. Sensor creates a char file but do we know what is this (maybe compression)? During authentication, finger is shown 2 times and both char files are compared but how? and the template to be stored in flash is obtained and again how? I do my master thesis about biometric hashing and need to know how to get these charfiles scientifically. As you know, raw data is a lot to be stored and Arduino UNO is not efficient to do some image algorithms to apply. Even my thesis in the frame of BANNED to store fingerprint data securely in the RFID card that I bought from Adafruit. As the card will be in the public (open to everyone) , the unique personal biometric info. must be hashed in my hypothesis. For computer, scientists that they know hashes are very sensitive to data changes of input cipher. But for each scan processes of the same finger it seems we get a bit different bytes. Then the hashing will be a little bit flexible with some error. Therefore, I need to know this 256 byte charfile data to be compared. Maybe the adafruit company can contact by the producer of the sensor even though they did not return to my e-mail.

You ideas are very important becuase there are not to much interested in these issues. I look forward to hearing from you all.

Best Regards

My name is DedeAsya I also have a thesis for fingerprint template hashing. can you help me sir ? and we share knowladge together. it will very help me in my project. thank you sir

User avatar
DedeAsya
 
Posts: 2
Joined: Mon Jan 15, 2018 6:13 am

Re: Fingerprint question

Post by DedeAsya »

Don_Jeronimo wrote:Hi again,

I'm now getting the following

EF, 1, FF, FF, FF, FF, 2, 0, 82, 3, 1, 59, 1D, 0, 0, FF, FE, FF, FE, F0, FE, E0, 6, E0, 6, 0, 6, 0, 6, 0, 2, 0, 2, 0, 2, 0, 6, 0, 6, 0, 6, 0, 6, 0, E, 0, E, 0, 1E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 8E, E2, 96, 54, 19, A4, FE, 1F, A1, DF, 3E, 5F, 22, A6, 7E, 68, A5, A7, 5E, F, B4, DC, 9E, 2C, BD, 19, FE, 4C, 42, 57, 1E, 26, C2, C2, 7E, 38, 93, E3, 7F, 12, 9E, DF, 1F, 15, 25, 6, 7F, 44, A8, AC, BF, 34, 2F, 5B, 7F, 5C, B2, 2A, 7F, 39, 40, 80, FF, 44, 19, 9F, BC, 4E, 95, E3, 1D, 29, CF,

EF, 1, FF, FF, FF, FF, 2, 0, 82, 62, 18, 24, BD, 2D, 26, 1D, 5D, 26, A7, 45, 3D, 46, 13, F, 7A, 59, 13, CD, FA, 57, B8, 81, B2, 5A, 41, 16, 92, 42, 16, 24, 93, 5C, 39, 17, 13, 5C, 96, 23, 19, 54, C1, 2B, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, F, 24,

EF, 1, FF, FF, FF, FF, 2, 0, 82, 3, 1, 53, 17, 0, 0, FF, FE, FF, FE, FE, 1E, FC, 2, F8, 2, F8, 0, F0, 0, E0, 0, E0, 0, E0, 0, E0, 0, C0, 0, C0, 2, C0, 2, C0, 2, E0, 6, F0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 8F, 63, 96, 48, 13, A5, 3E, 6F, 24, 27, 1E, 6D, 32, 2A, 9E, 1F, B5, 1C, 9E, 58, 40, 56, 5E, 2F, 22, 9F, 1F, 25, 24, C6, 9F, 56, A9, 0, 1F, 42, AE, 9B, FF, 3F, BC, 59, 7F, 48, C0, C0, 7F, 32, C1, 2, 9F, 56, 9A, 66, 7D, 3D, 25, DD, 9D, 37, 27, 5, 7D, 54, 17, 26, 13, 6B, 16, F, B8, 2C, FA,

EF, 1, FF, FF, FF, FF, 8, 0, 82, 62, 98, 23, 18, 6E, 18, A3, 99, 64, 1A, 65, 99, 58, 14, 4F, B4, 36, 9B, A0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 70,

Four packages (including the end package, hooray), 139 bytes each, with a combined total of 556 bytes..this seems about right to me as 556 - (4x11) = 512 (11 being the bytes for address and such) , which happens to be the template size (according to the datasheet). :)

I removed the line loop (from the code you guys posted,thanks again), as it seemed to be messing with printing out the correct values from the array and am getting the same result every time now.

However, I still don't understand the end bytes in the packages...should that not be the checksum? Could it be the checksum is not the amount of bytes but the sum of something else? Any ideas?

As always your wisdom is much appreciated.

Regs,
J

Good night sir. I have thesis about fingerprint template hashing. My plan is to get fingerprint template , hash it, and save in a EEPROM arduino for authentication mode. may be can you help me sir ? because I am still have problem when I try to get fingerprint template full. may be we can shrare knowladge together . then you sir

User avatar
Phong_DKTD
 
Posts: 1
Joined: Wed Jan 24, 2018 11:46 pm

Re: Fingerprint question

Post by Phong_DKTD »

Dear Don_Jeronimo,

I follow your steps but when I use Serial Monitor to display message, I get the error "Communication Error". I think maybe changing packet size will affect to the reply message returned by fingerprint module. But I can not fix it now. If you have time, can you explain it for me?

Thanks

Locked
Please be positive and constructive with your questions and comments.

Return to “Other Arduino products from Adafruit”