鄭策 ZHENG Ce;王建成 WANG Jian-cheng;鄭恒哲 ZHENG Heng-zhe;陳雪冬 CHEN Xue-dong;袁翾 YUAN Xuan;劉俊強 LIU Jun-qiang
(河南科技大學軟件學院,洛陽 471003)
近年來,隨著科技和互聯(lián)網(wǎng)的不斷發(fā)展,很多行業(yè)對人流信息的統(tǒng)計有極大的需求,如火車站、公交站、地鐵站、商場出入口等人流量大的場所。通過人數(shù)統(tǒng)計系統(tǒng)可以方便、可靠、實時地對各種場所的人流進行統(tǒng)計,而不對公眾造成任何影響。結(jié)合圖像分析技術(shù),可以清楚快捷地掌握客流動態(tài),提供數(shù)據(jù)支持,使決策者及時做出對策。利用圖像處理來完成人數(shù)統(tǒng)計系統(tǒng)的主要優(yōu)點就是圖像信號非常直觀,便于人為地理解。本項目源于大學生的日常學習生活,教室作為其中一個十分特殊的公共場合,它的人數(shù)有著很重要的現(xiàn)實意義。
對大學生來說:脫離了高中緊張的學習環(huán)境,邁入高校的殿堂,缺少了老師和父母的嚴格要求,許多在校大學生作息時間紊亂,課堂到課情況不理想,出現(xiàn)缺課、曠課情況,嚴重影響到學業(yè)成績。讓學生養(yǎng)成一個好的作息習慣,規(guī)范學生的學習習慣,是很多高校最想做到的事情之一。
對同學來說:現(xiàn)在,在校大學生可以隨時隨地通過設(shè)備進行網(wǎng)絡(luò)操作,而目前各大高校圖書館和自習室資源普遍緊張,空閑教室往往成為許多學生自習的主要場所,但是由于不了解教室的資源使用情況,同學們尋找沒有課程且有空位的教室通常需要花費大量時間。因此,建立基于視頻監(jiān)控的教室人數(shù)統(tǒng)計系統(tǒng)對大學生的學習以及學習環(huán)境至關(guān)重要。
對老師來說:統(tǒng)計出勤情況是記錄學生課程學習過程、提供平時成績評定依據(jù)的有效方法。而傳統(tǒng)考察出勤人數(shù)的方式大多耗時費力,并且存在替代簽到的情況使得數(shù)據(jù)不可靠,在浪費寶貴課堂時間的同時,也為老師增添了負擔。
因此,設(shè)計一種可方便統(tǒng)計教室內(nèi)人數(shù)并進行顯示的系統(tǒng),有助于幫助學生快速尋找空閑教室,提高教室的資源利用率,規(guī)范學生的按時到課率以及幫助老師統(tǒng)計出勤情況。系統(tǒng)結(jié)合所學知識,通過運用目標檢測網(wǎng)絡(luò)技術(shù)對教室監(jiān)控視頻畫面處理分析,建立可視化界面,提供教室數(shù)據(jù)的相關(guān)信息。
基于視頻監(jiān)控的教室人數(shù)統(tǒng)計系統(tǒng)其宗旨是面向高校學生和老師,通過技術(shù)改變生活,以教室信息可視化為中心,為學生提供準確的教室信息,實現(xiàn)空閑教室資源的合理利用,節(jié)省人力物力,讓同學們能夠享受更加方便、快捷、優(yōu)質(zhì)的學習生活,同時可以幫助老師統(tǒng)計出勤情況。
①目前大多數(shù)高校只有圖書館有預約占位功能,而空閑教室資源普遍沒有被合理利用,且目前來看,在高校中教室人數(shù)統(tǒng)計系統(tǒng)的市場為空白,無同類項目。②隨著科學技術(shù)的發(fā)展,視頻監(jiān)控設(shè)備的成本也越來越低,并且許多高校教室原本就有視頻監(jiān)控設(shè)備,系統(tǒng)實施成本較低且可控。③本項目來源于切身的生活體驗,開發(fā)人員也為該項目的使用者,對項目功能的需求分析十分到位,所有功能的實現(xiàn)能夠完全貼近系統(tǒng)的需求。④項目內(nèi)容完全基于校園的學習生活,操作安全可控、內(nèi)容健康向上、使用方便快捷。⑤在學習之余做開發(fā)設(shè)計,既促進了學習,又提高了自己的應(yīng)用開發(fā)能力,且極大地降低了系統(tǒng)開發(fā)成本。⑥使用目前流行的技術(shù)進行項目的設(shè)計與開發(fā),使得我們接觸并且掌握熱門流行技術(shù),拓寬了我們的視野。⑦開發(fā)團隊穩(wěn)定,成員全部為大三學生,每年畢業(yè)生離校但新成員同步補充到位,因此項目的運行維護沒有斷點。
①視頻圖像的檢測處理。②教室數(shù)據(jù)分析和可視化。③用戶能夠?qū)ο鄳?yīng)數(shù)據(jù)進行查看。
在團隊探討交流的基礎(chǔ)上形成了需求說明書,將系統(tǒng)的功能分為了以下幾個模塊:①數(shù)據(jù)獲取模塊:此模塊主要通過連接視頻監(jiān)控接口,獲取監(jiān)控畫面,并進行畫面的實時保存。②數(shù)據(jù)處理模塊:此模塊主要使用yolov5對獲取的視頻畫面進行處理,并保存處理后的結(jié)果將其上傳至云端服務(wù)器。③服務(wù)器管理模塊:此模塊主要將上傳來的數(shù)據(jù)進行處理后保存到云端數(shù)據(jù)庫,以及為前端提供相應(yīng)的數(shù)據(jù)訪問接口。④前端顯示模塊:前端顯示模塊主要包含對獲取到的數(shù)據(jù)進行可視化處理以及項目介紹。數(shù)據(jù)可視化主要包含檢測處理后的圖像結(jié)果展示,人數(shù)統(tǒng)計展示,以及每個教室密度對應(yīng)的顏色指示燈。
系統(tǒng)數(shù)據(jù)均由后臺上傳、云端服務(wù)器獲取、云端數(shù)據(jù)庫存儲,不同的數(shù)據(jù)訪問接口具有相似的數(shù)據(jù)返回格式,降低了前后端分離帶來的成本,提高了開發(fā)速度。各模塊之間的耦合性較低,便于多人共時協(xié)同開發(fā)。項目總體實現(xiàn)流程如圖1所示。
圖1 項目總體實現(xiàn)流程
項目的后臺使用Python實現(xiàn),主要負責視頻流的獲取,目標檢測處理,處理結(jié)果上傳,主要包括以下幾個方面:①capFrame()方法實現(xiàn)對視頻流的截圖并保存本地。②run()方法實現(xiàn)對圖片的處理并保存結(jié)果。③upload()方法把處理后的結(jié)果上傳至服務(wù)器。④使用多線程,使得capFrame()方法在運行時,run()方法和upload()方法也同時運行,互不影響。⑤使用方法循環(huán),保證數(shù)據(jù)的實時性。
項目的服務(wù)器端使用JavaSSM框架和maven實現(xiàn),主要負責后臺上傳數(shù)據(jù)的存儲,主要包括以下幾個方面:①實體類:ClassRoom.java,包含屬性:id:數(shù)據(jù)ID,photo:圖片,num:教室人數(shù),class_name:教室名,time:時間,seat:教室座位數(shù)量。②控制器類:ClassRoomController.java,包含方法:getClasses():獲取班級列表;uploadFile():上傳數(shù)據(jù)(圖片、人數(shù)、班級名、座位數(shù))。③實體類屬性名與數(shù)據(jù)庫表中屬性名對應(yīng)相同。
項目的數(shù)據(jù)庫用MySQL實現(xiàn)并完成數(shù)據(jù)庫的設(shè)計,實現(xiàn)數(shù)據(jù)的存儲,主要包括以下幾個方面:①確認數(shù)據(jù)庫名稱、字符集、排列順序等。②確定數(shù)據(jù)庫內(nèi)數(shù)據(jù)表的名稱,一般情況下數(shù)據(jù)表的名稱和實體類的名稱一致,確定表內(nèi)所含字段的名稱、類型、長度、主鍵是否為空。③表class:如表1所示。④存儲過程函數(shù)updateClass():根據(jù)服務(wù)器端傳入的教室號數(shù)據(jù)進行判斷是否執(zhí)行插入或更新操作。
表1 數(shù)據(jù)庫class表
項目的前端用Vue框架和jQuery框架實現(xiàn),實現(xiàn)數(shù)據(jù)的顯示,主要包括以下幾個方面:①browserRedirect()方法根據(jù)設(shè)備類型跳轉(zhuǎn)至不同的頁面(如手機端、電腦端)。②getClass()方法調(diào)用服務(wù)器接口獲取教室信息。③times()方法定時任務(wù),每隔5秒獲取一次班級信息,實現(xiàn)數(shù)據(jù)的刷新。④使用Vue進行頁面渲染,v-for、v-if等方法來根據(jù)獲取到數(shù)據(jù)顯示不同內(nèi)容。
系統(tǒng)功能不做一一詳述,僅以目標檢測處理、檢測結(jié)果上傳、主界面為例做簡要描述。
此模塊運用目前流行的強悍的目標檢測技術(shù)yolov5,由于教室內(nèi)大多同學都是坐在座位,所以檢測人物模型時會有遮擋,我們改變思路,將頭部識別作為人數(shù)統(tǒng)計依據(jù)。通過訓練數(shù)據(jù)集得到的權(quán)重文件來進行圖片的頭部檢測處理,檢測后圖片處理結(jié)果如圖2所示。
圖2 目標檢測后圖像
此模塊將目標檢測處理后生成的圖像和文本文件上傳至云端服務(wù)器,之后由服務(wù)器進行相應(yīng)的數(shù)據(jù)操作,關(guān)鍵代碼如下:
def upload():
#圖片所在目錄
img_dir="./runs/detect/exp_room/"
#txt文檔所在目錄
txt_dir="./runs/detect/exp_room/labels/"
#遍歷圖片目錄,將目錄中的內(nèi)容放入files
files=os.listdir(img_dir)
#遍歷files
for fi in files:
#如果該項為文件(非目錄)
if os.path.isfile(img_dir+fi):
print("上傳文件:"+fi)
#打開與圖片名對應(yīng)的txt文件
num_file=open(txt_dir+fi.split(".")[0]+".txt",encoding='utf-8')
#讀取txt文件中的第一行(人數(shù))
num=num_file.readline().split()[0]
class_name=fi.split(".")[0]
seat=class_name.split("$")[1]
class_name=class_name.split("$")[0]
#請求接口地址
url='http://srtp.achengovo.com/uploadFile'
#讀取圖片文件
file={'photo':open(img_dir+fi,'rb')}
#其余參數(shù)
data={'num':num,'class_name':class_name,"seat":seat}
print(data)
#向服務(wù)器發(fā)送post請求
response=requests.post(url,files=file,data=data)
#輸出請求結(jié)果
res=response.text
print(res)
用戶登錄網(wǎng)址(http://srtp.achengovo.com/)后,會根據(jù)用戶設(shè)備的不同進行適配顯示,分為PC端和手機端,主頁主要包括首頁和關(guān)于項目,用戶可以根據(jù)頁面上部的導航直接進行頁面跳轉(zhuǎn),首頁通過對云端服務(wù)器發(fā)送請求直接展示各教室的檢測數(shù)據(jù),包括教室號、目標檢測處理后的圖片、教室人數(shù)、檢測時間和擁擠程度判斷,用戶可以直接查看信息并選擇是否要去往該教室。
首頁向服務(wù)器端發(fā)送請求獲得數(shù)據(jù)的關(guān)鍵代碼如下:
def getClasses():
#請求接口
url="http://srtp.achengovo.com/getClasses"
#發(fā)送請求
result=requests.get(url)
#將請求結(jié)果轉(zhuǎn)為json
result=result.json()
#遍歷輸出
for res in result:
print(res)
PC端主頁面展示如圖3所示。
圖3 PC端主頁面
手機端主頁面展示如圖4所示。
圖4 手機端主頁面
基于視頻監(jiān)控的教室人數(shù)統(tǒng)計系統(tǒng)已經(jīng)完成并定義為V1.0版。后期的開發(fā)還會繼續(xù)完善,擬在已經(jīng)設(shè)計的功能模塊上加入教室的課表以及教室占用的時間安排信息,并且融入可視化數(shù)據(jù)分析,實現(xiàn)更多方便快捷的功能。未來還會與學校教務(wù)處、網(wǎng)絡(luò)中心、圖書館以及后勤集團聯(lián)系,在獲得批準后調(diào)用教室監(jiān)控的視頻圖像接口,達到數(shù)據(jù)的精準、完整。
項目已經(jīng)在河南科技大學軟件學院學生會、青協(xié)進行推廣,團隊成員及時了解到用戶使用過程中的反饋意見,并一一記錄,通過團隊的討論給出解決方案,同時在系統(tǒng)的運行過程中不斷添加功能并解決相關(guān)異常,目前程序運行穩(wěn)定,反饋良好,項目開發(fā)過程形成的1.0版本取得了滿意的效果。后期還要在功能模塊上細化功能的實現(xiàn),同時優(yōu)化相關(guān)代碼。