当今世界,随着科技的不断进步,生物识别技术已经成为了安全和身份验证领域的热门话题之一。如:人脸识别,指纹识别,虹膜比对,掌纹识别等。其中,掌纹识别技术作为一种生物特征识别方法,因其高度精准和高度安全性而备受关注。在这一背景下,越来越多的应用领域开始采用掌纹识别技术,包括金融、安全、物流和智能门禁等。本文将介绍如何在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触摸屏。
EDCC-Palmprint-Recognition开源库链接:https://github.com/Leosocy/EDCC-Palmprint-Recognition
掌纹识别概念
掌纹识别优势
「掌纹识别技术相对于其他生物特征识别方法具有独特的优势,使其成为广泛采用的生物特征认证方式。以下是一些与指纹、人脸、虹膜、DNA、签名以及步态等其他生物特征识别技术相比的优势:」
- 更大的识别面积:掌纹的识别面积比指纹更大,包含的信息更丰富,这可以提高准确性。
- 更不易受损:掌纹相对稳定,不容易受损或受外界因素的影响,具有长期稳定性。
- 较低的图像分辨率要求:相对较低的图像分辨率要求意味着采集设备的造价更低,相对经济。
- 不受外部因素的影响:掌纹不受眼镜、表情、妆容等因素的影响,其稳定性更高。
- 用户友好:用户接受度较高,因为掌纹的采集方式通常更加友好,无需特殊的准备或配合。
- 较低的采集设备造价:与虹膜扫描仪或DNA采集设备相比,掌纹的采集设备成本更低,更易于部署。
- 不受习惯的影响:掌纹识别不受个体行为习惯的影响,不会因人们的签名或步态习惯而变化。
- 特征稳定:掌纹特征不会随着时间改变,从而提高了长期识别的准确性。
掌纹识别的基本方法:
掌纹特征提取方法:
「掌纹特征提取方法主要分为四大类,分别为基于结构的方法、基于统计的方法、基于子空间的方法以及基于编码的方法。」
EDCC算法
「EDCC算法:它是一个高效、准确的掌纹识别算法。」
掌纹充满了线条和纹理特征,具备丰富的方向信息。因此,基于方向编码被认为是最有效的掌纹特征提取方法。而竞争编码是辨识度极高的编码方法之一,它使用不同方向的滤波器与掌纹图像进行卷积,之后根据一定的编码规则对掌纹图像进行编码。
EDCC算法有以下关键点:
- 通过图像增强算子处理原始掌纹图像,使得纹线更加突出,提取的方向更加准确。
- 使用一组方向不同的 2DGabor 小波滤波器对图像进行滤波。
- 选择滤波响应值最大和次大的方向作为该点所在纹线的主要方向和次要方向,进而进行编码。
EDCC部署
准备工作
- youyeetoo X1开发板需要安装ubuntu系统,ubuntu安装过程可以参考文章:
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

- 执行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 ..
- 指定make构建工程:
rice@rice:~/edcc/opencv-4.5.0/build$ sudo make -j6
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
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库

环境搭建
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$
rice@rice:~/edcc/EDCC-Palmprint-Recognition/build$ cmake ..
rice@rice:~/edcc/EDCC-Palmprint-Recognition/build$ sudo make install
rice@rice:~/edcc/EDCC-Palmprint-Recognition$ cd pypackage
rice@rice:~/edcc/EDCC-Palmprint-Recognition/pypackage$ sudo python3 setup.py install
EDCC算法验证
rice@rice:~/edcc/EDCC-Palmprint-Recognition/$ cd palmprint_data
rice@rice:~/edcc/EDCC-Palmprint-Recognition/palmprint_data$ ./download.sh
- python代码实例中比对的图片是a_01.bmp和b_01.bmp
- 比对的两张图片如下:

- 执行命令验证,两张掌纹图片的比对得分为:0.08799048751486326
rice@rice:~/edcc/EDCC-Palmprint-Recognition/$ cd ./examples/py_example
rice@rice:~/edcc/EDCC-Palmprint-Recognition/examples/py_example$ python3 example.py
