【使用攻略】【人流量統計】
1. 整體說明
每年寒暑假,五一,十一,春運等時候,特定的旅游景點,車站等地區會有大量的人流,而在一個地區,人流密度過大很容易造成踩踏事故,人流量統計可以統計影像中的人體個數和流動趨勢,與監控技術結合起來,可以提前預警,進而避免悲劇的發生,針對這一方面我前期曾經寫過一個自動告警的方案,這次人流量統計又有了進一步的升級,支持area引數框選多個區域進行區域人數統計,可以對區域進行更加準確的管理,這次對方案進行了升級,形成了人群流量監控,安全管理升級版方案,
2.平臺接入
人流量統計動態版接入網址:https://console.bce.baidu.com/ai/?fromai=1#/ai/body/overview/index
具體接入方式比較簡單,可以參考我的另一個帖子,這里就不重復了:
http://ai.baidu.com/forum/topic/show/943327
3.呼叫攻略(Python3)及評測
3.1首先認證授權:
在開始呼叫任何API之前需要先進行認證授權,具體的說明請參考:
http://ai.baidu.com/docs#/Auth/top
具體Python3代碼如下:
# -*- coding: utf-8 -*-#!/usr/bin/env pythonimport urllibimport base64import json#client_id 為官網獲取的AK, client_secret 為官網獲取的SKclient_id =【百度云應用的AK】client_secret =【百度云應用的SK】#獲取tokendef get_token(): host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret request = urllib.request.Request(host) request.add_header('Content-Type', 'application/json; charset=UTF-8') response = urllib.request.urlopen(request) token_content = response.read() if token_content: token_info = json.loads(token_content) token_key = token_info['access_token'] return token_key3.2人流量統計分析介面呼叫:
詳細說明請參考:https://ai.baidu.com/docs#/Body-API/1a6628be
介面描述
對于輸入的一張圖片(可正常解碼,且長寬比適宜),識別和統計影像當中的人體個數(靜態統計,不支持追蹤和去重),
適用于3米以上的中遠距離俯拍,以頭部為主要識別目標統計人數,無需正臉、全身照,適應各類人流密集場景(如:機場、車展、景區、廣場等);默認識別整圖中的人數,支持指定不規則區域的人數統計,同時可輸出渲染圖片,
攝像頭硬體選型無特殊要求,解析度建議720p以上,更低解析度的圖片也能識別,只是效果可能有差異,暫不適用夜間紅外監控圖片,后續會考慮擴展,
注:介面默認回傳整張圖片中的人數,如需統計特定框選區域的人數,請使用area引數添加識別區域坐標資訊,
呼叫代碼如下:import urllibimport base64import jsonimport time#人流量統計#filename:原圖片名(本地存盤包括路徑);dehazedfilename:處理后的檔案保存名稱def body_num_v2(filename,area,dehazedfilename): request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_num" # 二進制方式打開圖片檔案 f = open(filename, 'rb') img = base64.b64encode(f.read()) params = dict() params['image'] = img params['show'] = 'true' #params['area'] = '184,8,4,296,113,374,257,8;290,51,135,371,587,384,438,41' params['area'] = area params = urllib.parse.urlencode(params).encode("utf-8") #params = json.dumps(params).encode('utf-8') access_token = get_token() request_url = request_url + "?access_token=" + access_token request = urllib.request.Request(url=request_url, data=https://www.cnblogs.com/AIBOOM/p/params) request.add_header('Content-Type', 'application/x-www-form-urlencoded') response = urllib.request.urlopen(request) content = response.read() if content: #print(content) content=content.decode('utf-8') #print (content) #print(content) data = https://www.cnblogs.com/AIBOOM/p/json.loads(content) #print(data) person_num=data['person_num'] area_counts=data['area_counts'] print ('person_num',person_num) print ('area_counts',area_counts) img_str=data['image'] save_base_image(img_str,dehazedfilename) area='4,89,104,112,166,192,109,330,9,399;3,24,94,8,258,58,452,206,380,386,171,587,10,422,203,250,142,86;515,163,538,310,952,250,757,151'body_num_v2("../img/crowd2.jpg",area,"../img/crowd2_num.jpg")4.結果測驗:
處理時長:3.51秒
person_num 276
area_counts [110, 158]
處理時長:3.19秒
person_num 901
area_counts [0, 733, 167]
測驗結果:人群流量監控支持不規則多邊形,可以更好的貼合實際的應用區域,識別效果比較準確,識別的速度為幾秒鐘,對于一般應用足夠了,
5.整體方案
要實作人群監控及預警,除了人流分析外,號需要一下功能,包括:
對監控系統進行管理,對關注區域進行劃分,
通過監控系統采集關鍵區域的照片,
通過百度AI對照片進行分析,判斷不同區域人數,
對區域人數進行分析、告警,如果需要,啟動應急預案,
通過短信網關,APP,電話,監控大屏等執行應急預案,
整體架構如下圖所示:
例如對于案例2:
中,設定的是:區域1一個人也不應該有(因為禁止游泳),區域2報警閾值650,區域3報警閾值200.
那么在分析后就會觸發針對區域2的報警,“區域2人員過多,最大650人,現已733人,請啟動限流疏散措施”,
6.測驗結果和優化建議
人群流量監控支持不規則多邊形,可以更好的貼合實際的應用區域,識別效果比較準確,識別的速度為幾秒鐘,如果能夠更快一些就更好了,
建議增加人群密度分布分析選項,可以回傳影像人群最密集的區域,或者形成人群熱力圖并回傳,
作者:才能我浪費99
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/11212.html
標籤:其他
上一篇:Vim命令
