tomar studio para lector huellas huella escaner escanear digitales descargar dactilares celular bloqueo app aplicacion android sdk android-ndk camera fingerprint

android - studio - Escáner de huellas digitales con cámara



lector de huella digital celular (2)

Hay un par de obstáculos inmediatos:

  1. Obtener una buena imagen de la huella digital será crítico. Según su sitio, Fingerjet espera imágenes estándar de huellas dactilares, por ejemplo, imágenes en escala de grises de 8 bits (alto contraste) en escala de grises. Si tomó imágenes de huellas dactilares con la cámara, el usuario necesitaría tener una superficie transparente plana (vidrio) sobre la que pudiera aplanar las huellas digitales para tomar la fotografía. Su aplicación localizaría la huella dactilar en la imagen y la transformaría en un formato aceptable para fingerjet. Una biblioteca como OpenCV ayudaría a hacer esto.

  2. FingerJetFX OSE no parece ofrecer compatibilidad con Android en lata: tendrás que compilar la biblioteca para Android y usarla a través de JNI / NDK.

A partir de ahí, Fingerjet debe proporcionarle una representación compacta de la impresión que puede usar para hacer coincidir.

Sería factible, pero el requisito de uso (la necesidad de que el usuario tenga una superficie transparente plana disponible) podría ser un factor decisivo ...

Trabajando con un escáner de huellas dactilares usando la cámara o sin él, su posibilidad y su tasa de éxito ?, me encontré con uno de los SDK de código abierto llamado FingerJetFX proporciona viabilidad con Android.

El extractor de funciones de huellas dactilares FingerJetFX OSE es independiente de la plataforma y se puede diseñar para, con los cambios apropiados en los archivos make, y se puede ejecutar en entornos con o sin sistemas operativos, incluidos

  • Linux
  • Androide
  • Windows
  • Windows CE
  • varios RTOS

pero no estoy seguro de si el escáner de huellas digitales es posible o no, descargué el SDK y la excavación, pero no tuve suerte, incluso no encontré ningún paso para integrar el SDK, por lo que tengo algunas de las preguntas que se enumeran a continuación:

Estoy buscando sugerencias y orientación:

  1. El escáner de huellas dactilares puede ser posible en Android usando la cámara o sin cámara.
  2. Con la ayuda de FingerJetFX ¿puedo lograr mi objetivo?
  3. Si la segunda respuesta es sí, ¿alguien me puede dar algún tipo de pasos para integrar SDK en Android?

Tu sugerencia es apreciable.


Soluciones basadas en cámara Android:

Como alguien que ha realizado una investigación significativa sobre este problema exacto, puedo decirle que es difícil obtener una imagen adecuada para la creación de plantillas (extracción de características) utilizando una cámara de almacenamiento que se encuentra en cualquier dispositivo Android actual. El principal problema debilitante es lograr un contraste significativo entre las crestas y los valles de los dedos. Los escáneres ópticos comerciales de huellas dactilares (que intentas imitar) suelen lograr el contraste necesario a través de una reflexión interna total frustrada en un prisma.

En este caso, la luz de las crestas que entran en contacto con el prisma se transmite al sensor CMOS mientras que la luz de los valles no. Simplemente no obtendrás de manera confiable el mismo tipo de resultados de una cámara Android, pero eso no significa que no puedas obtener algo utilizable en condiciones ideales.

Tomé la imagen de la izquierda con un escáner de huellas dactilares óptico comercial (Futronics FS80) y la derecha con una cámara normal (15MP Cannon DSLR). Después de recortar, invertir (para que coincida con la convención del otro escáner), contrastar, etc. la imagen de la cámara, obtenemos los siguientes resultados.

El bajo contraste de la imagen de la cámara es evidente.

Pero el software puede determinar con precisión el flujo de cresta.

Y terminamos encontrando una cantidad decente de minucias coincidentes (marcadas con círculos rojos).

Aquí están las malas noticias. Tomar este tipo de planos cercanos de la punta de un dedo es difícil. Usé una DSLR con flash para lograr estos resultados. Además, la mayoría de los algoritmos de coincidencia de huellas dactilares no son invariantes de escala. Por lo tanto, si el dedo está más lejos de la cámara en un "escaneo" posterior, es posible que no coincida con el original.

El paquete de software que utilicé para las visualizaciones es el excelente SourceAFIS licencia de BSD. No hay chanchullos corporativos de "versión de código abierto" / "versión pagada", aunque actualmente solo está portado a C # y Java (limitado).

Soluciones no basadas en la cámara:

Para la pequeña cantidad aterradora de dispositivos que tienen hardware que admite "Modo de host USB", puede escribir un controlador personalizado para integrar un escáner de huellas digitales con Android. Sería honesto, para los dos modelos que hice esto fue un gran dolor. Lo logré utilizando wireshark para olfatear paquetes USB entre el escáner y un linux box que tenía un controlador en funcionamiento y luego escribir un controlador de Android basado en los comandos olfateados.

Compilación cruzada de FingerJetFX

Una vez que haya encontrado una solución para la adquisición de imágenes (ambas soluciones potenciales tienen sus inconvenientes) puede comenzar a preocuparse por la ejecución de FingerJetFX en Android. Primero usará su SDK para escribir un programa C ++ autónomo que toma una imagen y la convierte en una plantilla. Después de eso, realmente tienes dos opciones.

  1. Compílalo en una biblioteca y usa JNI para interactuar con él.
  2. Compílalo con un ejecutable y deja que tu programa Android lo llame como un subproceso.

Para cualquiera necesitarás el NDK . Nunca utilicé JNI, por lo que me inclinaré por la sabiduría de los others sobre la mejor manera de hacerlo. Siempre tiendo a elegir la ruta # 2. Para esta aplicación, creo que es apropiado, ya que solo está llamando al código nativo para hacer una cosa, crear una plantilla de su imagen. Una vez que haya ejecutado y compilado cruzado su programa nativo, puede usar la respuesta a esta pregunta para empaquetarlo con su aplicación Android y llamarlo desde su código Android.