何禹潼,盧迪
(哈爾濱理工大學測控技術與通信工程學院,黑龍江哈爾濱 150080)
某些病毒傳染性強,在人員密集場所很容易形成傳播鏈,因此預防是重中之重,防止室內場所的人員聚集是必要手段和有效措施[1]。高校是一個特殊的場所,人員的密集程度較大且流動頻繁。在圖書館、實驗室、教室等室內場所,實時監測人流量,控制人員聚集,既是對師生安全負責,更是擔當對國家和社會防疫的責任。近年來,室內外的人流量監測方法大致可以分為兩種:①基于計算機視覺的處理算法,如文獻[2]提出了基于HOG 和SVM 的行人檢測算法,對行人的邊緣信息進行描述和提取并篩選;文獻[3-8]介紹了基于YOLO 算法的相關研究;文獻[9-11]介紹了基于Faster-RCNN 算法的人數統計方法。②基于傳感器的其他監測方法,如毫米波雷達[12]、無線射頻信號[13]、紅外傳感器[14-15]等,均取得了比較不錯的效果。在不同場景下,開發不同的算法需要采用大量的數據集進行迭代訓練,并且要求硬件設備具有并行運算能力,這十分耗費人力與資源。同時,如果單獨采用某類傳感器數據,則其人流量監測的使用范圍會受到很大影響。
該文基于百度AI 的靜態人流量統計系統使用百度AI 的API 接口,結合嵌入式ARM 主板、攝像頭、人體紅外傳感器等模塊,通過網頁實時顯示的室內人數,實現人流量監測統計功能。
設計系統主要由ARM 控制器、人流量統計SDK、數據處理以及網頁端四部分組成,如圖1 所示。ARM 控制器主要應用攝像頭和紅外傳感器兩個外設來采集室內的圖像信息與監測是否有人員經過;人流量統計主要負責調用百度AI 平臺python SDK 中的相關函數及API 接口,實現對輸入圖像的人數分析;數據處理主要負責從API 接口調用請求數據參數,并返回具體人數給ARM 控制器;網頁端主要負責交互功能,顯示實時人數及其變化情況等。

圖1 系統整體設計
采用ARM Cortex-A72 架構的微型Linux 主板,外接攝像頭和人體紅外傳感器兩個模塊。使用800萬像素索尼IMX219 傳感器擴展版與主板相接,如圖2 所示。由于是靜態人流量監測,因此攝像頭定時采集室內靜態圖像,該系統定時器設定為5 s。

圖2 攝像頭模塊電路圖
人體紅外傳感器采用熱釋電紅外傳感器HCSR501[16],通過import RPi.GPIO as GPIO 引入控制庫。利用該傳感器可實現節能策略:當設備在無人員室內時,處于低功耗模式;當設備在人流量不大的室內環境時,處于普通模式;在人流量較大環境時,處于性能模式。
人流量統計采用百度AI 提供的靜態人流量統計算法,其主要功能是識別和統計圖像中的人體數目,并返回渲染圖片。文中基于百度AI 平臺提供的人體分析(人流量統計)API 服務實現,采用平臺提供的人流量統計Python SDK 工具包完成開發。
首先注冊百度云平臺賬號,在管理控制臺創建相關應用,獲得唯一的APP_ID、API_KEY、SECRET_KEY等關鍵參數。同時,為了保證賬號應用的安全性以及用戶對訪問權限的控制,平臺采用access_token 方式實現鑒權認證機制。在調用開放API 時,用戶要根據之前已經獲得的API_Key 和Secret_Key,向授權服務地址發送請求(推薦使用POST),并在URL 中帶上grand_type、client_id、client_secret 參數,才能獲取access_token。最后,服務器以JSON 文本參數返回access_token 值。
靜態人流量統計根據靜態圖像進行分析,用戶需設定攝像頭定時拍照,上傳百度AI 平臺,平臺根據算法完成對靜態圖像的識別與處理,并將結果返回用戶。上傳時,平臺請求參數包括image(編碼后的圖像數據)、area(非必需,識別區域)、show(非必需,渲染圖片顯示)。
image 要求圖像為base64 編碼,編碼后才可通過URL 進行http 請求,同時要對參數進行UTF-8 編碼后,才能進行utf 編碼。在利用python 進行base64 編碼時,只需在引入庫函數的基礎上,令img=base64.b64encode(f.read()),可以直接將圖像從字節形式轉換為base64 字符串形式。
area 可以特定框選區域坐標,支持多個多邊形區域識別。若為單個區域,將每個頂點的x、y坐標按順序列出,并將首尾坐標相連做閉合。area 以數組的方式存儲,完成area 的參數設定后,平臺將只在該區域內進行人數識別。若area 值缺省,則進行全圖統計。
show 可以選擇渲染圖片是否返回并保存,默認不返回;令其為true 時,返回渲染后的圖片。
三個參數設定完成后,以字典數據結構存儲。
將百度AI 平臺處理后的結果數據作為全局存儲變量,根據多個參數處理函數可訪問該數據,接口函數將會返回不同類別的屬性數據,返回的結果形式為JSON 格式的字符串。返回數據參數包括log_id(幀編號)、person_num(人體數目)、image(渲染圖片)等。例如:
該字符串表示當前畫面中有16 個人,幀編號為716033439,渲染后的圖片字符形式為/9j/4AAoFS2P/9k=,此時畫面中的人數為當前幀的瞬時結果。當平臺返回JSON 數據后,可通過判斷幀編號是否與上次相同來驗證設計系統定時采集的室內圖像是否為靜態圖像。
網頁界面采用阿里云Web 可視化開發,其優點是免代碼開發、模版豐富、完全托管、搭建完畢后可直接綁定域名發布。該界面主要包括三個部分:實時人數顯示、教室信息顯示、實時人數變化曲線。開發之前,要將ARM 控制器與阿里云根據MQTT 協議連接,在阿里云物聯網平臺創建相關產品及設備后,每個設備會得到其唯一的設備證書(ProductKey、DeviceName、DeviceSecret),要將這些參數在ARM 控制器中進行聲明。建立連接時,物聯網平臺完成認證并與設備綁定,可實現如下功能:
1)實時人數顯示:通過文字及圖標組建實現參數名稱及輸出結果的顯示,數據源配置選擇相關產品設備的人數屬性。
2)教室信息顯示:包含教室門牌號、教室類型、教室最大容量。
3)實時人數變化曲線:數據源配置時,模式選擇為單設備多屬性,數據項設定為設備歷史數據,實時數據時間段選擇近半小時。
網頁測試界面如圖3 所示,人數為實時返回的監測數據結果,變化曲線由實時人數變化情況繪制。系統測試主要是人流量統計接口的調用是否成功并返回正確結果。基于此,文中從攝像頭實時拍攝畫面和直接上傳圖像兩方面對人流量統計結果進行測試,檢測系統的運行情況。

圖3 網頁界面
實驗一:攝像頭實時拍攝室內畫面,設置該攝像頭亮度為50 cd/m2,飽和度80%,快門時間間隔6×106μs,感光度為800,將攝像頭放置在2 m 高度俯拍。進行多次測試,其中一組測試結果如圖4、5 所示。

圖4 實驗一原圖像

圖5 實驗一渲染圖像
實驗二:上傳任意一張教室內圖像,進行多次測試,其中一組測試結果如圖6、7 所示。

圖6 實驗二原圖像

圖7 實驗二渲染圖像
實驗一和實驗二的測試結果與實際人數具體數據如表1 所示。實驗表明,百度AI 平臺人體檢測中靜態人流量監測算法的是以頭部為識別目標統計圖片中的瞬時人數。當拍攝方式為俯拍且距離合適時,該算法的準確率較高且具有較好的適應性。

表1 實驗效果
設計的室內監控系統基于百度AI 提供的API 接口,采用python 語言,并結合基于ARM 的微型Linux主板、攝像頭、人體紅外傳感器等模塊,是實現靜態人流量監測的一種高效方法。同時介紹了ARM 控制器相關功能的實現、與百度AI 平臺的連接、平臺鑒權機制的認證、與物聯網平臺的數據對接。實驗結果表明,該系統可以快速實現靜態人流量監測,又有較高的準確率。當拍攝方式為俯拍且距離合適時,靜態人流量監測準確率可達97.7%。該系統有較好的應用性,可以實現對室內密閉空間人數的監測與控制作用。