呂云飛,馮舒揚(yáng),蘭德鑫,劉成宇,戚諾凡
(哈爾濱理工大學(xué) 自動化學(xué)院,黑龍江哈爾濱,150080)
門禁系統(tǒng)存在的意義允許符合條件的人通過,禁止不符合條件的人進(jìn)入宿舍。如今大多數(shù)高校的宿舍并沒有建立真正意義上的門禁系統(tǒng),都是由管理人員守在宿舍門口,這種方式過于依賴管理員負(fù)責(zé)認(rèn)真的心理和精力,且并不可靠,只有來往的人特征明顯不同于公寓內(nèi)人員時,才能辨別出來。隨著科技的發(fā)展,信息識別技術(shù)種類越來越多,技術(shù)越來越成熟,對來往人員做身份信息識別,依靠人們的生理特征數(shù)據(jù)辨別是否符合通過門禁的條件,例如依靠人臉識別技術(shù)可以大大提高門禁系統(tǒng)的安全可靠性,同時減少人力資源消耗,更好地保障宿舍內(nèi)同學(xué)的人身和財產(chǎn)安全,也為宿舍管理人員提供了很大的便利。
近兩年國內(nèi)外的疫情形勢嚴(yán)峻,疫情防控已經(jīng)成為了公共場所日常管理的重點(diǎn)工作。大學(xué)校園內(nèi)人員流動密集、老師、同學(xué)和工作人員接觸頻繁,一旦發(fā)生病毒感染,就容易出現(xiàn)疫情的大面積擴(kuò)散。體溫是新冠肺炎篩查的重要指標(biāo)之一,但是平時學(xué)校并不能及時掌握學(xué)生的體溫狀況,只能通過學(xué)生自查,自覺上報的方式檢查體溫,校園中也很少設(shè)置體溫測量裝置,一些高校會在食堂、教學(xué)樓等學(xué)生來往密集的地方設(shè)置溫度檢測裝置,即使這樣,學(xué)校對學(xué)生進(jìn)行體溫監(jiān)測的覆蓋面積也并不全面,宿舍是同學(xué)們每天必經(jīng)的場所,而每一位同學(xué)進(jìn)出宿舍的時候都會經(jīng)過門禁,所以在門禁系統(tǒng)處增加測溫裝置可以實(shí)現(xiàn)對每一位同學(xué)進(jìn)行體溫監(jiān)測,及時掌握進(jìn)入宿舍的同學(xué)的溫度狀況,為學(xué)校疫情防控加上一把有力的“門鎖”。
單片機(jī)作為一種具有強(qiáng)大的數(shù)據(jù)存儲和指令發(fā)布能力的微型的計算機(jī)處理系統(tǒng),隨著單片機(jī)技術(shù)的發(fā)展,單片機(jī)的功能逐漸強(qiáng)大。在宿舍安全未能實(shí)現(xiàn)智能化、信息化的今天,可以將單片機(jī)的使用投入到宿舍安全管理體系中,利用單片機(jī)同時實(shí)現(xiàn)采集、分析、處理溫度和身份信息數(shù)據(jù),既可以提高門禁系統(tǒng)信息識別的可信程度,又可以讓建設(shè)科技校園更進(jìn)一步,具有提高宿舍管理的便捷程度和門禁的可靠性,為宿舍內(nèi)人員提供更好的安全保障的重大意義。
本文設(shè)計的系統(tǒng)以單片機(jī)為控制器,驅(qū)動圖像采集模塊,溫度采集模塊,信號燈模塊和顯示模塊,由上位機(jī)完成人臉識別和用戶界面設(shè)計,攝像頭和溫度傳感器分別負(fù)責(zé)采集包含人臉信息的圖像和體溫,單片機(jī)對采集到的數(shù)據(jù)進(jìn)行分析和處理,將處理好的數(shù)據(jù)顯示在顯示模塊并傳遞給上位機(jī),數(shù)據(jù)經(jīng)過上位機(jī)解析顯示在用戶界面,系統(tǒng)對圖像數(shù)據(jù)進(jìn)行人臉檢測和識別,將檢測結(jié)果返回給單片機(jī),單片機(jī)綜合溫度檢測結(jié)果和人臉識別結(jié)果,如果符合條件,則允許通過,不符合條件則給出相應(yīng)提示。系統(tǒng)結(jié)構(gòu)框圖如圖1 所示。
圖1 系統(tǒng)結(jié)構(gòu)框圖
在本次設(shè)計中,單片機(jī)需要驅(qū)動的設(shè)備有攝像頭、顯示屏和紅外溫度傳感器,分別使用SCCB 協(xié)議、SPI 協(xié)議和I2C 協(xié)議控制設(shè)備,除了控制外設(shè),單片機(jī)還需要從讀取設(shè)備中的和數(shù)據(jù)進(jìn)行分析處理,并與上位機(jī)建立通訊渠道。單片機(jī)從紅外溫度傳感器中讀取到數(shù)據(jù)之后進(jìn)行數(shù)據(jù)處理,通過串口將數(shù)據(jù)發(fā)送到上位機(jī),顯示在用戶界面上,從攝像機(jī)模塊讀取數(shù)據(jù)之后直接發(fā)送給上位機(jī),由Qt 平臺進(jìn)行數(shù)據(jù)解析,同時單片機(jī)對讀取到的數(shù)據(jù)進(jìn)行分析處理,將攝像機(jī)捕獲的畫面復(fù)原,顯示在LCD 上。最后,單片機(jī)需要根據(jù)溫度數(shù)據(jù)比較結(jié)果和上位機(jī)反饋的人臉識別結(jié)果控制警示燈的狀態(tài),提示工作人員。系統(tǒng)硬件執(zhí)行流程圖如圖2 所示。
圖2 硬件執(zhí)行流程圖
2.2.1 單片機(jī)的性能STM32 單片機(jī)采用了具有哈佛結(jié)構(gòu)的ARM Cortex-M3系列的CPU,單片機(jī)的片上資源非常豐富,配備了 FLASH存儲器、靜態(tài)隨機(jī)存取存儲器,多個基本定時器和通用定時器,DMA 控制器。在通訊方面,單片機(jī)支持SPI 通訊、I2C 通訊和串口通訊,內(nèi)置三個SPI 通訊接口,2 個I2C 通訊接口和5 個串口通訊接口,單片機(jī)兼容2.0V ~3.6V 的電源供電和I/O 口的供電電壓,內(nèi)嵌多種頻率的晶振,可用于中央處理器的鎖相環(huán)和實(shí)時時鐘,芯片的最高工作頻率可達(dá)72MHz。
2.2.2 單片機(jī)的引腳
STM32 單片機(jī)共有144 個引腳,其中包括11 個3.3V的VDD 供電引腳,11 個GND 接地信號線,112 個I/O 口PA[15:0] ~ PG[15:0],這些I/O 口中,多數(shù)具有復(fù)用功能,可用作普通I/O 口驅(qū)動自己的外設(shè)。STM32 單片機(jī)的每個I/O口都具備7個控制寄存器,每個寄存器都需要32位數(shù)據(jù)控制,每一個端口的初始化都需要為其打開相應(yīng)的時鐘,配置相應(yīng)寄存器,選擇工作模式和工作速率,最后拉高端口電位。
圖像采集模塊使用了帶FIFO 存儲器的OV7725 鷹眼攝像頭,它的優(yōu)勢在于體積小,靈敏度高且工作電壓低,使用單片機(jī)驅(qū)動時只需要接3.3V 的供電電壓。攝像頭支持SCCB 總線通訊,可以輸出分辨率為小于等于640×480 的8 位影像數(shù)據(jù),每次輸出一幀,輸出的格式有很多種,有RGB、YUV 等,本設(shè)計中使用的輸出格式為RGB565。另外,攝像頭還支持多種自動控制和圖像質(zhì)量控制,可以調(diào)節(jié)圖像的輸出質(zhì)量。
溫度檢測部分采用MLX90614 測溫器,芯片根據(jù)Stefan-Boltzmann 定律進(jìn)行工作,即所有物體都會放射IR能量,并且該能量的強(qiáng)度與物體的溫度成正比。傳感器中的感應(yīng)器測量出目標(biāo)物體發(fā)射的紅外能量,經(jīng)過計算單元使用ADC 轉(zhuǎn)換為溫度值,傳感器在測量物體溫度時也會測量環(huán)境的溫度用來校準(zhǔn)溫度值,最后再把數(shù)據(jù)通過IIC 總線發(fā)送至單片機(jī)。
MLX90614 的工作電壓在3.6V ~5V 之間,可測量的物體溫度范圍是-70℃~382.2℃,可以適應(yīng)的環(huán)境溫度是-40℃~125℃,分辨率為0.02℃。測量物體的距離與傳感器視野范圍相關(guān),視野范圍越寬,測量距離越近,本次設(shè)計采用10cm 左右的測溫距離。
芯片共有四個外接引腳,VCC 是芯片的供電引腳,可接3.3V 和5V 電源,GND 為接地引腳,SCL 是I2C 總線的時鐘線,用來控制數(shù)據(jù)傳輸,SDA 為數(shù)據(jù)總線,可供通訊雙方傳遞數(shù)據(jù)信息。
系統(tǒng)軟件執(zhí)行流程圖如圖3 所示。
圖3 軟件執(zhí)行流程圖
人臉識別部分代碼編寫是在Qt creator 平臺上完成的,分為兩個功能模塊:人臉識別和人臉數(shù)據(jù)添加。人臉識別技術(shù)需要先采集包含人臉信息的圖像,從獲取的圖像中框選出人臉部分區(qū)域,之后提取出人臉的特征與庫中的數(shù)據(jù)做對比,最后輸出對比結(jié)果,從而達(dá)到識別的目的,人臉識別具有唯一性和不可復(fù)制性的特點(diǎn),非常適合應(yīng)用于身份鑒別。
攝像頭采用OV7725 鷹眼攝像頭,其引腳分為數(shù)據(jù)線、信號線和控制線三大類。驅(qū)動攝像頭需要拉低片選信號,通過控制線寫入寄存器,達(dá)到控制攝像頭輸出的目的,數(shù)據(jù)線有FIFO 寄存器連接,攝像頭輸出的數(shù)據(jù)會先保存在存儲器中,單片機(jī)通過讀取存儲器獲取數(shù)據(jù)。
OV7725 使用的控制總線是SCCB 總線,它與I2C 總線相似,有兩線也有三線,兩線默認(rèn)SIO_E 信號線為低電平,攝像頭上采用的是兩線制,也就是負(fù)責(zé)傳送數(shù)據(jù)的SIO_D(數(shù)據(jù)線)和提供時鐘源的SIO_C(時鐘線)。時鐘信號由單片機(jī)發(fā)出,高電平有效。啟動傳輸之后,時鐘引腳被拉低時數(shù)據(jù)開始傳輸,隨后信號線被拉高表示數(shù)據(jù)正在傳輸,在下一個數(shù)據(jù)開始傳送之前拉低引腳,如此反復(fù)指導(dǎo)全部數(shù)據(jù)被傳輸完畢。SIO_D 引腳的信號可雙向傳輸,這里被用來傳輸數(shù)據(jù)。其中,SCCB 總線時序圖如圖4 所示。
圖4 SCCB 總線時序圖
SCCB 總線的主要作用是寫寄存器,OV7725 共有172個寄存器,使用攝像頭模塊時需要先配置好寄存器才能使攝像頭的圖像傳感器正常工作,輸出畫質(zhì)較好的圖像,但是這些寄存器并不是都需要配置,很多寄存器可以采用默認(rèn)的值,寄存器初始化時只需要配置與視頻圖像流、采樣畫質(zhì)、輸出格式等有關(guān)的幾個比較重要的寄存器就可以了。SCCB寫寄存器的流程是先發(fā)送設(shè)備的ID 地址,再發(fā)送要配置的目的寄存器的地址,最后傳輸要寫入的數(shù)據(jù),如果是連續(xù)給寄存器寫地址,寫完一個寄存器后,寄存器地址會自動加1,配置OV7725 攝像頭寄存器時,采用了連續(xù)寫寄存器的方式,先寫入設(shè)備ID,再循環(huán)寫入寄存器數(shù)據(jù)。寄存器初始化完成之后,可以通過寫入對應(yīng)寄存器進(jìn)行色度、對比度、白平衡等功能設(shè)置,為配合顯示器,圖像窗口輸出要設(shè)置為QVGA 模式。OV7725 電路圖如圖5 所示。
圖5 OV7725 電路圖
在讀FIFO 存儲器中的數(shù)據(jù)時,單片機(jī)先向攝像頭發(fā)送允許寫入FIFO 的指令,等待場同步信號VSYNC 觸發(fā)中斷,表示寫入FIFO 完成,單片機(jī)再開始復(fù)位讀指針,復(fù)位結(jié)束之后讀取像素點(diǎn),每讀取一個像素點(diǎn),就要將讀數(shù)據(jù)時鐘拉低,讀取完成再拉高,以此類推按照從左往右,從上往下的順序讀取所有像素點(diǎn)。
系統(tǒng)測溫模塊采用MLX90614 紅外非接觸式溫度計,模塊支持PWM 和SMBus(系統(tǒng)管理總線)兩種輸出模式,默認(rèn)為SMBus 輸出,單片機(jī)可以使用I2C 總線來驅(qū)動MLX90614 模塊,模塊中有一個EEPROM 和一個RAM,EEPROM 可讀可寫入,RAM 只能讀取,前者用來控制模塊,設(shè)置模塊的工作模式,后者用來讀取處理好的溫度數(shù)據(jù)。MLX90614 的控制信號線只有時鐘線SCL 和數(shù)據(jù)線SDA,與上述攝像頭數(shù)據(jù)傳遞方式相同,時鐘線被拉低時開始傳送數(shù)據(jù),數(shù)據(jù)將在SCL 上升沿被主機(jī)讀取,每次按照先發(fā)送低八位,再發(fā)送高第八位的順序傳送一個字節(jié)的數(shù)據(jù),模塊每完成一個字節(jié)的數(shù)據(jù)傳送,就要向主機(jī)發(fā)送校驗(yàn)位數(shù)據(jù)表示發(fā)送完成,單片機(jī)讀取出來的數(shù)據(jù)是浮點(diǎn)型數(shù)據(jù),使用顯示器顯示或者向上位機(jī)發(fā)送時,需要先拆分?jǐn)?shù)據(jù),按數(shù)字位操作。溫度傳感器引腳時序圖如圖6 所示。MLX90614 電路圖如圖7 所示。
圖6 溫度傳感器引腳時序圖
圖7 MLX90614 電路圖
圖8 ILI9341 內(nèi)部結(jié)構(gòu)圖
本次設(shè)計使用的顯示屏是由ILI9341 驅(qū)動IC 驅(qū)動的TFT_LCD,支持SPI 總線控制,圖像分辨率是320×240,在完成顯示屏驅(qū)動時,只需要向ILI9341 控制器發(fā)送指令和讀寫數(shù)據(jù)即可。
ILI9341 驅(qū)動IC 主要由GRAM、LCD 驅(qū)動電路,電源、接口電路等組成,GRAM 被稱為幀存儲器,用來存儲將要被顯示在屏幕上的圖像的信息,被顯示在屏幕上的每一幀圖像都是被分割成一個一個的像素,使用18 位的數(shù)據(jù)來表示像素的顏色,然后將一幀畫面中包含的所有的數(shù)據(jù)存放在幀存儲器中等待被使用。驅(qū)動顯示屏之后需要向控制寄存器中寫入需要放置圖像的位置,之后芯片計算出每個像素的地址并寫入相應(yīng)的數(shù)據(jù),從而改變GRAM 存儲器的內(nèi)容,刷新顯示屏的顯示界面。
TFT-LCD 的常用控制指令包括讀取驅(qū)動器ID,幀存儲器掃描方向控制指令,設(shè)置顯示窗口像素格式控制指令,寫存儲器指令,讀存儲器指令以及初始化。顯示屏的初始化工作包括將LCD 復(fù)位,初始化寄存器和設(shè)置LCD 顯示方向,LCD 顯示方向是通過給LCD 重要參數(shù)結(jié)構(gòu)體中的參數(shù)賦值實(shí)現(xiàn)的,像素格式和窗口顯示可以通過配置寄存器改變,寫存儲器和都存儲器通過SPI 總線實(shí)現(xiàn)。寫入數(shù)據(jù)之前,需要先寫入0x2C 指令,使行寄存器和列寄存器自動復(fù)位,此時發(fā)送的數(shù)據(jù)會被寫入幀存儲器對應(yīng)的地址中。顯示屏刷新同樣需要先寫入0x2C 指令,再寫入數(shù)據(jù),數(shù)據(jù)是從設(shè)置窗口的起始地址開始寫入,先寫行,行地址自增到該行的終止地址,列地址會自動加1,數(shù)據(jù)再從下一行的起始地址開始寫入,如此循環(huán)直到將窗口顯示的所有數(shù)據(jù)寫入幀存儲器中。設(shè)置幀存儲器掃描方向時,先發(fā)送0x36 指令,再發(fā)送18位的設(shè)置參數(shù),其中2 ~7 位是有效位。
下位機(jī)操作主要由兩個按鍵完成,單片機(jī)復(fù)位后顯示屏被清屏,顯示為白色屏幕,當(dāng)按下兩個按鍵中的任意一個時,信息采集外設(shè)開始工作。
按下KEY_UP 鍵后,紅外溫度傳感器開始工作,測得的題為被顯示在屏幕上,并且屏幕上有提示文字,當(dāng)溫度符合要求時,屏幕上顯示The temperature is normal(溫度正常)字樣,同時,LED0 被點(diǎn)亮,若溫度不符合要求,屏幕上顯示Temperature abnormalities(溫度異常)字樣。如果用戶體溫檢測結(jié)果正常但還未進(jìn)行人臉識別的檢測,屏幕中會出現(xiàn)Press another key 的字樣提示用戶下一步操作。測溫模塊工作顯示如圖9 所示。
圖9 測溫模塊工作顯示
按下另一個按鍵之后攝像頭開始工作,攝像頭每讀取一個像素點(diǎn),就向LCD 存儲器中寫入數(shù)據(jù),單片機(jī)同時將數(shù)據(jù)發(fā)送給上位機(jī),當(dāng)上位機(jī)判斷人臉識別成功時,單片機(jī)接收到信號,屏幕上顯示Recognition success(識別成功)字樣,同時LED1 被點(diǎn)亮,若未接收到識別成功的信號,顯示屏上會顯示Identification failed!(識別失?。┑淖謽樱绻麅杀K燈都被點(diǎn)亮,屏幕上顯示Detection complete(檢測成功),表示用戶符合通過門禁的要求,兩秒之后兩盞燈都熄滅。如果第一次按下的按鍵是圖像采集的按鍵,人臉識別成功之后,LED1 被點(diǎn)亮,屏幕上顯示識別成功,并顯示按下另外一個按鍵的提示語,提示進(jìn)行溫度檢測,若溫度符合要求,LED0 被點(diǎn)亮,屏幕顯示提示語Detection complete,表示檢測完成,隨后經(jīng)過兩秒的延時,兩盞燈同時熄滅。人臉識別工作顯示如圖10 所示。
圖10 人臉識別工作顯示
本次設(shè)計綜合了單片機(jī)、傳感器、顯示屏和OpenCV的使用,完成了基于單片機(jī)的宿舍安全管理門禁系統(tǒng)的設(shè)計,設(shè)計使用STM32 單片機(jī)控制驅(qū)動硬件設(shè)備并且實(shí)現(xiàn)與上位機(jī)的通訊,單片機(jī)驅(qū)動攝像頭、溫度傳感器采集用戶信息,使用顯示屏展示信息采集結(jié)果,采集到的數(shù)據(jù)信息分別使用單片機(jī)和上位機(jī)識別程序進(jìn)行分析處理,實(shí)現(xiàn)了對用戶進(jìn)行測溫和人臉識別的功能。