賀東芹 胡世長 位磊


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