李宏順 卜宗煒 閉傳琦 宋俊慷
(廣西民族師范學(xué)院數(shù)理與電子信息工程學(xué)院 廣西壯族自治區(qū)崇左市 532200)
隨著科技不斷進(jìn)步和人民對(duì)便捷生活方式的需求日益增長(zhǎng),智慧化的樓宇項(xiàng)目如雨后春筍般紛紛落地,城市信息化建設(shè)得到了迅速發(fā)展,人們生產(chǎn)生活方式得到轉(zhuǎn)變、社會(huì)治理模式也隨著發(fā)生變革。智慧樓宇是集成數(shù)字化技術(shù)、信息通信技術(shù),開(kāi)展建筑空間、智能設(shè)備、信息化軟件和一體化設(shè)計(jì)及應(yīng)用,實(shí)現(xiàn)樓宇智能信息集成、設(shè)備優(yōu)化控制和空間綜合管理。根據(jù)智慧樓宇理念為小區(qū)物業(yè)門禁管理提供無(wú)人、便捷且自動(dòng)化的數(shù)字管理系統(tǒng),在完成整棟樓的數(shù)據(jù)共享基礎(chǔ)上,配合傳感器、執(zhí)行器群和賦予機(jī)器視覺(jué)能力的網(wǎng)絡(luò)攝像頭,實(shí)現(xiàn)樓宇智慧管控。
經(jīng)過(guò)多年技術(shù)演進(jìn),互聯(lián)網(wǎng)項(xiàng)目從早期的單體架構(gòu)發(fā)展到垂直架構(gòu)、分布式架構(gòu)、SOA(Service-Oriented Architecture)架構(gòu)最后演進(jìn)到微服務(wù)架構(gòu)。單體架構(gòu)是將所有功能模塊部署在同一臺(tái)服務(wù)器上,該架構(gòu)結(jié)構(gòu)簡(jiǎn)單部署快捷,但存在項(xiàng)目啟動(dòng)慢、可靠性差、可伸展性差、擴(kuò)展性和可維護(hù)性差等諸多缺點(diǎn)。垂直架構(gòu)的出現(xiàn)一定程度上解決了單體架構(gòu)的部分問(wèn)題,但是它將單體架構(gòu)的模塊拆分成兩個(gè)及以上的獨(dú)立項(xiàng)目,如果獨(dú)立項(xiàng)目之間需要使用同一類功能,在部署時(shí)需要分別部署該模塊,存在重復(fù)功能太多的問(wèn)題。分布式架構(gòu)是在垂直架構(gòu)的基礎(chǔ)上演進(jìn)而來(lái),將公共的功能抽離出來(lái),作為獨(dú)立的服務(wù)模塊為系統(tǒng)調(diào)用者實(shí)現(xiàn)服務(wù)復(fù)用,服務(wù)之間的調(diào)用基于RPC(Remote Procedure Call)的方式實(shí)現(xiàn),該架構(gòu)仍存在單體架構(gòu)中提到的可維護(hù)性差等問(wèn)題。SOA與微服務(wù)架構(gòu)出現(xiàn)使上述缺點(diǎn)得到解決,SOA是一個(gè)組件模型,它將服務(wù)拆分并通過(guò)接口與契約實(shí)現(xiàn)交互,引入ESB(Enterprise Service Bus)服務(wù)中介的概念,作為各個(gè)服務(wù)之間交互的中間件,使得各個(gè)服務(wù)之間可以通過(guò)中間件進(jìn)行調(diào)用,服務(wù)之間的變更不再相互受到影響。微服務(wù)架構(gòu)是對(duì)SOA的升級(jí)改造,將單個(gè)系統(tǒng)拆分成一個(gè)個(gè)可獨(dú)立開(kāi)發(fā)、設(shè)計(jì)、測(cè)試、部署與運(yùn)行的應(yīng)用,各應(yīng)用之間的交互通過(guò)HTTP(Hyper Text Transfer Protocol)的“RESTfuLAPI”實(shí)現(xiàn),不受任何語(yǔ)言與平臺(tái)的限制。綜上所述微服務(wù)宗旨是將一個(gè)龐大的系統(tǒng)拆分成一個(gè)個(gè)服務(wù)模塊,實(shí)現(xiàn)系統(tǒng)“高內(nèi)聚,低耦合”的特點(diǎn),其架構(gòu)十分符合智慧樓宇管理系統(tǒng)穩(wěn)定、快速、高擴(kuò)展的核心需求。
系統(tǒng)對(duì)原有傳統(tǒng)樓宇管理系統(tǒng)進(jìn)行改良與完善,基于傳感器群和網(wǎng)絡(luò)攝像頭,在執(zhí)行器群的配合下依托服務(wù)器和數(shù)據(jù)展示大屏,實(shí)現(xiàn)樓宇現(xiàn)場(chǎng)情況的實(shí)時(shí)監(jiān)測(cè)與控制。以分層設(shè)計(jì)思想將系統(tǒng)功能劃分為接入層、網(wǎng)絡(luò)層、服務(wù)層三個(gè)部分。接入層負(fù)責(zé)采集數(shù)據(jù),可分為“移動(dòng)客戶端”與“硬件群”兩部分:基于微信小程序的移動(dòng)客戶端完成采集與變更用戶數(shù)據(jù)、遠(yuǎn)程審核、實(shí)時(shí)查看傳感器數(shù)據(jù)、控制執(zhí)行器、自動(dòng)下發(fā)定時(shí)任務(wù)等功能;以微控制器STM32為核心的傳感、執(zhí)行器群配合多路攝像頭組成智能采集控制節(jié)點(diǎn),通過(guò)串口連接的方式與X86架構(gòu)工控機(jī)連接形成硬件群,由硬件群管理上位機(jī)對(duì)數(shù)據(jù)進(jìn)行封裝與解析。網(wǎng)絡(luò)層負(fù)責(zé)實(shí)現(xiàn)接入層與服務(wù)層交互數(shù)據(jù)的傳輸工作,通過(guò)特定的網(wǎng)絡(luò)方式將接入層數(shù)據(jù)上傳至服務(wù)層,由服務(wù)層解析并處理后將反饋指令或數(shù)據(jù)再次通過(guò)網(wǎng)絡(luò)層下發(fā)至接入層進(jìn)行響應(yīng)。服務(wù)層為整個(gè)系統(tǒng)提供數(shù)據(jù)存儲(chǔ)、分析和計(jì)算的能力,是整個(gè)系統(tǒng)控制中樞,該層主要功能是接收網(wǎng)絡(luò)層上傳的業(yè)務(wù)請(qǐng)求,配合數(shù)據(jù)庫(kù)與緩存將數(shù)據(jù)持久化并在需要時(shí)將數(shù)據(jù)調(diào)出進(jìn)行分析處理,實(shí)現(xiàn)自動(dòng)下發(fā)任務(wù)指令、返回業(yè)務(wù)請(qǐng)求。
系統(tǒng)硬件設(shè)計(jì)以STM32F103芯片為核心,配合傳感器完成對(duì)數(shù)據(jù)的采集,依托執(zhí)行器根據(jù)控制指令實(shí)現(xiàn)對(duì)控制對(duì)象的調(diào)節(jié)。數(shù)據(jù)指令利用JSON(JavaScript Object Notation)數(shù)據(jù)格式通過(guò)STM32串口傳輸與硬件群管理上位機(jī)進(jìn)行信息交換。系統(tǒng)硬件流程分為四個(gè)線程,分別是初始化線程、傳感器線程、執(zhí)行器線程、上傳數(shù)據(jù)線程。
系統(tǒng)首次運(yùn)行進(jìn)入初始化線程,根據(jù)不同外設(shè)初始化SMT32的IO端口、ADC端口、通信端口和內(nèi)部定時(shí)器等模塊;傳感器線程用于控制SMT32讀取傳感器采集的數(shù)據(jù),將其更新至STM32 flash內(nèi)存中;執(zhí)行器線控用于控制SMT32接收硬件群管理上位機(jī)下發(fā)的JSON數(shù)據(jù),解析JSON數(shù)據(jù)中執(zhí)行器的控制信息并保存,根據(jù)信息更新執(zhí)行器工作狀態(tài);上傳數(shù)據(jù)線程在定時(shí)器產(chǎn)生的溢出控制下,將存儲(chǔ)在STM32 flash內(nèi)存中的傳感器數(shù)據(jù)與執(zhí)行器狀態(tài)指令封裝為JSON數(shù)據(jù)格式并通過(guò)串口發(fā)送至硬件群管理上位機(jī)。系統(tǒng)硬件群控制主板實(shí)物如圖1所示。
圖1:系統(tǒng)硬件群控制主板實(shí)物圖
硬件群管理上位機(jī)是接入層的硬件群與服務(wù)端軟件進(jìn)行數(shù)據(jù)雙向交互的中間載體,其主要功能如下:讀取硬件群中傳感器數(shù)據(jù)和執(zhí)行器參數(shù)發(fā)送至服務(wù)端;轉(zhuǎn)發(fā)服務(wù)端軟件下發(fā)的控制指令,操作執(zhí)行器完成相應(yīng)動(dòng)作;讀取樓宇攝像頭數(shù)據(jù)并將檢測(cè)到的面部數(shù)據(jù)保存后發(fā)送至服務(wù)端核驗(yàn)來(lái)訪者身份。硬件群管理上位機(jī)的設(shè)計(jì)針對(duì)X86架構(gòu)工控機(jī)可實(shí)現(xiàn)跨平臺(tái)部署且對(duì)運(yùn)行環(huán)境要求極低,只需安裝相應(yīng)的插件庫(kù)即可在Windows或Linux系統(tǒng)上運(yùn)行,即使全部線程同時(shí)工作,運(yùn)行內(nèi)存占用小于128MB, CPU(以酷睿四核為參考)使用率小于35%,在極低的資源占用下實(shí)時(shí)捕捉畫面的幀率仍超過(guò)30FPS,相對(duì)于基于ARM的邊緣計(jì)算單元性能十分可觀。硬件群管理上位機(jī)功能結(jié)構(gòu)如圖2所示。
圖2:硬件群管理上位機(jī)功能結(jié)構(gòu)
硬件群管理上位機(jī)主要使用Python語(yǔ)言開(kāi)發(fā),PyQT5設(shè)計(jì)UI界面,采用多線程技術(shù)分別負(fù)責(zé)不同功能模塊的運(yùn)行。串口收線程讀到傳感器群數(shù)據(jù)和執(zhí)行器群參數(shù)后進(jìn)行編碼,并將結(jié)果使用全局變量“serial InPut”存儲(chǔ)后修改對(duì)應(yīng)的標(biāo)志位觸發(fā)MQTT(Message Queuing Telemetry Transport)發(fā)線程,通過(guò)MQTT協(xié)議將數(shù)據(jù)發(fā)送至MQTT中間件等待被消費(fèi)同時(shí)將“serial InPut”全局變量置為NULL值,完成一次傳感器群數(shù)據(jù)和執(zhí)行器群參數(shù)上報(bào)流程。MQTT收線程在完成自檢后就成功連接至MQTT中間件,如果收到由服務(wù)端軟件下發(fā)的數(shù)據(jù)包,則將其解析并完成編碼存入“mqtt InPut”全局變量,交給串口發(fā)線程成功處理后將“mqtt InPut”全局變量置為NULL值,完成一次控制指令下發(fā)響應(yīng)的流程。人臉捕捉線程和攝像頭線程均是使用OpenCV庫(kù)函數(shù),通過(guò)串口或者網(wǎng)絡(luò)數(shù)據(jù)流的方式讀取攝像頭的RGB數(shù)據(jù)矩陣,將其轉(zhuǎn)換顯示到硬件群管理上位機(jī)窗體對(duì)應(yīng)的控件。人臉捕捉線程不但在每幀畫面中找到人臉,而且通過(guò)從零歸一化算法找到人臉的矩形坐標(biāo)并生成面部照片發(fā)送至服務(wù)端,在串口收線程配合下,讀取接收數(shù)據(jù)包中關(guān)于來(lái)訪者與門禁的距離、體溫等數(shù)據(jù)。當(dāng)距離小于預(yù)設(shè)值時(shí),系統(tǒng)則認(rèn)為來(lái)訪者需要通過(guò)門禁,此時(shí)人臉捕捉線程將來(lái)訪者的面部數(shù)據(jù)與體溫?cái)?shù)據(jù)保存到內(nèi)存中同時(shí)進(jìn)行封裝,由被觸發(fā)的來(lái)訪信息線程將封包的數(shù)據(jù)發(fā)送至服務(wù)器,服務(wù)器處理后返回來(lái)訪者的信息,信息中的數(shù)據(jù)會(huì)被來(lái)訪信息線程顯示到對(duì)應(yīng)的窗體控件,并且配合串口發(fā)線程控制執(zhí)行器群的運(yùn)行,完成一次無(wú)人無(wú)接觸人臉識(shí)別、測(cè)溫門禁運(yùn)行流程,硬件群管理上位機(jī)實(shí)際效果如圖3所示。
圖3:硬件群管理上位機(jī)運(yùn)行效果
數(shù)據(jù)大屏是運(yùn)行在硬件群管理上位機(jī)的網(wǎng)頁(yè),基于HTML、JavaScript、CSS編寫而成,通過(guò)異步AJAX (Asynchronous Javascript And XML And HTML)網(wǎng)絡(luò)請(qǐng)求方式獲取服務(wù)器的歷史數(shù)據(jù)并直觀的呈現(xiàn)在數(shù)據(jù)大屏顯示器上,便于管理員更進(jìn)一步掌握樓宇近況。數(shù)據(jù)展示大屏由六個(gè)歷史數(shù)據(jù)模塊與樓宇大門監(jiān)控組成,數(shù)據(jù)模塊每秒向服務(wù)器發(fā)送一次異步請(qǐng)求,返回的JSON數(shù)據(jù)用于更新圖表,數(shù)據(jù)大屏實(shí)際效果如圖4所示。
圖4:數(shù)據(jù)大屏效果展示
移動(dòng)客戶端由用戶引導(dǎo)、設(shè)備管理、數(shù)據(jù)存儲(chǔ)等多個(gè)功能模塊組成,其具體功能結(jié)構(gòu)如圖5所示。移動(dòng)客戶端分為管理端與用戶端,管理端為樓宇管理者設(shè)計(jì),用戶端則面向樓宇的住戶、訪客。
圖5:移動(dòng)客戶端功能結(jié)構(gòu)
管理員使用管理端小程序,調(diào)用微信云函數(shù)獲取“openid”,并以此為參數(shù)連接系統(tǒng)的服務(wù)器確認(rèn)身份與權(quán)限。如果已注冊(cè)則返回Token(一種具有時(shí)效性且高效的數(shù)字簽名技術(shù))等相關(guān)數(shù)據(jù),并通過(guò)數(shù)據(jù)存儲(chǔ)模塊將獲取到的信息存儲(chǔ)到手機(jī)中,為后續(xù)進(jìn)行其他業(yè)務(wù)做準(zhǔn)備,同時(shí)跳過(guò)引導(dǎo)模塊直接進(jìn)入管理端UI。如果未注冊(cè)則進(jìn)入用戶引導(dǎo)模塊,隨后填個(gè)人信息并通過(guò)掃描硬件群管理上位機(jī)的二維碼,綁定系統(tǒng)硬件群并在連接MQTT中間件成功后,樓宇管理員即進(jìn)入系統(tǒng)擁有本系統(tǒng)全部操作權(quán)限,隨后進(jìn)入管理端UI。成功進(jìn)入管理端UI后,管理員可以通過(guò)基于HTTPS的網(wǎng)絡(luò)請(qǐng)求方式審核樓宇住戶的信息,對(duì)樓宇用戶添加與刪除,查看傳感器群實(shí)時(shí)數(shù)據(jù)與歷史數(shù)據(jù),修改執(zhí)行器群的參數(shù)并下發(fā)自動(dòng)定時(shí)任務(wù)。用戶端小程序啟動(dòng)的前導(dǎo)流程與管理端小程序類似,先獲取“openid”并作為參數(shù)請(qǐng)求服務(wù)器確認(rèn)身份,若未注冊(cè)先進(jìn)入用戶引導(dǎo)模塊由用戶填寫個(gè)人信息,選擇對(duì)應(yīng)樓宇管理員同時(shí)上傳三張面部照片,管理員核驗(yàn)通過(guò)后即可進(jìn)入用戶端UI。若已注冊(cè)并由管理員審核通過(guò)的用戶可以直接進(jìn)入用戶端UI,成功后就可以正常通過(guò)人臉門禁,同時(shí)還可以使用一鍵邀請(qǐng)?jiān)L客、變更個(gè)人信息、查看個(gè)人出入記錄等功能。移動(dòng)客戶端部分界面如圖6所示。
圖6:移動(dòng)客戶端部分界面
服務(wù)端是智慧樓宇管理系統(tǒng)的核心部分,由五個(gè)微服務(wù)與多個(gè)非商業(yè)性質(zhì)的開(kāi)源項(xiàng)目組成,為系統(tǒng)提供數(shù)據(jù)存儲(chǔ)、計(jì)算和分析能力,具體程序功能結(jié)構(gòu)如圖7所示。每個(gè)功能模塊基于輸入與輸出的設(shè)計(jì)思想,配合數(shù)據(jù)庫(kù)進(jìn)行工作。
圖7:服務(wù)端程序功能結(jié)構(gòu)
自動(dòng)任務(wù)管理模塊可分為調(diào)度器與執(zhí)行器。調(diào)度器接收設(shè)備管理微服務(wù)發(fā)送的任務(wù)表單,定時(shí)啟動(dòng)執(zhí)行器執(zhí)行原先編輯好的業(yè)務(wù)代碼,移動(dòng)客戶端以Cron表達(dá)式(一種便于記載的時(shí)間表達(dá)式)、執(zhí)行條件、選擇的執(zhí)行器等作為參數(shù),向設(shè)備管理微服務(wù)發(fā)送自動(dòng)任務(wù)請(qǐng)求,設(shè)備管理微服務(wù)收到請(qǐng)求后進(jìn)行參數(shù)解析,使用HTTP調(diào)用任務(wù)調(diào)度器完成任務(wù)編排后返回處理結(jié)果給設(shè)備管理微服務(wù),設(shè)備管理微服務(wù)向數(shù)據(jù)庫(kù)與緩存Redis寫入一條待執(zhí)行任務(wù)并向移動(dòng)客戶端返回處理結(jié)果,完成一次自動(dòng)定時(shí)任務(wù)的設(shè)置操作;執(zhí)行器被激活時(shí)會(huì)根據(jù)“openid”查詢數(shù)據(jù)庫(kù)確定需要執(zhí)行的任務(wù),同時(shí)獲取“openid”下對(duì)應(yīng)硬件群設(shè)備的特定傳感器前十秒平均數(shù)據(jù),在分析是否要執(zhí)行當(dāng)前任務(wù)后通過(guò)MQTT協(xié)議進(jìn)行任務(wù)下發(fā),由硬件群響應(yīng)執(zhí)行,完成一次自動(dòng)定時(shí)任務(wù)的執(zhí)行工作。
1:N人臉比對(duì)模塊承擔(dān)系統(tǒng)對(duì)于面部數(shù)據(jù)的編碼與比對(duì)工作。用戶注冊(cè)時(shí)用戶管理微服務(wù)已將注冊(cè)者的個(gè)人信息和面部圖片編碼存儲(chǔ)到數(shù)據(jù)庫(kù)并同步至緩存Redis中,當(dāng)來(lái)訪者想要通過(guò)門禁時(shí),硬件群管理上位機(jī)控制攝像頭和傳感器,采集來(lái)訪者的面部圖片和體溫?cái)?shù)據(jù)等相關(guān)參數(shù)發(fā)送給用戶管理微服務(wù)。用戶管理微服務(wù)根據(jù)傳入的面部照片調(diào)用人臉比對(duì)引擎逐一掃描比對(duì)緩存Redis中的數(shù)據(jù),當(dāng)Redis查無(wú)此人則查詢數(shù)據(jù)庫(kù),如果成功匹配人臉數(shù)據(jù)則返回此人的信息否則返回NULL值,硬件群管理上位機(jī)根據(jù)返回的信息決定是否允許來(lái)訪者通過(guò)門禁,完成一次無(wú)人無(wú)接觸式人臉門禁流程。
MySQL數(shù)據(jù)庫(kù)用于存儲(chǔ)各種類型的數(shù)據(jù),記錄著各個(gè)字段作用、表與表之間的關(guān)系使系統(tǒng)每一個(gè)行為處于合理的狀態(tài)。使用ER關(guān)系的概念,將數(shù)據(jù)庫(kù)的表描述為多個(gè)實(shí)體,表示每個(gè)實(shí)體對(duì)象之間的關(guān)系、行為、屬性等。在宏觀上讓表與表之間產(chǎn)生邏輯關(guān)系,使數(shù)據(jù)庫(kù)表便于設(shè)計(jì)與理解。
針對(duì)樓宇的管理需求,以微服務(wù)為設(shè)計(jì)架構(gòu)結(jié)合云計(jì)算、機(jī)器視覺(jué)、傳感器鏈路,設(shè)計(jì)了基于微服務(wù)架構(gòu)的智慧樓宇管理系統(tǒng),實(shí)現(xiàn)無(wú)接觸式人體測(cè)溫和人臉門禁、數(shù)據(jù)展示大屏、信息預(yù)警、遠(yuǎn)程調(diào)控等自動(dòng)控制功能。該系統(tǒng)的部署和實(shí)施一定程度上提高了樓宇的管理效率,為樓宇管理提供一站式服務(wù)設(shè)計(jì)和必要的技術(shù)支撐,具有較好的應(yīng)用價(jià)值。