如何在X86架构的嵌入式系统上部署掌纹识别算法

电子说

1.2w人已加入

描述

当今世界,随着科技的不断进步,生物识别技术已经成为了安全和身份验证领域的热门话题之一。如:人脸识别,指纹识别,虹膜比对,掌纹识别等。其中,掌纹识别技术作为一种生物特征识别方法,因其高度精准和高度安全性而备受关注。在这一背景下,越来越多的应用领域开始采用掌纹识别技术,包括金融、安全、物流和智能门禁等。本文将介绍如何在X86架构的嵌入式系统上部署一个开源的掌纹识别算法。

本文我们主要描述掌纹识别开源库:EDCC-Palmprint-Recognition,并且运行在风火轮科技的youyeetoo X1开发板(x86开发板)

youyeetoo X1 是一款由深圳风火轮科技推出的x86架构单板电脑(SBC),可运行全功能版的windows和Linux, 具备低成本,高性能的特点(11代Intel CPU N5105),它主要面向AIOT和自动控制 市场,尺寸只有手掌大(115 * 75mm),接口却非常丰富,内置了3路串口UART,2路HDMI,6路USB口、1路I2C、1路SPI、5路GPIO等 AIOT物联网常用的接口,还能接7寸MIPI触摸屏。

Linux

EDCC-Palmprint-Recognition开源库链接:https://github.com/Leosocy/EDCC-Palmprint-Recognition

Linux

掌纹识别概念

掌纹识别优势

「掌纹识别技术相对于其他生物特征识别方法具有独特的优势,使其成为广泛采用的生物特征认证方式。以下是一些与指纹、人脸、虹膜、DNA、签名以及步态等其他生物特征识别技术相比的优势:」

相对于指纹的优势:

更大的识别面积:掌纹的识别面积比指纹更大,包含的信息更丰富,这可以提高准确性。

更不易受损:掌纹相对稳定,不容易受损或受外界因素的影响,具有长期稳定性。

较低的图像分辨率要求:相对较低的图像分辨率要求意味着采集设备的造价更低,相对经济。

相对于人脸的优势:

不受外部因素的影响:掌纹不受眼镜、表情、妆容等因素的影响,其稳定性更高。

用户友好:用户接受度较高,因为掌纹的采集方式通常更加友好,无需特殊的准备或配合。

相对于虹膜和DNA的优势:

较低的采集设备造价:与虹膜扫描仪或DNA采集设备相比,掌纹的采集设备成本更低,更易于部署。

相对于签名和步态等行为特征的优势:

不受习惯的影响:掌纹识别不受个体行为习惯的影响,不会因人们的签名或步态习惯而变化。

特征稳定:掌纹特征不会随着时间改变,从而提高了长期识别的准确性。

掌纹识别的基本方法:

数据库创建通过采集注册样本,进行预处理、特征提取工作,之后形成数据库

特征库检索通过采集待测试的样本,在预处理和提取特征之后与掌纹数据库中的数据进行匹配,得到该待测样本的类别。

掌纹特征提取方法:

「掌纹特征提取方法主要分为四大类,分别为基于结构的方法、基于统计的方法、基于子空间的方法以及基于编码的方法。」

基于结构的方法主要是利用掌纹中主线和褶皱的方向和位置信息实现掌纹识别的方法,此类方法最为直观。但是无论是哪一种边缘检测算子都无法提取出所有的纹线,所以此类方法实用性很差,已经被人们渐渐放弃。

基于统计的方法主要是利用统计特征,例如均值、方差等组成一组用来描述掌纹图像的特征向量,可以根据是否分块这一特性分为局部统计变量方法和全局统计量方法。基于局部统计量的方法通过将图像分成若干小块,分别统计每个小块的统计信息,然后将这些统计信息组合表示为整个掌纹的统计特征向量,如采用傅里叶变换、小波变换等方式获得掌纹图像的每个分块统计信息并进行识别。

基于子空间的方法是将原始掌纹图像看做普通的图片模式,将图片对应的高维矩阵通过投影映射运算转化为低维向量或矩阵。根据投影变换的实现方式,分为线性子空间法和非线性子空间法。常用的子空间特征提取方法有主成分分析法 (PCA),FisherPalm 方法,BDPCA (Bi-directional PCA) 等。

基于编码的方法是将掌纹图像看作纹理图像,根据某些规则对纹理图像进行编码。Zhang 等提出了一种名为 PalmCode 的编码方法,该方法首先采用 2DGabor 对图像进行滤波处理,然后根据滤波结果的实部和虚部的正负来进行编码。Kong 等提出使用六个方向的 Gabor 滤波器对掌纹图像滤波,并对幅值最小的方向编码,称为竞争编码 (Competitive code)。由于竞争编码考察了掌纹图像的方向信息,对光照不敏感,因此识别精度很高。

EDCC算法

「EDCC算法:它是一个高效、准确的掌纹识别算法。」

掌纹充满了线条和纹理特征,具备丰富的方向信息。因此,基于方向编码被认为是最有效的掌纹特征提取方法。而竞争编码是辨识度极高的编码方法之一,它使用不同方向的滤波器与掌纹图像进行卷积,之后根据一定的编码规则对掌纹图像进行编码。

EDCC算法有以下关键点:

通过图像增强算子处理原始掌纹图像,使得纹线更加突出,提取的方向更加准确。

使用一组方向不同的 2DGabor 小波滤波器对图像进行滤波。

选择滤波响应值最大和次大的方向作为该点所在纹线的主要方向和次要方向,进而进行编码。

EDCC部署

准备工作

youyeetoo X1开发板需要安装ubuntu系统,ubuntu安装过程可以参考文章:<风火轮X86主板youyeetoo X1:部署MQTT Broker>

OpenCV安装

EDCC算法依赖OpenCV,支持版本为OpenCV 3.4或者OpenCV 4.5两个版本。

安装OpenCV依赖库:

 

rice@rice:~/edcc$ sudo apt-get update
rice@rice:~/edcc$ sudo apt-get install build-essential
rice@rice:~/edcc$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev 
rice@rice:~/edcc$ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

 

下载安装OpenCV

 

编译OpenCV

执行cmake指令,生成makefile:

 

rice@rice:~/edcc$ cd opencv-4.5.0/
rice@rice:~/edcc/opencv-4.5.0$ mkdir -p build && cd build
rice@rice:~/edcc/opencv-4.5.0/build$ cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_ENABLE_NONFREE=True ..

 

Linux

指定make构建工程:

 

rice@rice:~/edcc/opencv-4.5.0/build$ sudo make -j6

 

Linux

安装OpenCV

 

rice@rice:~/edcc/opencv-4.5.0/build$ sudo make install

 

环境配置

修改etc/bash.bashrc

 

rice@rice:~/edcc/opencv-4.5.0/build$ sudo gedit /etc/bash.bashrc

 

在文件末尾添加一下内容并保存

 

rice@rice:~/edcc/opencv-4.5.0/build$ PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
rice@rice:~/edcc/opencv-4.5.0/build$ export PKG_CONFIG_PATH

 

更新环境配置

 

sudo updatedb
source /etc/bash.bashrc

 

检查OpenCV安装情况

 

rice@rice:~/edcc/opencv-4.5.0/build$ pkg-config --modversion opencv4 #查看版本号
rice@rice:~/edcc/opencv-4.5.0/build$ pkg-config --libs opencv4 #查看libs库
Linux

 

环境搭建

下载源码,EDCC算法的代码托管在github上,链接:https://github.com/Leosocy/EDCC-Palmprint-Recognition.git,我们通过git克隆下来:

 

rice@rice:~/edcc$ git clone https://github.com/Leosocy/EDCC-Palmprint-Recognition.git
Cloning into 'EDCC-Palmprint-Recognition'...
remote: Enumerating objects: 1188, done.
remote: Counting objects: 100% (44/44), done.
remote: Compressing objects: 100% (39/39), done.
remote: Total 1188 (delta 6), reused 23 (delta 4), pack-reused 1144
Receiving objects: 100% (1188/1188), 193.15 KiB | 78.00 KiB/s, done.
Resolving deltas: 100% (556/556), done.
rice@rice:~/edcc$ 

 

创建构建目录,好处:构建过程的文件放在统一的目录下:

 

rice@rice:~/edcc$ cd EDCC-Palmprint-Recognition 
rice@rice:~/edcc/EDCC-Palmprint-Recognition$ mkdir -p build && cd build
rice@rice:~/edcc/EDCC-Palmprint-Recognition/build$ 

 

构建EDCC算法代码

 

rice@rice:~/edcc/EDCC-Palmprint-Recognition/build$ cmake ..
rice@rice:~/edcc/EDCC-Palmprint-Recognition/build$ sudo make install

 

Linux

安装EDCC python 的包

 

rice@rice:~/edcc/EDCC-Palmprint-Recognition$ cd pypackage
rice@rice:~/edcc/EDCC-Palmprint-Recognition/pypackage$ sudo python3 setup.py install

 

Linux

以上步骤就把EDCC的算法环境搭建完成

EDCC算法验证

下载测试用的掌纹图片,EDCC算法开源库提供下载脚本,用于我们验证功能。

 

rice@rice:~/edcc/EDCC-Palmprint-Recognition/$ cd palmprint_data
rice@rice:~/edcc/EDCC-Palmprint-Recognition/palmprint_data$ ./download.sh

 

Linux

EDCC提供了三种实例:C代码实例,C++代码实例,python代码实例。我们验证功能,采用EDCC的python代码实例。

python代码实例中比对的图片是a_01.bmp和b_01.bmp

Linux

比对的两张图片如下:

Linux

执行命令验证,两张掌纹图片的比对得分为:0.08799048751486326

 

rice@rice:~/edcc/EDCC-Palmprint-Recognition/$ cd ./examples/py_example
rice@rice:~/edcc/EDCC-Palmprint-Recognition/examples/py_example$ python3 example.py
Linux

 

总结

EDCC这个开源库的开源协议为:MIT,所以使用起来不用当心。

EDCC的原理,其作者也提供了详细的说明

在youyeetoo部署AI能力,无疑是一个不错的选择。

 

  审核编辑:汤梓红

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分