賀東芹 胡世長 位磊
摘要:結(jié)合互聯(lián)網(wǎng)與人臉識別功能以及智能鎖應(yīng)用,對于學(xué)生寢室的安全防盜、考勤打卡都有極大的幫助。該系統(tǒng)分為面部采集、存儲,面部識別打卡、面部解鎖寢室門以及數(shù)據(jù)管理終端服務(wù)。學(xué)生通過人臉采集端實現(xiàn)考勤打卡功能,服務(wù)器識別人臉并且記錄學(xué)生身份以及當前時間,通過STM32單片機技術(shù)、繼電器以及電磁鎖實現(xiàn)面部解鎖寢室門的功能。
關(guān)鍵詞:STM32單片機、終端服務(wù)器、數(shù)據(jù)采集、人臉識別、繼電器、電磁鎖
通信作者: 位磊 stones2004@163.com
基金項目:文華學(xué)院大學(xué)生創(chuàng)新基金項目 (項目編號:J0200570118)
1 背景
人臉識別技術(shù)是生物特征識別領(lǐng)域的研究熱點之一, 近年來, 隨著模式識別和人工智能技術(shù)的發(fā)展, 該技術(shù)受到諸多學(xué)者的關(guān)注[1]。結(jié)合高校學(xué)生宿舍的安全管理,基于互聯(lián)網(wǎng)與單片機技術(shù)的面部識別與系統(tǒng)設(shè)計出一系列適用于大學(xué)寢室安全管理系統(tǒng)及其智能化的應(yīng)用。由面部采集存儲端、終端服務(wù)、 面部智能鎖及網(wǎng)絡(luò)通信等四大部分組成。
2 總體設(shè)計
本系統(tǒng)主要分為三個模塊,即面部數(shù)據(jù)采集存儲對比端、終端服務(wù)與網(wǎng)絡(luò)通信、面部智能鎖。
2.1 面部數(shù)據(jù)采集存儲對比端
面部識別系統(tǒng)采用Python語言作為編程語言[2],通過程序出編寫具有圖像采集系統(tǒng),接受紅外感應(yīng)發(fā)出的信號以及LED燈源模塊。
在設(shè)定的圖像窗口大小為92×112像素內(nèi),被拍攝者盡量讓自己的面部均勻的分布在窗口內(nèi)這樣才能降低人為因素造成的數(shù)據(jù)差,通過面部特征值記錄下被拍攝者的數(shù)據(jù)進行存檔方便下次查詢或者對比時提取數(shù)據(jù)文件。
2.2終端服務(wù)與網(wǎng)絡(luò)通信
通過網(wǎng)絡(luò)將被拍攝者的面部特征數(shù)據(jù)傳輸至終端服務(wù)器上,并存儲該數(shù)據(jù)[3]。
檢測時,采用PCA和LBP算法提取人臉圖像的特征[4],對比數(shù)據(jù)庫中特征值的大小來檢驗此人是否預(yù)先存儲了自己的面部信息或者是不是本人的情況。而數(shù)據(jù)庫中需要存儲學(xué)生的個人信息,以及各個時刻的考勤打卡記錄方便輔導(dǎo)員進行查詢或者統(tǒng)計工作。
該技術(shù)的難度較大,因為受到人體面部表情特征以及環(huán)境因素,受到光線的強弱,采集設(shè)備的像素度等因素。因此我們通過OPENMV的人臉檢測來進行識別,充分利用此模塊辨識度高,工作速度快的優(yōu)點。
指示燈設(shè)定四種狀態(tài):白色表示通電成功、紅色表示考勤打卡失敗或則查無此人、綠色表示考勤打卡成功、燈常滅表示處于待機狀態(tài)。
2.3面部智能鎖
在面部識別之后利用此模塊的其他IO口輸出當前信號的指令給繼電器,然后繼電器控制電磁鎖的開關(guān)。此人是該寢室成員就通過信號電平給予一個信號指令打開寢室門鎖。若不是則不打開寢室門鎖。
3 硬件設(shè)計
該系統(tǒng)電路原理圖如圖2所示,面部識別的運算速度快,工作的效率要求十分的高,要求能夠快速識別面部特征并且發(fā)出指令。對此我們采用OPENMV因為它搭載了STM32H743的32位單片機用此芯片作為處理器。
對于電磁鎖的需要用到12V的電源,因此通過電源模塊AD-DC模塊,將電源穩(wěn)定在12V[6]??刂评^電器的程序不太難,只需要對繼電器輸入一個初值高電平即可,當需要打開電磁鎖的時候就對繼電器輸入一個低電平信號。同時對于單片機的供電5V,我們通過DC-DC電源降壓模塊使得12V的電源降壓到5V之后對單片機供電。但是OPENMV的工作電壓為3.3V,我們需要對5V電壓繼續(xù)降壓,使得OPENMV能正常工作[5]。
4 ?軟件設(shè)計
在接通電源之后,整個系統(tǒng)完成初始化之后。開始有序的執(zhí)行一系列的工作,從最開始的拍攝人臉開始,存儲人臉照片至數(shù)據(jù)庫,服務(wù)器會根據(jù)學(xué)生的照片導(dǎo)入學(xué)生的基本信息進行存檔后續(xù)工作開展的快捷;用戶端就可以開始執(zhí)行余下的,考勤打卡,面部解鎖寢室門等一些列操作。
本系統(tǒng)采用python語言程序設(shè)計,主要由初始化程序,面部采集程序,采樣信號對比程序組成。
4.1初始化程序及面部采樣程序
import sensor, image, pyb
RED_LED_PIN = 1
BLUE_LED_PIN = 3
sensor.reset() # 使傳感器初始化
sensor.set_pixformat(sensor.GRAYSCALE) # 設(shè)置相片格式為灰度圖
sensor.set_framesize(sensor.B128X128) # 設(shè)置分辨率大小128*128
sensor.set_windowing((92,112)) ? #設(shè)置圖像窗口大小為92*112
sensor.skip_frames(10) # 使新的設(shè)置生效
sensor.skip_frames(time = 2000)
num = 1 #設(shè)置被拍攝者序號,第一個人的圖片保存到s1文件夾,第二個人的圖片保存到s2文件夾,以此類推。每次更換拍攝者時,修改num值。
n = 10 #設(shè)置每個人拍照圖片數(shù)量。
#連續(xù)拍攝n張照片,每間隔3s拍攝一次。
while(n): #循環(huán)次數(shù)為設(shè)置的照片數(shù)量
#紅燈亮
pyb.LED(RED_LED_PIN).on()
sensor.skip_frames(time = 3000) # 等待3s
#紅燈滅,藍燈亮
pyb.LED(RED_LED_PIN).off() pyb.LED(BLUE_LED_PIN).on()
print(n) sensor.snapshot().save("faceid/s%s/%s.pgm" % (num, n) ) # 將照片保存到SD卡文件夾中
n -= 1 ?#每次拍攝一張照片就把設(shè)置照片的數(shù)量減1
pyb.LED(BLUE_LED_PIN).off()
print("Done! Reset the camera to see the saved image.")
4.2信號采樣對比程序
import sensor, time, image, pyb
from pyb import Pin
RED_LED_PIN = 1
GREEN_LED_PIN = 2
BLUE_LED_PIN = 3
sensor.reset() # 使傳感器初始化
sensor.set_pixformat(sensor.GRAYSCALE) # 設(shè)置相片格式為灰度圖
sensor.set_framesize(sensor.B128X128) # 設(shè)置分辨率大小為128*128
sensor.set_windowing((92,112)) ? ? ? ?#設(shè)置圖像窗口大小為92*112
sensor.skip_frames(10) # 使新的設(shè)置生效
sensor.skip_frames(time = 5000) #等待5s
p_in = Pin('P1',Pin.IN,Pin.PULL_DOWN) ? #設(shè)置P1口為接受信號端
preson = p_in.value()
#SUB = "s1"
NUM_SUBJECTS = 6 #圖像庫中不同人數(shù),一共6人
NUM_SUBJECTS_IMGS = 10 #每人有10張樣本圖片
print("檢測到電平:%s"%p_in.value()) ?#當紅外人體傳感器檢測到人體時,就發(fā)送一個高電平給攝像頭,使它開始工作
while(p_in.value():
# 拍攝當前人臉。
preson_flat = False
img = sensor.snapshot()
d0 = img.find_lbp((0, 0, img.width(), img.height()))#對比照片的寬度與長度
for s in range(1, NUM_SUBJECTS+1):
dist = 0
for i in range(2, NUM_SUBJECTS_IMGS+1):
img = image.Image("faceid/s%d/%d.pgm"%(s, i))
d1 = img.find_lbp((0, 0, img.width(), img.height())) ?#調(diào)用find_lbp函數(shù)來提取當前的人臉特征值
#d1為第s文件夾中的第i張圖片的lbp特征
dist += image.match_descriptor(d0, d1)#計算d0 d1即樣本圖像與被檢測人臉的特征差異度。
#print("Average dist for subject %d: %d"%(s, dist/NUM_SUBJECTS_IMGS))
print("人臉檢測得分:%s"%(dist/NUM_SUBJECTS_IMGS))
if dist/NUM_SUBJECTS_IMGS < 7500:
preson_flat = True ? #如果特征值<7500那么此人存在于圖庫中,檢測為合格
break
else:
preson_flat = False #特征值>7500,則檢測為不合格
#print("檢測到第%s個人"%num)
if preson_flat:
print("檢測到sd卡中的人臉")
pyb.LED(GREEN_LED_PIN).on() ? ? ? ?#如何檢測到SD卡中的人臉,就綠燈顯示5S,表示合格
sensor.skip_frames(time = 5000)
pyb.LED(GREEN_LED_PIN).off()
else:
print("沒有檢測到人臉")
pyb.LED(RED_LED_PIN).on() ?#如果沒有檢測到SD卡中的人臉,就紅燈顯示5S,表示不合格
sensor.skip_frames(time = 5000)
pyb.LED(RED_LED_PIN).off()
#print(num) # num為當前最匹配的人的編號。
5 仿真或?qū)嶒灲Y(jié)果
人臉拍攝并存檔,完成定義的每個人十張的照片的拍攝,如圖5所示。對比當前的人臉以及結(jié)果顯示,自定義人臉對比比值在7500以下的為正確,存在此人并且亮綠燈。反之則不存在亮紅燈,如圖6所示。
6 總結(jié)
本文采用了面部識別技術(shù)以及單片機應(yīng)用、網(wǎng)絡(luò)通信等技術(shù)。通過對模塊和網(wǎng)絡(luò)的結(jié)合,實現(xiàn)了互聯(lián)網(wǎng)的應(yīng)用。對于在校大學(xué)生的寢室管理設(shè)計出有效合理的系統(tǒng)。通過面部采集,人臉識別,面部解鎖以及網(wǎng)絡(luò)通信等功能相結(jié)合,對于在校大學(xué)生的寢室安全以及管理工作有了很大的提升。
參考文獻
[1] 霍焰焰.基于PCA和LBP改進算法的人臉識別研究[D].哈爾濱:哈爾濱理工大學(xué), 2015.
[2] Luciano Ramalho .流暢的Python[M].,2017.5.15
[3] 武奇生、王秋才、閻茂德.計算機網(wǎng)絡(luò)與通信[M]. 2009年1月1日
[4] 楊艷 郭振鐸 徐慶偉.基于PCA和LBP的自適應(yīng)加權(quán)融合人臉識別算法[J].中原工學(xué)院學(xué)報.2018,29(06).75-80
[5]康華光.電子技術(shù)基礎(chǔ)[M]. 模擬部分,2013(6):481-488.
[6] 郭向星 田斐.智能人臉識別門鎖控制系統(tǒng)設(shè)計[J].電子技術(shù)與軟件工程.2019,(17),115-116