當今世界,隨著科技的不斷進步,生物識別技術已經成為了安全和身份驗證領域的熱門話題之一。如:人臉識別,指紋識別,虹膜比對,掌紋識別等。其中,掌紋識別技術作為一種生物特征識別方法,因其高度精準和高度安全性而備受關注。在這一背景下,越來越多的應用領域開始采用掌紋識別技術,包括金融、安全、物流和智能門禁等。本文將介紹如何在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的優勢:
較低的采集設備造價:與虹膜掃描儀或DNA采集設備相比,掌紋的采集設備成本更低,更易于部署。
相對于簽名和步態等行為特征的優勢:
不受習慣的影響:掌紋識別不受個體行為習慣的影響,不會因人們的簽名或步態習慣而變化。
特征穩定:掌紋特征不會隨著時間改變,從而提高了長期識別的準確性。
掌紋識別的基本方法:
數據庫創建通過采集注冊樣本,進行預處理、特征提取工作,之后形成數據庫
特征庫檢索通過采集待測試的樣本,在預處理和提取特征之后與掌紋數據庫中的數據進行匹配,得到該待測樣本的類別。
掌紋特征提取方法:
「掌紋特征提取方法主要分為四大類,分別為基于結構的方法、基于統計的方法、基于子空間的方法以及基于編碼的方法?!?/strong>
基于結構的方法主要是利用掌紋中主線和褶皺的方向和位置信息實現掌紋識別的方法,此類方法最為直觀。但是無論是哪一種邊緣檢測算子都無法提取出所有的紋線,所以此類方法實用性很差,已經被人們漸漸放棄。
基于統計的方法主要是利用統計特征,例如均值、方差等組成一組用來描述掌紋圖像的特征向量,可以根據是否分塊這一特性分為局部統計變量方法和全局統計量方法?;诰植拷y計量的方法通過將圖像分成若干小塊,分別統計每個小塊的統計信息,然后將這些統計信息組合表示為整個掌紋的統計特征向量,如采用傅里葉變換、小波變換等方式獲得掌紋圖像的每個分塊統計信息并進行識別。
基于子空間的方法是將原始掌紋圖像看做普通的圖片模式,將圖片對應的高維矩陣通過投影映射運算轉化為低維向量或矩陣。根據投影變換的實現方式,分為線性子空間法和非線性子空間法。常用的子空間特征提取方法有主成分分析法 (PCA),FisherPalm 方法,BDPCA (Bi-directional PCA) 等。
基于編碼的方法是將掌紋圖像看作紋理圖像,根據某些規則對紋理圖像進行編碼。Zhang 等提出了一種名為 PalmCode 的編碼方法,該方法首先采用 2DGabor 對圖像進行濾波處理,然后根據濾波結果的實部和虛部的正負來進行編碼。Kong 等提出使用六個方向的 Gabor 濾波器對掌紋圖像濾波,并對幅值最小的方向編碼,稱為競爭編碼 (Competitive code)。由于競爭編碼考察了掌紋圖像的方向信息,對光照不敏感,因此識別精度很高。
EDCC算法
「EDCC算法:它是一個高效、準確的掌紋識別算法?!?/strong>
掌紋充滿了線條和紋理特征,具備豐富的方向信息。因此,基于方向編碼被認為是最有效的掌紋特征提取方法。而競爭編碼是辨識度極高的編碼方法之一,它使用不同方向的濾波器與掌紋圖像進行卷積,之后根據一定的編碼規則對掌紋圖像進行編碼。
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$sudoapt-getupdate rice@rice:~/edcc$sudoapt-getinstallbuild-essential rice@rice:~/edcc$sudoapt-getinstallcmakegitlibgtk2.0-devpkg-configlibavcodec-devlibavformat-devlibswscale-dev rice@rice:~/edcc$sudoapt-getinstallpython-devpython-numpylibtbb2libtbb-devlibjpeg-devlibpng-devlibtiff-devlibjasper-devlibdc1394-22-dev
下載安裝OpenCV,下載鏈接:https://github.com/opencv/opencv/archive/4.5.0.zip
編譯OpenCV
執行cmake指令,生成makefile:
rice@rice:~/edcc$cdopencv-4.5.0/ rice@rice:~/edcc/opencv-4.5.0$mkdir-pbuild&&cdbuild rice@rice:~/edcc/opencv-4.5.0/build$cmake-DCMAKE_INSTALL_PREFIX=/usr/local-DCMAKE_BUILD_TYPE=Release-DOPENCV_GENERATE_PKGCONFIG=ON-DOPENCV_ENABLE_NONFREE=True..
指定make構建工程:
rice@rice:~/edcc/opencv-4.5.0/build$sudomake-j6
安裝OpenCV
rice@rice:~/edcc/opencv-4.5.0/build$sudomakeinstall
環境配置
修改etc/bash.bashrc
rice@rice:~/edcc/opencv-4.5.0/build$sudogedit/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$exportPKG_CONFIG_PATH
更新環境配置
sudoupdatedb source/etc/bash.bashrc
檢查OpenCV安裝情況
rice@rice:~/edcc/opencv-4.5.0/build$pkg-config--modversionopencv4#查看版本號 rice@rice:~/edcc/opencv-4.5.0/build$pkg-config--libsopencv4#查看libs庫
環境搭建
下載源碼,EDCC算法的代碼托管在github上,鏈接:https://github.com/Leosocy/EDCC-Palmprint-Recognition.git,我們通過git克隆下來:
rice@rice:~/edcc$gitclonehttps://github.com/Leosocy/EDCC-Palmprint-Recognition.git Cloninginto'EDCC-Palmprint-Recognition'... remote:Enumeratingobjects:1188,done. remote:Countingobjects:100%(44/44),done. remote:Compressingobjects:100%(39/39),done. remote:Total1188(delta6),reused23(delta4),pack-reused1144 Receivingobjects:100%(1188/1188),193.15KiB|78.00KiB/s,done. Resolvingdeltas:100%(556/556),done. rice@rice:~/edcc$
創建構建目錄,好處:構建過程的文件放在統一的目錄下:
rice@rice:~/edcc$cdEDCC-Palmprint-Recognition rice@rice:~/edcc/EDCC-Palmprint-Recognition$mkdir-pbuild&&cdbuild rice@rice:~/edcc/EDCC-Palmprint-Recognition/build$
構建EDCC算法代碼
rice@rice:~/edcc/EDCC-Palmprint-Recognition/build$cmake.. rice@rice:~/edcc/EDCC-Palmprint-Recognition/build$sudomakeinstall
安裝EDCC python 的包
rice@rice:~/edcc/EDCC-Palmprint-Recognition$cdpypackage rice@rice:~/edcc/EDCC-Palmprint-Recognition/pypackage$sudopython3setup.pyinstall
以上步驟就把EDCC的算法環境搭建完成
EDCC算法驗證
下載測試用的掌紋圖片,EDCC算法開源庫提供下載腳本,用于我們驗證功能。
rice@rice:~/edcc/EDCC-Palmprint-Recognition/$cdpalmprint_data rice@rice:~/edcc/EDCC-Palmprint-Recognition/palmprint_data$./download.sh
EDCC提供了三種實例:C代碼實例,C++代碼實例,python代碼實例。我們驗證功能,采用EDCC的python代碼實例。
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$python3example.py
總結
EDCC這個開源庫的開源協議為:MIT,所以使用起來不用當心。
EDCC的原理,其作者也提供了詳細的說明:https://blog.leosocy.top/posts/4354/
在youyeetoo部署AI能力,無疑是一個不錯的選擇。
審核編輯 黃宇
-
主板
+關注
關注
53文章
1837瀏覽量
70485 -
開源
+關注
關注
3文章
3251瀏覽量
42402 -
X86
+關注
關注
5文章
293瀏覽量
43401 -
掌紋識別
+關注
關注
0文章
16瀏覽量
10880
發布評論請先 登錄
相關推薦
評論