Finger Vein Identity Recognition in "Negligible Time" using ArrayFire

John Melonakos ArrayFire, Case Studies, Computer Vision, CUDA, Open Source Leave a Comment

In this blog post, we summarize work by researchers in Slovakia using ArrayFire to develop OpenFinger, a finger vein identity recognition library. Finger prints and finger veins can be used as a biometric for identity recognition.

The physical setup of their sensor system is the following collection of CMOS sensors scattering light to a near infrared LED that projects the image to a CCD camera for capture to a computer.

The computing infrastructure used in this work consists of the following components. Several great open source libraries are used, including OpenCV, Caffe, Qt, and ArrayFire.

ArrayFire is specifically used in pre-processing to accelerate Gabor filtering on the GPU.

Gabor filter has proven itself as one of the most suitable techniques to restore the original fingerprint quality as it can adapt its parameters to enhance ridge orientations as well as frequencies. After extensive testing using the so-called EI (Error Index) indicator, they have arrived at the conclusion that a correctly tuned Gabor filter rapidly increases the accuracy of minutiae detection. One of its drawbacks is its computational complexity. In this solution, they designed an adaptive Gabor filter that runs on GPU with ArrayFire "making its running time very negligible" (PDF).

The project was implemented on a Lenovo IdeaPad 700-15ISK laptop with Intel Core i5 6300HQ 2.3GHz (quad-core), 8GB DDR4 2133MHz with an NVIDIA GeForce GTX 950M 2GB GPU. The authors do not provide speedup numbers, but state that the "time duration of preprocessing a single image is ∼0.007 seconds" or negligible.

The results were very impressive over 3816 images, as shown in the table and ROC curves below.

I like this paper because it shows a great application where the focus of the paper is not GPU computing. It is a researcher building a real project. The incorporation of ArrayFire into a computationally costly part of the algorithm reduced the processing time to a "negligible" amount. That sounds like a great outcome to me!