林江山,徐金,劉歡,張文博,譚旭
(新疆農業大學 計算機與信息工程學院,新疆 烏魯木齊 830052)
人流量統計是視頻監控系統的關鍵技術之一, 其任務是利用視頻圖像分析技術自動統計在某個時間段內通過某一場景的人流數量。由于人流信息是許多企業中做決策依據的一個重要信息, 因此該技術可以廣泛應用于各行各業。如公共場所監控人流密度,通過數據管控以防踩踏事件;商場通過客流統計提高運營效率及服務質量;景區統計游客數量方便人流限制,降低公共設備使用壓力。
隨著教育的普及和完善,學校的生源日益增多,快速有效的人流量統計已然成為校園管理中的一個重要參數。人流量統計正在由傳統人工統計向極具自動化的人體識別方向發展,這也對校園管理者提出了更高標準的要求:必須在最短時間內對學生的流量變化做出反應,且需具備學生流量發展趨勢的預見性以及最大限度地減少識別成本,提高校園日常管理決策的科學性,因此校園管理層對人流量數據的統計的重視由來已久。
本文介紹基于百度AI的雙向人流量監控系統,使用Python語言實現,百度人流量統計功能適應各種人群密集場所,不僅可用于人流量的統計,甚至可進行人體的識別及追蹤,準確率高達90%以上。
百度提供的人流量統計功能包括靜態人數統計和動態人數統計。靜態人數統計以頭部為識別對象統計瞬時人數,統計算法沒有人數限制,可適用于教學樓等人群密度場所。靜態人數統計是識別圖片中人數,不支持去重,圖片類型支持PNG、JPG、JPEG、BMP。動態人流量統計以頭肩為識別目標,進行人體檢測和追蹤,用戶可指定區域范圍,根據人員流動方向識別進出人數。
調用百度人流量統計功能,首先需對接百度AI開放平臺,進行鑒權認證,包括以下步驟:
(1)注冊登錄百度智能云平臺,獲取Access Key ID /Secret Access Key密鑰對。
(2)獲取Access Token,運行下面代碼百度平臺將以JSON格式返回Access Token值和時效期。
在進行項目開發時,需要存儲大量歷史人流量數據,雖XML文件與文本文件也可以作為數據的載體,但不易進行管理。經過選型,MySQL數據庫兼容性好,使用便捷,故在此次系統設計中應用。
為了避免在數據庫安裝過程中出現問題,安裝前應詳細地檢查MySQL數據庫使用環境所需的配置組件,例如在缺少Microsoft相關組件時,當進行MySQL5.7的安裝時,系統會顯示由于缺少MySQL的部分模塊無法安裝。
QtCreator是跨平臺的QT IDE,為我們提供圖形化的UI繪制工具。本次系統設計利用Qt來編寫圖形交互界面,在已搭建的Python環境中安裝對應版本的PyQt5庫后,再選擇對應版本的QtCreator就可以進行編碼。
本系統包括三個核心功能:圖片統計,視頻統計,數據查詢。圖片統計要求用戶按照格式上傳一張圖片,調用百度API返回數據;視頻統計可使用本地視頻也可以調用攝像頭實時錄制達到動態統計目標;數據查詢將根據時間統計總人數或者進出人數存儲到數據庫中。功能框如圖1所示。

圖1 系統功能框圖
首先用戶選擇一張圖片,該圖片允許不包含人。靜態統計通過發送post請求,其中請求URL為https://aip.baidubce.com/rest/2.0/image-classify/v1/body_num。請求參數包括三個:(1)參數“area”,可標記單個或多個區域,最多支持10個區域。如果設置“area”參數,坐標必須小于原圖大小,否則設置錯誤。本項目設置單區域,因為攝像頭面向教學樓入口,所以將設置矩形區域進行統計;(2)參數“image” 因為要網絡傳輸圖片到百度AI平臺,所以對圖片進行Base64編碼,網絡傳輸中只能傳輸可打印字符,其大小不能超過4M。Base64是一種基于64個可打印ASCII字符對任意字節數據進行編碼的算法;(3)參數“show”,是否返回渲染圖,默認為“false”,本系統設置為“true”。請求成功后將返回渲染圖以及統計到的人數。靜態統計實測如圖2所示。

圖2 靜態統計實測圖
視頻統計共包括兩個功能,可選擇本地視頻進行統計,或打開攝像頭進行實時統計,兩種方式在統計處理上方法相同。傳入視頻抓拍圖片序列,進行人體追蹤,返回每個人體框的坐標和所屬ID;并根據目標軌跡判斷進出區域行為,進行動態人數統計,返回區域人數,同時可輸出渲染結果圖,包含統計值和跟蹤框渲染。
視頻由一幀一幀圖像組成,如果每幀圖像都發送到百度AI平臺進行統計處理,必將影響效率且浪費資源,所以抽幀頻率設置是否合理十分重要,本系統設置為5 fps,可以做到有效跟蹤,同時滿足百度AI平臺fps要大于2的要求。
動態統計中設置區域參數“area”影響著進出人數的準確性,將預先設定區域坐標傳至百度API,因攝像頭對準教學樓大門,那么門可以作為界限。因不同攝像頭角度不同,需根據實際場景調整區域位置。
本系統采用OpenCV讀取視頻,OpenCV提供一個簡單易用的計算機視覺基礎庫,幫助人們快速構建復雜的視覺應用程序。實例化對象后獲得對象屬性按照百度AI平臺要求的數據格式,發送請求等待百度平臺通過AI算法完成對每幀靜態圖像的識別與處理,將結果返回,多幀連續處理后,達到人流量的動態監測的目標。參數設置如下:
#設置區域參數,返回渲染圖
params = {“area”: “1,1,700,1,700,200,1100,700, 1,700”, “case_id”: 16, “case_init”: “false”, “dynamic”:“true”,”image”: img,”show”: “true”}
不論是靜態統計還是動態統計,只要當人流量大于等于閾值,都會引起預警系統響應,觸發彈窗提示,以便學校相關部門進行干預,避免發生嚴重后果。動態統計實測如圖3所示。

圖3 動態統計實測圖
人流量數據具有一定研究價值,首先學生活動具有一定規律,大數據可幫助教務部門更清晰的規劃課程,提升上課體驗,避免學生過多,教室間互相干擾;其次利用數據可分析風險,避免踩踏事件;最后利用統計的數據合理分配和優化配置資源,如通過監測人流量數據,如某教學樓正門經常同一時間涌入大量學生,可規劃新增一扇門。由此可見,數據統計的存儲十分有意義,所以要將統計到的數據存儲到數據庫中。
本系統使用MySQL數據庫,使用數據庫前需要安裝PyMySQL,PyMySQL是Python3.x版本中用于連接MySQL服務器的一個庫。
連接數據庫并設置配置信息如下:

本次設計主UI界面采用QtCreator進行開發,因在widget.ui中定義了窗口上所有組件的屬性設置、布局,及其信號與槽函數的關聯等。而UI設計器可視化設計的界面都由 Qt 自動解析,并以XML文件的形式保存下來。在界面設計時,對需要訪問的組件修改其 objectName,如各個按鈕、需要讀取輸入的編輯框、需要顯示結果的標簽等,以便在程序里區分。對于不需要程序訪問的組件則無須修改其objectName,如用于界面上組件分組的 GroupBox、Frame、布局等,讓 UI 設計器自動命名即可。
該系統基于百度API人流量統計接口,實現了圖片統計和視頻統計功能,該系統同樣適用于其他場所人流量統計,僅需調整動態統計中區域參數即可。利用實際教學樓場景進行了測試,本場景準確率高達95%以上。所有統計數據存儲與數據庫中,聯合人流量上限告警功能,管理人員通過人流量數據可分析其風險因素,提高教學樓服務能力并排除安全隱患。該系統功能還不完善,光線及網絡延遲等外界因素,會導致準確率下降,除此之外性能也有待提高,后續將進一步優化。