web-dev-qa-db-fra.com

Scanner d'empreintes digitales à l'aide de l'appareil photo

Travailler sur un scanner d'empreintes digitales avec ou sans appareil photo, sa possibilité et son taux de réussite?, Je suis tombé sur l'un des SDK open source nommé FingerJetFX son offre réalisable avec Android aussi.

L'extracteur de fonctionnalité d'empreinte digitale FingerJetFX OSE est indépendant de la plate-forme et peut être conçu pour, avec les modifications appropriées apportées aux fichiers de création, et s'exécuter dans des environnements avec ou sans systèmes d'exploitation, y compris

  • Linux
  • Android
  • Les fenêtres
  • Windows CE
  • divers RTOS

mais je ne sais pas si le scanner d'empreintes digitales est possible ou non, je télécharge le SDK et je creuse mais pas de chance, même je n'ai trouvé aucune étape pour intégrer le SDK, donc ayant peu de questions qui sont énumérées ci-dessous:

Je recherche des suggestions et des conseils:

  1. Le scanner d'empreintes digitales peut être possible en Android en utilisant un appareil photo ou sans appareil photo?
  2. Avec l'aide de FingerJetFX puis-je atteindre mon objectif?
  3. Si la deuxième réponse est oui, quelqu'un peut-il me fournir des étapes pour intégrer le SDK dans Android?

Vos suggestions sont appréciables.

42
RobinHood

Solutions basées sur la caméra Android:

En tant que personne qui a fait des recherches importantes sur ce problème exact, je peux vous dire qu'il est difficile d'obtenir une image appropriée pour les modèles (extraction de fonctionnalités) en utilisant une caméra stockée sur n'importe quel appareil Android actuel. Le principal problème débilitant est d'obtenir un contraste significatif entre les crêtes du doigt et les vallées. Les scanners d'empreintes digitales optiques commerciaux (que vous essayez d'imiter) obtiennent généralement le contraste nécessaire grâce à une réflexion interne totale frustrée dans un prisme.

FTIR in Biometrics

Dans ce cas, la lumière des crêtes en contact avec le prisme est transmise au capteur CMOS tandis que la lumière des vallées ne l'est pas. Vous n'obtiendrez tout simplement pas de manière fiable le même type de résultats d'un appareil photo Android, mais cela ne signifie pas que vous ne pouvez pas obtenir quelque chose utilisable dans des conditions idéales.

J'ai pris l'image à gauche avec un scanner d'empreintes digitales optique commercial (Futronics FS80) et à droite avec un appareil photo normal (15MP Cannon DSLR). Après recadrage, inversion (pour correspondre à la convention de l'autre scanner), contraste, etc. de l'image de la caméra, nous avons obtenu les résultats suivants.

enter image description here

Le faible contraste de l'image de la caméra est apparent.

enter image description here

Mais le logiciel est capable de déterminer avec précision le débit de la crête.

enter image description here

Et nous finissons par trouver un nombre décent de minuties correspondantes (marquées de cercles rouges).

Voici les mauvaises nouvelles. Il est difficile de prendre ces types de gros plans du bout du doigt. J'ai utilisé un reflex numérique avec flash pour obtenir ces résultats. De plus, la plupart des algorithmes de correspondance d'empreintes digitales ne sont pas invariables à l'échelle. Donc, si le doigt est plus éloigné de l'appareil photo lors d'un "scan" ultérieur, il peut ne pas correspondre à l'original.

Le progiciel que j'ai utilisé pour les visualisations est l'excellent et sous licence BSD SourceAFIS . Pas de manigances d'entreprise "version open source"/"version payante" non plus, bien qu'il ne soit actuellement porté que sur C # et Java (limité).

Solutions sans caméra:

Pour le petit nombre effrayant d'appareils dotés d'un matériel prenant en charge le "Mode hôte USB", vous pouvez écrire un pilote personnalisé pour intégrer un scanner d'empreintes digitales à Android. Je vais être honnête, pour les deux modèles que j'ai fait cela, c'était une énorme douleur. Je l'ai accompli en utilisant cableshark pour renifler les paquets USB entre le scanner et une boîte Linux qui avait un pilote qui fonctionne, puis en écrivant un pilote Android basé sur les commandes reniflées.

Compilation croisée FingerJetFX

Une fois que vous avez élaboré une solution pour l'acquisition d'images (les deux solutions potentielles ont leurs inconvénients), vous pouvez commencer à vous inquiéter de faire fonctionner FingerJetFX sur Android. Vous allez d'abord utiliser leur SDK pour écrire un programme C++ autonome qui prend une image et la transforme en modèle. Après cela, vous avez vraiment deux options.

  1. Compilez-le dans une bibliothèque et utilisez JNI pour interfacer avec lui.
  2. Compilez-le en un exécutable et laissez votre programme Android l'appeler en tant que sous-processus.

Pour l'un ou l'autre, vous aurez besoin du NDK . Je n'ai jamais utilisé JNI donc je m'en remettrai à la sagesse de autres sur la meilleure façon de le faire. J'ai toujours tendance à choisir l'itinéraire n ° 2. Pour cette application, je pense que c'est approprié car vous n'appelez vraiment le code natif que pour faire une chose, modèle votre image. Une fois que votre programme natif est exécuté et compilé de manière croisée, vous pouvez tilisez la réponse à cette question pour le mettre en package avec votre application Android et l'appeler depuis votre Android code.

84
sarwar

Il y a quelques obstacles immédiats:

  1. L'obtention d'une bonne image de l'empreinte digitale sera critique. Selon leur site, fingerjet attend des images d'empreintes digitales standard - par exemple Images en niveaux de gris 8 bits (contraste élevé), empreintes digitales aplaties. Si vous avez pris des photos d'empreintes digitales avec l'appareil photo, l'utilisateur devrait avoir une surface transparente plane (verre) sur laquelle vous pourriez aplatir les empreintes digitales afin de prendre la photo. Votre application localisera alors l'empreinte digitale dans l'image, la transformera en un format acceptable pour le jet d'encre. Une bibliothèque comme OpenCV pourrait y contribuer.

  2. FingerJetFX OSE ne semble pas offrir de support Android support - vous devrez compiler la bibliothèque pour Android et l'utiliser via JNI/NDK).

À partir de là, le jet d'encre devrait vous fournir une représentation compacte de l'impression que vous pouvez utiliser pour la correspondance.

Ce serait faisable, mais l'exigence d'utilisation (besoin pour l'utilisateur d'avoir une surface plate transparente disponible) pourrait être un facteur de rupture ...

3
gary schulte