How to implement a fingerprint recognition algorithm into a wearable device
Abstract
This work describes how to implement a fingerprint recognition algorithm into an ARM Cortex-M3 microcontroller included in a Texas Instruments LaunchPad CC2650 evaluation kit. The application context is the realization of a wearable device for biometrics security. On the one hand, the students become familiar with wearable devices whose basic component is a low power microcontroller. On the other hand, the students learn about a security application based on fingerprint recognition, which employs typical operations of image processing.
Full text
Depósito de investigación de la Universidad de Sevilla https://idus.us.es/ This is an Accepted Manuscript of an article published by IEEE in 2020 XIV Technologies Applied to Electronics Teaching Conference (TAEE) on 11 August 2020, available at: https://doi.org/10.1109/TAEE46915.2020.9163690 “© 2021 IEEE. Personal use of this material is permitted. Permission from IEEE must be obtained for all other uses, in any current or future media, including reprinting/republishing this material for advertising or promotional purposes, creating new collective works, for resale or redistribution to servers or lists, or reuse of any copyrighted component of this work in other Works”
How to Implement a Fingerprit Recognition Algorithm into a Wearable Device Rosario Arjona, Javier Arcenegui, and Iluminada Baturone Instituto de Microelectrónica de Sevilla (IMSE-CNM) Universidad de Sevilla, Consejo Superior de Investigaciones Científicas (CSIC) Seville, Spain {arjona, arcenegui, lumi}@imse-cnm.csic.es Abstract—This work describes how to implement a fingerprint recognition algorithm into an ARM Cortex-M3 microcontroller included in a Texas Instruments LaunchPad CC2650 evaluation kit. The application context is the realization of a wearable device for biometrics security. On the one hand, the students become familiar with wearable devices whose basic component is a low power microcontroller. On the other hand, the students learn about a security application based on fingerprint recognition, which employs typical operations of image processing. Keywords— fingerprint recognition; image processing; ARM microcontrollers; wearable devices. I. I NTRODUCTION The context of this work is the subject “Complementos de formación disciplinar en Tecnología y Procesos Industriales” of the Technology specialization of the Master's Degree in Secondary School Teaching, Vocational and Language Teaching of University of Seville. Specifically, this work is related to the subject section entitled Analysis of everyday life technological devices. A way of learning technology is the analysis of everyday life technological devices. Nowadays, the use of wearable devices is very extended in the form of fitness trackers, smart watches, hearables, or smart clothing, among others [1]. Therefore, wearable devices are very demanded products in consumer electronics and can be considered everyday life technological devices. The first successfully comercialized wearable devices appeared in 1977 in the form of calculator watches. Since then, a broad range of new applications is possible and, even, user-installable apps can be executed in a similar way to smartphones (voice calls, contactless payments, opening of car or house doors, measuring vital signs, or facilitating healthcare). In addition, wearable devices can include builtin sensors very suitable for biometric recognition systems which control the access to other applications. Wearable devices should be reduced-sized and energyautonomous. Therefore, they tend to use small, constrainedresource and low power electronic components. The usage of their resources should be optimized to maximize battery life while operations are being executed. Wearable devices, by their nature, are always with the user and this is a good feature for biometric solutions since all biometric data can be operated and stored inside the wearable device under the supervision of the legitimate user. Biometric data (which is sensitive information) should not be shared nor stored externally. However, most of biometric algorithms are complex to be performed in devices such as wearables with constraints in terms of processing, memory and power consumption. A very accurate algorithm that consumes the battery quickly or takes too much time to make a recognition decision is not feasible. In fact, typically, the solutions for wearable devices propose the realization of the processing in an external device with less constraints (such as a smartphone). The separation of the acquisition and the processing stages implies that the wearable device is more vulnerable for security attacks. A higher security level is given when the complete recognition process is performed in the same device. A wearable authentication device with recognition on wearable is typically composed of the following modules as illustrated in Fig. 1: acquisition (which obtains biometric captures), processing (which processes the biometric data acquired), memory (which stores the biometric information), communication (which is in charge of transmitting the recognition decision) and power source (a battery or an embedded form of energy harvesting so that the wearable device is wireless). In this way, the complete recognition process is performed in a reduced security perimeter. In this work, we employ biometric recognition based on fingerprints because good-quality fingerprint images are acquired by small and low-cost sensors very suitable for wearable devices. Fingerprint sensors are very usable and can be easily worn on the wrist. In contrast to other biometric traits employed for weareable devices (such as gait [2], electrocardiogram [3], touch behavioral and voice [4], and human body communication [5]), the quality of the captures Fig. 1: Modules of a wearable with biometric recognition on the device.
is not degraded in spite of that fingerprint sensors are small and low-cost. Furthermore, fingerprints are very distinctive and it is possible to employ algorithms with low processing complexity but maintaining good biometric recognition performance. We consider the device hardware as a SoC (System on Chip) including a low-cost and energy-efficient microcontroller. The analysis of a technological device should include the history, impact, applications, components, fundamentals and realization. In this work, we focus on the fundamentals and realization of wearable devices for biometric authentication based on fingerprints. This material is taught to the students to illustrate an example as demonstration of the professor. This work is organized as follows. Section II describes a fingerprint recognition algorithm which satisfies a tradeoff between processing complexity and good biometric recognition performance. In section III the algorithm is redefined to take into account the constraints of the microcontroller but maintaining the accuracy of the original proposal. Also, implementation results are given. Finally, Section IV concludes the work. II. B IOMETRIC R ECOGNITION B ASED O N F INGERPRINTS Biometrics is the science which studies measurements based on physical (fingerprints, face or iris), physiological (heart beat signals) and behavioral (signature or gait) traits of a person to recognize individuals [6]. In general, a biometric recognition system is composed of several stages: Acquisition, Feature Extraction, Template Storage, and Matching. The biometric samples are captured in the acquisition stage. If biometric samples are not compared directly but features are preferred, feature extraction is the next stage. The features extracted at registration conform the template stored into the database. Templates are compared to the features extracted at matching stage. Fingerprint images are composed of ridges and valleys. In a fingerprint image (as illustrated in Fig. 2 [7]), ridges and valleys are depicted in black and white, respectively. Generally, the comparison of fingerprint images is not direct because fingerprint images are different for different captures. A feature extraction process is required to obtain distinctive representations. Since wearable devices have limited processing capabilities, memory, and power consumption, this work employs a lightweight fingerprint recognition solution based on a fingerprint feature named QFingerMap16 proposed in [8] to present briefly a demonstrator and more extensively described in [9]. In contrast to the typical fingerprint features (minutiae), this feature offers a good tradeoff between computational cost and recognition performance. Minutiae are very distinctive [10]-[15]. However, the computation of minutiae requires a high computational cost which affects feature extraction and matching times and power consumption for implementations performed in microcontrollers [9]. The fingerprint feature QFingerMap16 is extracted from a window centered at the convex core point (depicted in red in the fingerprint image of Fig. 2). A convex core point is a singular point of a fingerprint which determines an area where there is distinctive information. Firstly, the orientation image has to be calculated and segmented into 16 regions of homogeneous directions. Then, the convex core point and the distinctive window are extracted. The distinctive window is downsampled and the orientation values are converted to bits. The main steps to extract the feature QFingerMap16 are illustrated in Fig. 2 and the complete steps are described as follows: A. Fingerprint Acquisition The first step is to obtain the fingerprint image by using a fingerprint sensor. According to the technology employed, the most extended types of sensors can be categorized into optical and capacitive. The operations required for the extraction and matching of the fingerprint feature QFingerMap16 are optimized for optical and capacitive sensors [9]. Since the quality of the acquired fingerprint image depends on the sensor and the behaviour of the user who employs the sensor, quality evaluation is required to achieve a good recognition performance. The operations performed for the extraction of the fingerprint feature QFingerMap16 also allow evaluating the quality of the fingerprint image at the same time. B. Orientation Image Computation and Quality Estimation A fingerprint orientation image is the presentation of local directions of ridges. The orientation image is obtained by the neighborhood operator described in [16]. A fixed number of reference orientations, O x with x = 1, …, N are defined and the standard deviation std with the gray values of n neighbor pixels along each direction are computed. The value of n should be at least () . The value of the standard deviation in a orientation O x is compared to the value of the standard deviation in the orthogonal orientation O x+N/2 . The pair of orthogonal orientations (O x , O x+N/2 ) with the maximum difference of the standard deviation value determines the ridge orientation as follows: Fig. 2: Extraction process of the fingerprint feature QFingerMap16.
𝜙(𝑖,𝑗)= 𝑂𝑖𝑓 𝑠𝑡𝑑(𝑂)<𝑠𝑡𝑑𝑂/ 𝑂/ 𝑖𝑓 𝑠𝑡𝑑(𝑂)>𝑠𝑡𝑑𝑂/ 𝜐𝑖𝑓 𝑠𝑡𝑑(𝑂)=𝑠𝑡𝑑𝑂/ (1) where υ represents the orientation assigned to a homogeneous region which belong to the fingerprint image background (in this case, 90º). The value of n is fixed to 9 (n=9) to create a neighborhood of 9 × 9 pixels centered at the analyzed pixel. The value of N is 16 (N=16) and the direction values of 0º, 11.25º, 22.5º, 33.75º, 45º, 56.25º, 67.5º, 78.75º, 90º, 101.25º, 112.5º, 123.75º, 135º, 146.25º, 157.5º, and 168.75º are evaluated. An example of the resulting orientation image is shown in Fig. 2. Isolated and noisy orientations are removed by a smoothing process based on a maximum operator within a 27 × 27 window centered at the analyzed pixel. It selects the direction value with the highest number of occurrences. The smoothed orientation image for the example fingeprint image is shown in Fig. 2. The quality of the fingerprint image is evaluated by means of four quality indexes (IR, I0, I45, and I135). The IR index computes the reliable direction values selected by the smoothing operation. If the number of occurrences for the direction value is higher than a threshold value of 364 (determined by the half of the pixels in the 27 × 27-pixel smoothing window), the direction value is reliable. The I0, I45, and I135 indexes compute, respectively, the reliable pixels for the orientations around 0º (0º, 11.25º, 157.5º, or 168.75º), the orientations around 45º (22.5º, 33.75º, 45º, or 56.25º), and the orientations around 135º (112.5º, 123.75º, 135º, or 146.25º). Fig. 3 illustrates examples of reliable pixels obtained for good-quality and bad-quality fingerprint images. A bad-quality fingerprint image has a low IR value or the values of at least two of I0, I45, and I135 are low. If the quality of a fingerprint image acquired is bad, the system interacts to the user in order to acquire again a fingerprint image. C. Convex Core Point Detection The detection of the exact convex core point is based on a hybrid solution that employs the Poincaré Index [17] and the intersection of homogeneous regions [9]. With this solution several convex core points can be generated and several feature vectors can be extracted. The Poincaré Index is calculated for each pixel p of the smoothed orientation image by summing up the orientation changes of their np neighbor pixels as follows: 𝑃𝐼(𝑝)=∑𝑓(𝜙−𝜙)+𝑓(𝜙−𝜙) (2) where: 𝑓(𝑥)= 𝑥 𝑖𝑓 |𝑥|≤𝜋/2 𝜋−𝑥 𝑖𝑓 𝑥>𝜋/2 𝜋+ 𝑥 𝑖𝑓 𝑥<−𝜋/2 (3) and ϕ is the orientation value. The pixel p is a convex core point determined by the Poincaré Index if 𝑃𝐼(𝑝) is π. A second smoothing is applied to the first smoothed orientation image. The smoothing operation is the same as in the previous step. After that, the 16-orientation values are converted to the dominant orientations around 0º, 45º, 90º, and 135º to obtain 4-orientation values and a set of 20 patterns defined by a 3 × 3-pixel window is also applied at each pixel. Fig. 4 shows the 20 patterns employed. The patterns of the last row do not include orientations around 90º. When some of these patterns are found, the pixel location found by the pattern is selected directly as convex core candidate, since Poincaré Index could not detect it. For the rest of the patterns, the pixel location found by Poincaré index which is closest to the location found by the pattern is selected, because the location found by Poincaré index is finer than the location determined by the intersection of homogeneous regions of the second smoothed orientation image. Finally, the selected pixels are evaluated by the Moore- Neighbour tracing algorithm (modified by Jacob's stopping criteria) [18] to find a neighbourhood of points. In order to reduce the number of convex core candidates, each Fig. 4: Patterns for the detection of convex cores. Colors depicted are: blue for 0º, dark marron for 45º, yellow for 90º, and light blue for 135º. (a) (b) (c) (d) Fig. 3: (a) and (c) good-quality and bad-quality fingerprint images [7], respectively; (b) and (d) reliable pixels (depicted in white) obtained for the fingerprint images in (a) and (c), respectively.
Fig. 5: LaunchPad CC2650 evaluation kit connected to the FPC1011F3 fingerprint sensor . Fig. 6: CC2650 Sensor Tag connected to the FPC1011F3 fingerprint sensor. neighbourhood is replaced by its geometric center pixel. Usually, the number of resulting convex cores c with this solution is smaller than 6. D. Feature Vector Extraction Distinctive windows are extracted from the smoothed orientation image. Windows of 128 × 128 pixels are centered at the c selected convex cores. A down-sampling by a factor of 8 is applied (that is, one pixel is considered out of 8 consecutive pixels) to compact the information of the distinctive window. The QFingerMap16-based fingerprint feature contains 16 × 16 orientations (128 × 128 / 8). If the 16 possible orientations are coded by 4 b, the fingerprint feature is coded by 1024 b. The extraction of the distinctive window, the downsampled and the QFingerMap16 feature are illustrated in Fig. 2. Since c distinctive windows can be obtained for each fingerprint image (associated to c convex core candidates) the feature vector can be composed of c QFingerMap16- based features. E. Matching Matching is based on the computation of a distance measurement D which is the result of the minimum value of the Hamming distances Hdist between all the possible combinations of template and input QFingerMap16 vectors. The Hamming distance counts the number of bit positions in which the two bits are different. If t=1,…,i and q=1,…,j QFingerMap16 vectors (QFM16) are obtained from the template and query fingerprint images, respectively, the matching score is calculated as follows: D𝑄𝐹𝑀16,𝑄𝐹𝑀16= ∙min ,…, ,…,𝐻𝑑𝑖𝑠𝑡(𝑄𝐹𝑀16,𝑄𝐹𝑀16) (4) III. HOW TO CREATE A BIOMETRIC WEARABLE DEVICE BASED ON THE FINGERPRINT FEATURE QFINGERMAP16 The fingerprint recognition algorithm is implemented into the microcontroller of a Texas Instruments LaunchPad CC2650 board [19]. The microcontroller is a 48 MHz ARM Cortex-M3 , with a 128 kB flash memory and a 20 kB SRAM. The implementation is performed in C by using the Code Composer Studio (CCS). Capacitive sensors are more compact and cheaper than optical sensors. Therefore, capacitive sensors are more suitable for wearable devices. In this work, we employ the capacitive sensor FPC1011F3 [20] which gives 200 × 152 fingerprint images with grayscale values of 8 b. The demonstrator based on the CC2650 board is shown in Fig. 5. Fig. 6 shows a small-size demonstrator based on the capacitive sensor FPC1011F3 and the CC2650 Sensor Tag. A. Considerations for the Implementation into a Constrained Microcontroller Although the fingerprint recognition algorithm selected is very suitable for hardware implementations, some considerations should be taken into account to satisfy the constraints imposed by low-cost and low-power microcontrollers. Firstly, the arithmetic operations should be fixed-point. Another issue is the limitation of memory. Typically, a microcontroller includes ROM, flash, cache and RAM memories. Although the size of the flash memory is greater than the other kind of memories, flash memory is also limited in resource-constrained microcontrollers. Therefore, the microcontroller memory should be managed in an efficient way. In this work, RAM and flash memories store the variables employed by the code. Flash memory also stores the template features (that is, the QFingerMap16 vectors extracted from the template fingerprint image). The fingerprint sensor employs the communication interface specification SPI (Serial Peripheral Interface). The configuration of the SPI requires values for parameters such as bit rate or transfer timeout. In addition, a function to read the pixels of each row of the fingerprint image is needed. Each read of the sensor gives a line of 152 pixels. The first operation of the algorithm is the computation of the orientation image. A 9 × 9 window should be considered for each pixel. Since each read of the sensor gives a line, a 9 × 152 window should be maintained in a variable. Once the first 9 × 152 window is stored, when a new line is read, the previous lines are shifted and the first line is removed to store the new line in the window. From each 9 × 152 window, the orientation value is calculated serially for the 152 central pixels. 9 × 9 windows are considered to compute the orientation value for each central pixel. The 16 reference orientations (N=16) are taken into account winthin the 9 × 9 window from 0º to 180º in intervals of 11.25º as illustrated in Fig 7. Each reference orientation (Ox) is composed of 9 pixels (n=9). Therefore, for each central pixel, a 16 × 9-pixel matrix is calculated. In order to reduce the complexity of operations, the standard deviation is approximated in the following manner to avoid root squares and reduce the number of operations:
(a) (b) (c) (d) (e) (f) (g) (h) (i) (j) (k) (l) (m) (n) (o) (p) Fig. 7: Orientation pixels within a 9 × 9 window: (a) 90º, (b) 101.25º, (c) 112.5º, (d) 123.75º, (e) 135º, (f) 146.25º, (g) 157.5º, (h) 168.75º, (i) 0º, (j) 11.25º, (k) 22.5º, (l) 33.75º, (m) 45º, (n) 56.25º, (o) 67.5º, (p) 78.75º. 𝑠𝑡𝑑=∑|𝑝−𝑝| (5) where pi are the 8 pixels of each reference orientation (dx), without the central pixel, and 𝑝 is the mean of the pixel values as follows: 𝑝=∑𝑝 (6) Once the 16 standard deviation values are calculated, the pair of ortogonal directions (Ox, Ox+N/2) with the maximum difference of 𝑠𝑡𝑑 is selected and the ridge orientation is estimated as in Eq. 1. The smoothing operation considers 27 × 152 windows. The smoothing operation starts when the first 27 × 152 orientation values are obtained. Once the first 27 × 152 window is available, the smoothing operation is applied for each central pixel in the following manner: 1. For the first central pixel, the frequency of each possible orientation value is obtained for the first 27 columns and the smoothed orientation value is the orientation value with the highest frequency. For each column, there are 16 frequency values corresponding to the 16 orientation values. 2. For the following central pixels, the frequency of each possible orientation value is the result of substracting the frequency of each possible orientation value of the older column and adding the frequency of each possible orientation value of the new column. The smoothed orientation value is the orientation value with the highest frequency. Once the first 27 × 152 window is stored, when a new line is read, the previous lines are shifted and the first line is removed to store the new line in the window. The quality indexes (IR, I0, I45, and I135) are calculated when the operations for the orientation image and the smoothing are being computed. Once the smoothing finishes, the value of the quality indexes are final and a quality decision is made. The smoothed orientation values are stored in flash memory to obtain the distinctive window once the convex core point/s is/are located. Since there are 16 possible orientation values, each orientation value can be stored using 4 b (1 byte is employed for two orientation values). Therefore, 14.84 kB are stored (152 × 200 × 4 b). The write in flash memory is performed in complete pages, therefore, 4 pages (in total, 16 kB) are reserved and employed for the smoothed orientation image. The computation of the Poincaré index maintains a 3 × 152 window of smoothed orientation values. It starts when the first 3 × 152 window of smoothed orientation values is obtained. The computation of the Poincaré index is performed as indicated in Eq. 2 for each central pixel. Once the first 3 × 152 window is stored, when a new line is read, the previous lines are shifted and the first line is removed to store the new line in the window. For the location of convex core points based on patterns, a second smoothing is applied to the smoothed orientation image in the same way as the first smoothing but reading the lines of the smoothed orientation values from the flash memory. The recognition of convex core patterns requires a 4- orientation image associated to the orientation values 0º, 45º, 90º and 135º. This resulting image is obtained easily from the 16-direction smoothed orientation image if: 0º, 11.25º, 157.5º, or 168.75º are the orientations around 0º; 22.5º, 33.75º, 45º, or 56.25º are the orientations around 45º; 67.5º, 78.75º, and 90º are the orientations around 90º; and 112.5º, 123.75º, 135º, or 146.25º are the orientations around 135º. The 3 × 3 patterns are applied for each central pixel of 3 × 152 windows of the second smoothed orientation image. Once the first 3 × 152 window is stored, when a new line is read, the previous lines are shifted and the first line is removed to store the new line in the window. When a convex core is located (obtained by Poincaré index or patterns), the position in terms of rows and columns is stored. The locations of the convex core points selected by the patterns are the locations of the nearest convex core points found by Poincaré index. The distance between two convex core points whose row and columns positions are (x1, y1) and (x2, y2) is based on the Euclidean distance approximated by the Manhattan distance to avoid the computation of squares and square roots. The expression employed is as follows: (𝑥,𝑦),(𝑥,𝑦) ⇒ 𝑑=|𝑥−𝑥|+|𝑦−𝑦| (7) The convex core points of the same neighbourhood (that is, the distance between them is smaller than 5) are combined. Each set found is replaced by the mean of the row and column positions.
Figure 9: Results of the recognition process shown with a GUI performed in a Raspberry Pi 2 connected to the FPC1011F3 fingerprint sensor. Fig. 8: Verification of the implementation performed in the CC2650 board with the implementation performed in Matlab. Once the final convex core points are located, the QFingerMap16 feature vectors associated to each convex core point resulting are extracted. The 16 × 16 orientation values are read from flash memory according to the convex core positions and the 8-factor downsampling. During the enrollment phase, these 16 × 16 orientation values for each convex core point are stored as templates. During the matching phase, the 16 × 16 orientation values for each convex core point obtained from the input fingerprint image are compared with the templates stored. Matching operation is performed as in Eq. 4. B. Implementation Verification and Results The implementation is verified by comparing the results of the recognition solution implemented into the CC2650 board and the implementation performed in Matlab as illustrated in Fig. 8. The results obtained by the microcontroller implementation are very accurate since the solution proposed is oriented to fixed-point implementations from the image quality operations to the matching operation and the approximations considered in the orientation image computation do not affect to the final results. For example, in the example illustrated in Fig. 8, only 14 values are different. A Graphical User Interface (GUI) was developed in a Raspberry Pi 2 to illustrate the steps of the fingerprint recognition algorithm with fingerprints acquired on line. This implementation is based on the same code employed for the implementation into the ARM Cortex-M3 microcontroller. Fig. 9 shows the sensor connected to the Raspberry Pi and how the results of the different recognition steps are viewed through the GUI in a monitor. Fig. 9 shows a recognition example when the fingerprint acquired has good-quality. When the fingerprint acquired has bad-quality, the GUI requests the user to perform a new acquisition. Regarding implementation results, the variables stored in memory occupy 17,159 B of the RAM and 20,480 B of the flash (which also stores the template). In addition, 34,757 B from the flash memory are employed for the program code. The processing time is, in average, 5.52 s for feature extraction and 654 µs matching. The CC2650 microcontroller consumes 0.53 mW determined by the dynamic power at 1.1 V and 25 ºC provided by the ARM Cortex-M3 Developer documentation [21]. IV. CONCLUSIONS This work shows how is the realization of a wearable device devoted to a security application based on fingerprint biometric recognition. Fingerprint recognition algorithms employ fingerprint images and thus students can also learn the implementation of image processing algorithms in a resource-constrained and low-power microcontroller. In addition, the students can learn how to connect a small-size capacitive fingerprint sensor to a microcontroller through the SPI connection. The implementation results shows to the students that a fingerprint recognition algorithm can be implemented into a low-power microcontroller which consumes 0.53 mW and satisfies real-time processing (feature extraction and matching time is 5,52 s). ACKNOWLEDGMENT This work was supported in part by the Spanish Agencia Estatal de Investigación and Fondo Europeo de Desarrollo Regional (FEDER) under Projects TEC2017-83557-R and RTC-2017-6595-7, and Consejería de Economía, Conocimiento, Empresas y Universidad de la Junta de Andalucía, under Projects AT17_5926_USE and US- 1265146. The work of Rosario Arjona was supported by a Post-Doc Fellowship from the Spanish National Cybersecurity Institute (INCIBE). REFERENCES [1] J. Blasco, T. M. Chen, J. Tapiador, and P. Peris-López, “A Survey of Wearable Biometric Recognition Systems”, ACM Computing Surveys, Vol. 49, No. 3, pp. 1–43, 2016. [2] A. H. Johnston, and G. M Weiss, “Smartwatch-based Biometric Gait Recognition”, in Proceedings of the 7th IEEE International Conference on Biometrics Theory, Applications and Systems (BTAS), 2015. [3] S. J. Kang, S. Y. Lee, H. I. Cho, and H. Park, “ECG Authentication System Design based on Signal Analysis in Mobile and Wearable Devices”, IEEE Signal Process. Lett., Vol. 23, pp. 805–808, 2016. [4] G. Peng, G. Zhou, D. T. Nguyen, X. Qi, Q. Yang, and S. Wang, “Continuous Authentication with Touch Behavioral Biometrics and Voice on Wearable Glasses”, IEEE Trans. Hum.–Mach. Syst. Vol. 47, pp. 404–416, 2017. [5] J. Li, Y. Liu, Z. Nie, W. Qin, Z. Pang, and L.Wang, “An Approach to Biometric Verification Based on Human Body Communication in Wearable Devices”, Sensors, Vol. 17, pp. 1–25, 2017. [6] D. Maltoni, D. Maio, A.J. Jain, and S. Prabhakar, “Handbook of Fingerprint Recognition”, Springer-Verlag, 2nd Edition, 2009. [7] Fingerprint Verification Competition 2002: http://bias.csr.unibo.it/fvc2002/ [8] J. Arcenegui, R. Arjona, and I. Baturone, “Demonstrator of a Fingerprint Recognition Algorithm into a Low-Power Microcontroller”, Proceedings of the IEEE International Conference
on Design and Architectures for Signal and Image Processing (DASIP), 2017. [9] R. Arjona, M. A. Prada-Delgado, J. Arcenegui, and I. Baturone, “A PUF- and Biometric-based Lightweight Hardware Solution to Increase Security at Sensor Nodes”, Sensors, Vol. 18(8), 2429, pp. 1- 25, 2018. [10] S. Yang, K. Sakiyama, and I. M. Verbauwhede, “Efficient and Secure Fingerprint Verification for Embedded Devices”, EURASIP J. Adv. Signal Process. pp. 1–11, 2006. [11] M. Fons, F. Fons, and E. Cantó, “FPGA-based Personal Authentication using Fingerprints”, J. Signal Process. Syst., Vol. 66, pp. 153–189, 2012. [12] G. Chao, S. Lee, H. Lai, and S. Horng, “Embedded Fingerprint Verification System”, in Proceedings of the 11th IEEE International Conference on Parallel and Distributed Systems (ICPADS), pp. 1–5, 2005. [13] M. Fons, F. Fons, and E. Cantó, “Fingerprint Image Processing Acceleration through Run-Time Reconfigurable Hardware”, IEEE Trans. Circuits Syst. II Express Briefs, Vol. 57, pp. 991–995, 2010. [14] K. C. Chan, Y. S. Moon, and P. S. Cheng, “Fast Fingerprint Verification using Subregions of Fingerprint Images”, IEEE Trans. Circuits Syst. Video Technol., Vol. 14, pp. 95–101, 2004. [15] M. Barrenechea, J. Altuna, and M. San Miguel, “A low-cost FPGA- based Embedded Fingerprint Verification and Matching System”, in Proceedings of the 5th Workshop on Intelligent Solutions in Embedded Systems (WISES), pp. 1–10, 2007. [16] M. A. Oliveira, and N. J. Leite, “A Multiscale Directional Operator and Morphological Tools for Reconnecting Broken Ridges in Fingerprint Images”, Pattern Recogn., Vol. 41, pp. 367–377, 2008. [17] K. Karu, and A. K. Jain, “Fingerprint classication”, Pattern Recognition, Vol. 29 , pp. 389–404, 1996. [18] Moore-neighbor tracing: http://www.imageprocessingplace.com/downloads_V3/root_downloa ds/tutorials/contour_tracing_Abeer_George_Ghuneim/moore.html [19] Texas Instruments CC2650: http://www.ti.com/product/CC2650 [20] Fingerprint sensor FPC1011F3: https://biometrics.mainguet.org/types/fingerprint/product/FPC/FPC_1 011F3_flyer.pdf [21] ARM cortex-M3 documentation: https://developer.arm.com/products/processors/cortex-m/cortex-m3