劉凱多,陳振宇,袁洪喜,李靜宜
(湖南科技大學,湖南湘潭,411100)
隨著人們生活節奏的加快,工作或學習的時長有增無減,而由其所處環境與自身的狀態所引發的問題卻常常被忽視。例如在過低溫度的室內學習,容易生病感冒;不良的光照環境對視力有著不可逆的影響,而長時間處于視覺疲勞狀態下學習或不正確的坐姿都更容易導致近視和含胸駝背甚至更為嚴重的脊椎問題。此外,研究表明在二氧化碳濃度較高的場合,學習效率會隨之降低[1]。但人體是無法本能判斷出室內二氧化碳濃度是否高于理論參考值,會對人的思考和注意力產生影響,從而決定是否需要開窗通風透氣。
基于上述問題,我們提出了一種基于機器視覺的學習環境及狀態檢測裝置,該裝置可以有效改善此類現狀對學習帶來的不良影響。
本作品通過物聯網技術與電子技術解決方案,形成一套針對工作學習環境與狀態進行檢測,并做出提醒和改善的智能家居設備。該裝置由學習環境監測和學習狀態監測兩大部分組成。實時監測環境溫濕度、光強、空氣質量、二氧化碳濃度等,將環境數據上傳至云端,在移動端對數據進行輸出整合,生成可視化的圖形,同時針對檢測到的不良環境狀況通過樹莓派搭載智能家居網關控制家電予以改善[2];通過攝像頭獲取用戶視頻圖像,監測學習狀態、坐姿與學習時長,并對視疲勞及不良坐姿等現象通過屏幕交互的方式進行提醒。

圖1 裝置整體架構
本作品的軟件程序分為學習環境監測和學習狀態監測兩個部分,數據獲取、數據處理、計算判斷和輸出執行共四個模塊。硬件主體采用“樹莓派–Arduino”架構設計[3],以機器視覺和模式識別結合的方法,對溫濕度、光強、空氣質量、二氧化碳濃度、坐姿好壞、視疲勞等進行檢測,并針對檢測的結果與用戶進行交互式提醒,智能聯動家電改良當前環境,形成一套科學、完整的智能家居系統。
采用“樹莓派–Arduino”架構設計,由Arduino UNO R3通過引腳端口連接DHT11溫濕度模塊、BH1750光照傳感器模塊、粉塵傳感器、VOC傳感器和MH–Z16二氧化碳氣體傳感器等傳感器模塊負責數據采集,通過ESP8266模塊將數據發送至云端。通過USB數據線連接樹莓派4b。由樹莓派4b負責視頻圖像采集與神經網絡學習,通過type–C接5V1A電源給樹莓派4b供電,通過HDMI轉micro–USB線連接顯示屏,直接連接CMOS攝像頭,在樹莓派4b中通過Arduino IDE及Geany進行代碼開發。在移動端對云端數據進行輸出整合處理,生成直觀簡潔的可視化圖形,分析測試者所處環境及自身情況,給出相關建議。
本部分軟件設計在Arduino IDE開發環境中完成編程,主要分為溫濕度檢測、光照強度檢測、PM2.5濃度檢測、TVOC與二氧化碳濃度檢測、ESP8266 WiFi模塊五個部分。通過主程序調用每一模塊所對應的子程序,即可完成學習環境所有指標的檢測以及檢測數據上傳云端的功能。其中溫濕度檢測部分是通過調用DHT.h庫,然后在loop()函數中使用dht.readTemperature ()與dht.readHumidity()便可進行溫濕度的數據讀取;光照強度部分通過Wire.h庫,即IIC庫操作IIC獲取從BH1750寄存器字節的數據,將這兩個字節合并后得到寄存器值,最后由光照強度計算公式:光照強度=(寄存器值* 分辨率) / 1.2 即可計算出光照強度的數值;PM2.5檢測部分只需在loop()函數中利用analogRead()函數獲取粉塵傳感器模擬電壓值,再根據模擬電壓值與PM2.5濃度關系式即可得出PM2.5的濃度值;二氧化碳濃度檢測采用的是調用SparkFunCCS811.h庫,在loop()函數中使用mySensor.readAlgorithmResults()進行總的數據獲取,再使用mySensor.getCO2即可得到空氣中二氧化碳的具體數值;ESP8266WiFi模塊部分即采用ESP8266.h程序庫,通過WiFi連接子函數輸入SSID與密碼即可連接WiFi,并與Arduino進行串口通信即可將各傳感器模塊所獲取的學習環境檢測的數據上傳至云端。
2.2.1 溫濕度檢測
本部分采用Arduino搭載DHT11溫濕度檢測模塊對環境的溫度與空氣相對濕度進行檢測。其中,DHT11數字溫濕度傳感器是一款經過極其嚴格精確地校準的溫濕度復合傳感器,包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機相連接。由數字信號進行輸出,濕度測量范圍為20–95%RH,溫度測量范圍為0–50℃,測量精度為:濕度±5%RH,溫度±2℃。只需1個I/O口即可對溫度和濕度的同時測量并傳輸數據,具有高性價比、穩定性好等優點,在此裝置中可為當前環境溫濕度檢測提供十分科學可靠的檢測數據。
2.2.2 光照環境檢測本部分采用Arduino連接BH1750光照傳感器模塊對環境光強進行檢測。其中,BH1750光照傳感器模塊為兩線式串行總線IIC的數字型光強傳感器,測量范圍為1–65535Lx,內部有16位模數轉換器,將采集到的光信號表現為電流,再轉換為PD電壓,最后通過AD轉換器將模擬信號轉化為數字信號。具有測量范圍廣、靈敏度高、穩定性強、抗干擾性好等特點,可為裝置檢測提供準確的環境光強度值。
2.2.3 空氣質量檢測
本部分采用Arduino連接GP2Y1014AU粉塵傳感器對環境空氣中PM2.5濃度進行檢測。其中,該粉塵傳感器的工作溫度為–10~65℃,最小粒子檢出值為0.8微米,靈敏度為0.5V/(0.1mg/m3),存儲溫度為–20~80℃,利用該傳感器測量用戶所處環境空氣中PM2.5濃度,具有體積小、穩定性高、靈敏性好等優點,可為空氣質量的檢測提供十分可靠的數據。
2.2.4 二氧化碳濃度檢測
本部分采用Arduino連接高分辨率CSS811空氣質量傳感器,實現對用戶所處環境中二氧化碳濃度進行實時檢測的目的。其中,CCS811空氣質量傳感器是一款超低功耗數字氣體傳感器,集成了MOX(金屬氧化物)氣體傳感器,可通過集成的MCU(微控制器單元)檢測各種VOC(揮發性有機化合物),用于室內空氣質量監測。MCU由ADC(模數轉換器)和I2C接口組成。它基于ams獨特的微型熱板技術,為低功耗的氣體傳感器提供高度可靠的解決方案。此傳感器功耗較低,性能高,受空氣中氧氣、溫度的影響較小,在空氣質量監測、安全防護監測等方面應用廣泛,可作為此裝置中檢測環境二氧化碳濃度的有力數據來源。
本部分檢測采用樹莓派4b連接一個CMOS攝像頭獲取用戶臉部及坐姿圖像,其中CMOS攝像頭像素為200W,最高分辨率和幀率分別為1920×1080與30fp。
視疲勞檢測部分采用基于Dlib人臉識別的68特征點檢測,分別獲取左右眼面部標志的索引,通過OpenCV對視頻流進行灰度化處理,檢測出人眼的位置信息,通過計算當前幀兩雙眼睛寬高比與前一幀的差值的絕對值(EAR)檢測眨眼,通過計算眨眼的頻率判斷用戶是否屬于視疲勞情況。
坐姿識別部分采用基于OpenPose的人體骨架關鍵點識別,通過CMOS攝像頭獲取人體坐姿圖像,將所述人體坐姿圖像輸入至人體骨架關鍵點識別模型,得到人體骨架關鍵點特征信息;其中,所述人體骨架關鍵點識別模型是預先訓練得到;根據所述人體骨架關鍵點特征信息構建包含關鍵點特征信息的圖像;將所述包含關鍵點特征信息的圖像輸入至人體坐姿識別模型,得到人體坐姿識別結果;其中,所述人體坐姿識別模型是預先訓練得到[4]。
本部分由樹莓派顯示屏、移動端數據顯示及智能聯動家居等部分組成。其中,樹莓派顯示屏通過HDMI轉micro–USB線連接樹莓派4b,通過由C++開發的圖形用戶界面顯示視疲勞及不良坐姿檢測的結果。通過ESP8266模塊將數據發送至云端儲存,可以實現在移動端對數據進行輸出整合并生成可視化圖形,使所有數據都可以在移動端上直觀呈現,可方便用戶在同一局域網下的任何時間、地點,了解到實時所處的環境情況。智能聯動家居部分采用樹莓派搭載智能家居網關對家居進行調控。設備之間的通信協議采用基于發布/訂閱模式的輕量級物聯網消息傳輸的MQTT協議,可以用極少的代碼和帶寬為聯網設備提供實時可靠的消息服務,適用于硬件資源有限的設備及帶寬有限的網絡環境。此外,由于智能家居設備之間數據傳輸格式不同,并且數據存在波動性,采用由EMQ開源的EMQ X Kuiper對智能家居設備數據進行邊緣化處理,其中,EMQ X Kuiper是基于SQL的輕量級邊緣流式消息處理引擎,可以運行在資源受限的邊緣設備上。MQTT broker采用輕量級的物聯網邊緣計算消息中間件EMQ X Edge,其支持部署在資源受限的物聯網邊緣硬件。EMQ X Kuiper為網關提供設備數據處理以及分析功能。
基于機器視覺的學習環境及狀態監測裝置用于實現對人們所處環境及自身狀態的有效監測,引導人們及時休息或正確調整坐姿,以降低因環境不佳、視疲勞或不正確的坐姿等帶來的不良影響,滿足未來智能化生活及人體健康領域的需要。