??簡介
人臉識別是一種高安全性的生物識別技術,在安防、身份驗證等領域被廣泛應用。本文在《【EsDA應用】5分鐘快速實現(xiàn)圖像人臉檢測》的基礎上,使用M6G2C核心板,簡單介紹如何基于EsDA設計的人臉特征值提取節(jié)點和特征值比對節(jié)點,快速實現(xiàn)人臉特征值提取和比對識別。
前期準備
若是剛開始接觸EsDA,可先閱讀EsDA其他系列文章,從零開始搭建環(huán)境和掌握基本開發(fā)流程,已有基礎的可以跳過:
-
EsDAMPC-ZC1入門(一)——軟件安裝
-
EsDAMPC-ZC1入門(二)——LED控制
-
【EsDA應用】5分鐘快速實現(xiàn)攝像頭圖像采集
-
【EsDA應用】5分鐘快速實現(xiàn)圖像人臉檢測
1. 硬件準備
1.1 準備一個攝像頭,這里我們以OV7725攝像頭為例,搭配轉接板使用。
2. 其它準備
將人臉檢測和特征值提取相關的模型參數文件存放到SD卡中。
??節(jié)點介紹
這里我們需要使用到攝像頭、圖像格式轉換以及人臉檢測、特征值提取、特征值比對相關的AWFlow節(jié)點,包括在《【EsDA應用】5分鐘快速實現(xiàn)攝像頭圖像采集》中介紹的camera_video節(jié)點、camera配置節(jié)點、lcd_display節(jié)點,在《【EsDA應用】5分鐘快速實現(xiàn)圖像人臉檢測》中介紹的image_format_convert轉換節(jié)點、face_detection人臉檢測節(jié)點,以及本文介紹的用于人臉特征值提取的face_character_extract節(jié)點和用于特征值比對的face_character_compare節(jié)點。
1. face_character_extract節(jié)點face_character_extract是人臉的特征值提取節(jié)點,該節(jié)點對輸入的人臉圖像數據進行特征值提取,并輸出提取的特征值信息。后級節(jié)點可以將這個特征值進行存儲,也可以與已有的特征值信息進行比對和匹配識別。
1.1屬性

- 名稱:節(jié)點的名稱;
- 顯示名稱:節(jié)點在畫布中顯示的名稱;
- 模型和參數路徑:特征值提取相關的模型和參數文件的路徑。
-
image:需要進行特征值提取的人臉圖像數據緩沖區(qū),一般由face_detection檢測節(jié)點提供輸入,face_detection檢測到圖像中存在人臉時,才將數據輸入到這里進行特征值提取(通常這正是我們想要的)。
- character:人臉的特征值。人臉信息一般都會提取成一段特定大小的特征值,方便我們進行存儲(錄入)和比對(識別)。
2.1屬性
-
比對閾值:比對閾值是一個0.1~0.9范圍內的數字,數字越大,對特征值的匹配程度要求就越高,識別的準確度也越高;
-
character:待比對的人臉特征值,一般由face_character_extract節(jié)點提供特征值輸入;
-
character_target:比對的目標特征值集合,一般是由我們已經錄入/注冊的特征值文件/數據庫提供;
-
target_num:目標特征值集合的特征值數量。
2.3輸出
-
result:比對結果,如果輸入中的character與character_target中的某一個匹配成功的話,輸出1;都不匹配則輸出0;
-
id:匹配成功的話,輸出第一個匹配的特征值在特征值集合character_target中的序號,匹配失敗輸出-1。
??業(yè)務處理
本應用主要實現(xiàn)如下功能:
-
采集攝像頭圖像,并在LCD顯示屏上進行顯示(顯示可選);
-
將攝像頭輸出的原始數據進行格式轉換后,輸入到face_detection節(jié)點中進行人臉檢測;
-
將檢測結果輸入到face_character_extract節(jié)點提取特征值;
-
通過face_character_compare節(jié)點進行特征值比對識別;
-
注冊特征值,這里我們?yōu)榱朔奖阊菔荆皇呛唵蔚赝ㄟ^face_data_write節(jié)點將特征值保存到文件中;
-
通過GPIO輸入來控制特征值錄入。
具體實現(xiàn)如下:
1. 添加節(jié)點并連線
首先,我們添加流圖左上角的部分,主要完成圖像的輸入和人臉的檢測;左下部分我們簡單地通過一個IO輸入來控制是否將特征值進行注冊;然后,添加一個特征值提取節(jié)點;右下部分主要完成兩個功能,分別是特征值的注冊,以及特征值的比對識別。


2.2配置face_character_extract節(jié)點
使用人臉特征值提取節(jié)點需要將相關的模型文件存放到文件系統(tǒng)中,并在節(jié)點中指定模型存放的路徑,這里我們存放到SD卡中,并指定路徑。
2.3face_character_compare節(jié)點
face_character_compare節(jié)點我們只需要指定比對閾值即可,這里我們設置為0.7。
2.4face_data_write和face_data_read
這兩個節(jié)點是為了方便演示。face_data_write節(jié)點簡單地將特征值保存到文件,而face_data_read從文件中讀取特征值,我們指定特征值文件路徑即可。


2.6fscript節(jié)點
其余的五個節(jié)點均為fscript節(jié)點,分別用于控制本應用的邏輯以及輸出結果。demo流圖中對這些fscript進行了編號,它們的內容分別如下:2.6.1是否錄入人臉信息
這個節(jié)點判斷gpio_in輸入的IO電平狀態(tài),通過設置全局標志位來控制是否進行人臉錄入。這里我們設置當處于低電平狀態(tài)時,進行人臉識別;而在輸入高電平狀態(tài)時,錄入人臉信息。
if(msg.payload == 0) {
global.face_recognition = 1
global.face_register = 0
} else {
print("......錄入人臉信息中......")
global.face_register = 1
global.face_recognition = 0
}
2.6.2register_chk
register_chk判斷前面設置的標志,當不需要錄入人臉信息時(即IO處于低電平),通過aborted=1放棄向后面的節(jié)點傳遞數據;否則(此時IO處于高電平)設置一個命令給face_data_write節(jié)點。
if (global.face_register == 0) {
aborted = 1;
} else {
msg.register_cmd = "register";
}
2.6.3recognition_chk如果此時正在錄入人臉信息(IO處于高電平),則通過aborted放棄后面的特征值比對環(huán)節(jié)。
if (global.face_recognition == 0) {
aborted = 1;
}
2.6.4錄入人臉信息結果我們在face_data_write節(jié)點后面添加打印信息,當face_data_write成功將特征值錄入到文件中后,會告訴我們當前錄入的是第幾個人臉信息。
print("特征值注冊成功,當前是第 " + msg.id + "個");
2.6.5特征值比對結果打印特征值比對的結果,如果比對成功的話,打印出與之匹配的人臉I(yè)D。
print("特征值比對結果:" + msg.result);
if(msg.result == 1) {
print("特征值比對成功,匹配的人臉I(yè)D是:" + msg.id);
} else {
print("特征值比對失敗,請先注冊人臉信息");
}
3. 下載驗證因為M6G2C開發(fā)板是通過網口去下載流圖,打開AWFlow Designer后,AWFlow Designer可以自動發(fā)現(xiàn)網絡上的設備。選擇當前設備M6G2C,然后點擊下載運行即可。
3.1圖像采集顯示
流圖下載完成后,通過LCD可以看到,我們已經成功從攝像頭獲取圖像,并且成功在顯示屏上顯示。3.2人臉檢測、特征值提取比對
從打印信息中我們可以看到,坐標點已經被輸出出來了,所以人臉檢測功能是正常的。但是,一開始我們并沒有錄入任何人臉信息,因此特征值文件(即/flow/face_data.txt)并不存在,所以提示特征值比對失敗。
3.3特征值錄入
當我們將RX8接入3.3V后,系統(tǒng)就進入了錄入人臉信息的模式。此時我們可以通過攝像頭錄入人臉信息。
3.4特征值比對識別
特征值信息錄入完畢后,我們可以將RX8引腳置低,使系統(tǒng)回到特征值比對識別模式。現(xiàn)在,我們就可以和已經錄入的特征值集合比對成功了。而沒有錄入的人臉,依然無法通過識別。
4. 擴展應用
本應用中,當特征值比對完成后,只是簡單地輸出比對的結果,這樣我們可能感受不到它實際的用處:
print("特征值比對結果:" + msg.result);
if(msg.result == 1) {
print("特征值比對成功,匹配的人臉I(yè)D是:" + msg.id);
} else {
print("特征值比對失敗,請先注冊人臉信息");
}
4.1應用1
但是,如果我們簡單的改造一下,比如在識別成功后,發(fā)出一個高電平,或者一條指令,這樣,一個基于人臉識別的門禁系統(tǒng),是不是已經有了雛形了呢?
//以下內容僅供示例
print("特征值比對結果:" + msg.result);
if(msg.result == 1) {
set(flow.gpio_out_ctl_door, 1); // 讓控制門禁的IO輸出1
} else {
set(flow.warn_led, blinking); // 比對失敗,可以讓告警燈閃爍等等
}
4.2應用2又或者,當匹配到一個已經錄入系統(tǒng)中的人臉時,將特征值ID和當前時間記錄到數據庫中,一個基于人臉識別的考勤系統(tǒng),其核心功能是不是已經實現(xiàn)了呢?
print("特征值比對結果:" + msg.result);
if(msg.result == 1) {
var dt = date_time_create(); //獲取當前時間
var str = "ID:" + msg.id + " " + dt.year + "-" + dt.month + "-" + dt.day + " " + dt.hour + ":" + dt.minute + ":" + dt.second + "
"
print(str);
file_write_append("/flow/attendance_records.txt", str); //將ID和時間信息寫入到考勤記錄文件
} else {
print("Please try again"); //提示用戶失敗重試
}

-
致遠電子
+關注
關注
13文章
410瀏覽量
31555
原文標題:【EsDA應用】10分鐘快速實現(xiàn)人臉識別
文章出處:【微信號:ZLG_zhiyuan,微信公眾號:ZLG致遠電子】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
人臉識別技術的優(yōu)勢與劣勢
人臉識別技術的應用場景
EsDA,一站式嵌入式軟件

帶阻濾波器在人臉識別中的應用
人臉識別技術將應用在哪些領域
如何設計人臉識別的神經網絡
人臉檢測和人臉識別的區(qū)別是什么
人臉識別門禁方案:輕松實現(xiàn)刷臉開門、閘機及考勤管理

嵐圖發(fā)布“琥珀電池”,續(xù)航達900km,10分鐘充電即可滿足450km續(xù)航?

評論