0

I am thinking to do a hobby project related to fingerprint verification. The flow which I wanted to implement is something like below:

  1. A user can register a fingerprint using an Arduino device
  2. This fingerprint will be saved on a remote server so that user can be verified on some other Arduino devices
  3. When a user tries to verify, the fingerprint will be matched against the fingerprint stored on the server

For this, I am thinking to use the Go language on the server side as an API server, MySQL/SQLite as a database system. Further, in the future, I will build a mobile application to perform some query with the server like running devices, the number of registered users, revoke users etc.

For now, I am planning to buy the following devices:

  1. Arduino UNO
  2. A wifi shield
  3. A fingerprint sensor
  4. An LCD screen

Now the question is, will the devices mentioned above will work for my setup, or I need to buy something else (Are they compatible?)

Also, is there a way to store the fingerprint on a server? I am thinking to store some kind of hash (probably RSA encrypted) of a fingerprint on a server, will it work?

Any relevant example of storing fingerprint on a server?

  • This question was closed as being too broad, but I don't agree that it really passes that test. – Nick Gammon Aug 15 '18 at 9:58
2

According to the adafruit driver's code, it is capable of loading and storing fingerprint templates (256byte each) from and to its flash

  uint8_t emptyDatabase(void);
  uint8_t storeModel(uint16_t id);
  uint8_t loadModel(uint16_t id);
  uint8_t getModel(void);

These functions would allow you to sync the local database of each device with a server for example or even download and test for each template individually, which would obviously be pretty slow and only viable, if you had to store more templates than the flash itself can.

You can encrypt this data before transmitting in whatever way you wish but that is a topic on its own.

Other than that your components seem to be compatible.

An idea for syncing:

Every unit should check on a fixed interval of 1 second for instance, whether the online database has changed. This may be represented by a simple counter i.e. version that increments with each change and is copied to local storage after downloading the latest changes.

So whenever an Arduino uploads a new fingerprint model or your mobile app removes a fingerprint, the counter on the server is incremented and every other device knows to update its database in case the local version is lower.

Another tip if changes happen very frequently:

Every flash memory just has so many write cycles before it dies. If you happen to update the database a lot, you should try to minimize the stress on each fingerprint sensor's memory by assigning an arbitrary, unique id to each fingerprint and storing a local 'map' where you have stored which id on this specific device. This way you can update only the fingerprint(s) that have actually changed.

Good luck.

  • Another tip if changes happen very frequently I got some FRAM so that I wouldn't have to worry too much about destroying internal EPROM. Adafruit sells some and when combined with the Extended database library, you can have a pretty strong combo. – ATE-ENGE Aug 14 '18 at 20:34
  • I believe fingerprint templates must be stored on the device in order to be comparable. I might be wrong tho – mystery Aug 15 '18 at 8:47
  • @mystery I am thinking to use TCP socket, so if a device updates the fingerprint on the server, the server will inform every other device to sync fingerprint models to their local one, is this approach fine? – Tejashwi Kalp Taru Aug 16 '18 at 8:14
  • Sure, more complicated than polling but go ahead if it works out – mystery Aug 16 '18 at 8:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.