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