百度AI攻略:人羣擁擠報警

1.需求描述:python

在一個地區,人流密度過大很容易形成踩踏事故,人流量統計動態版能夠統計圖像中的人體個數和流動趨勢,與監控技術結合起來,能夠提早預警,進而避免悲劇的發生。json

2.平臺接入安全

人流量統計動態版接入網址:https://console.bce.baidu.com/ai/?fromai=1#/ai/body/overview/index微信

界面以下圖所示:架構

點擊建立應用,輸入應用名,點擊確認。app

查看生成的應用,查看APIKEY和SecretKey,在後續的代碼中替換對應的內容便可執行。測試

3.調用攻略(Python3)及評測優化

3.1首先認證受權:url

在開始調用任何API以前須要先進行認證受權,具體的說明請參考:3d

http://ai.baidu.com/docs#/Auth/top

具體Python3代碼以下:

# -*- coding: utf-8 -*-

#!/usr/bin/env python

import urllib

import base64

import json

#client_id 爲官網獲取的AK, client_secret 爲官網獲取的SK

client_id =【百度雲應用的AK】

client_secret =【百度雲應用的SK】

#獲取token

def 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_key

3.2人流量統計動態版分析接口調用:

詳細說明請參考:http://ai.baidu.com/docs#/Body-API/1a6628be

接口描述

對於輸入的一張圖片(可正常解碼,且長寬比適宜),識別和統計圖像當中的人體個數(靜態統計,不支持追蹤和去重)。

適用於3米以上的中遠距離俯拍,以頭部爲主要識別目標統計人數,無需正臉、全身照,適應各種人流密集場景(如:機場、車展、景區、廣場等);默認識別整圖中的人數,支持指定不規則區域的人數統計,同時可輸出渲染圖片。

攝像頭硬件選型無特殊要求,分辨率建議720p以上,更低分辨率的圖片也能識別,只是效果可能有差別。暫不適用夜間紅外監控圖片,後續會考慮擴展。

請求說明

HTTP 方法:POST

請求URL:https://aip.baidubce.com/rest/2.0/image-classify/v1/body_num

URL參數:

access_token: 經過API Key和Secret Key獲取的access_token,參考」Access Token獲取」

Header:

Content-Type: application/x-www-form-urlencoded

Body中放置請求參數,參數詳情以下:

返回說明

Python3調用代碼以下:

#保存圖片

def save_base_image(img_str,filename):

    img_data = base64.b64decode(img_str)

    with open(filename, 'wb') as f:

          f.write(img_data)

 

#人流量統計

#filename:原圖片名(本地存儲包括路徑);resultfilename:處理後的文件保存名稱(每一個人打標)

def body_num(filename,resultfilename):

    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 = 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=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)

        data = json.loads(content)

        #print(data)

        person_num=data['person_num']

        print ('person_num',person_num)

        img_str=data['image']

        save_base_image(img_str,resultfilename)

 

body_num('crowd1.jpg','crowd1_num.jpg')

3.3.功能評測:

選用不一樣的數據對圖片流量統計動態版的效果進行測試,具體效果以下:

person_num 4

person_num 8

 

針對不一樣場景進行測試,整體來看仍是很準確的。。

3.5 應用前景:

安防監控:實時監測機場、車站、展會、展館、景區、學校、體育場等公共場所的人流量,及時導流、限流,預警核心區域人羣過於密集等安全隱患

智能零售:統計商場、門店的進出人流量,分析消費者重點關注、停留的區域,支持店鋪規劃、客羣導流、貨品陳列優化、門店選址、進銷存管理等應用

駕駛監測:針對客運車輛,實時監控上下車和車內乘客數量,替代人工清點的方式,自動統計人數,分析空座、超載狀況,節省人力,提高安全性

 

4.應用方案:

4.1 總體方案

主要功能包括:

經過監控系統採集關鍵區域的照片。

經過百度AI對照片進行分析,判斷人數。

對區域人數進行分析、告警。若是須要,啓動應急預案。

經過短信網關,APP,電話,監控大屏等執行應急預案。

總體架構以下圖所示:

4.2 關鍵代碼:

代碼以下:

#保存圖片

def save_base_image(img_str,filename):

    img_data = base64.b64decode(img_str)

    with open(filename, 'wb') as f:

          f.write(img_data)

 

#人流量統計

#filename:原圖片名(本地存儲包括路徑);resultfilename:處理後的文件保存名稱(每一個人打標)

def body_num(filename,resultfilename):

    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 = 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=params)

    request.add_header('Content-Type', 'application/x-www-form-urlencoded')

    response = urllib.request.urlopen(request)

    content = response.read()

    person_num=0

    if content:

        #print(content)

        content=content.decode('utf-8')

        #print(content)

        data = json.loads(content)

        #print(data)

        person_num=data['person_num']

        print ('person_num',person_num)

        img_str=data['image']

        save_base_image(img_str,resultfilename)

    return person_num

 

#人數預警例代碼

#filename:原圖片名(本地存儲包括路徑);resultfilename:處理後的文件保存名稱(每一個人打標)

#warningnum告警人數

def crowd_num_warning(filename,resultfilename,warningnum):

    person_num=body_num(filename,resultfilename)

    if person_num>warningnum:

        warningmessage="警告:人數過於擁擠,最大人數"+str(warningnum)+",當前人數:"+str(person_num)

        print(warningmessage)

        #TODO:增長其餘預警處理代碼,好比將信息經過短信,APP發佈給相關人

crowd_num_warning('crowd2.jpg','crowd2_num.jpg',30)

4.3 效果測試:

應用場景1:假設一個路口安全最大人數30人,則監控系統按期執行crowd_num_warning(監控圖片,處理後圖片名,30),測試結果以下: 

警告信息以下:

警告:人數過於擁擠,最大人數30,當前人數:65。

應用場景2:假設一個候車室安全人數300人,則監控系統按期執行crowd_num_warning(監控圖片,處理後圖片名,300),測試結果以下: 

警告信息以下:

警告:人數過於擁擠,最大人數300,當前人數:369

經過對不一樣視角,不一樣解析度的圖片進行測試,發現識別的效果都很好。再與自動呼叫,短信,微信等平臺結合起來就能夠造成對公共安全解決方案,在過於擁擠的時候儘快的通知相關人員,啓動疏散方案。

相關文章
相關標籤/搜索