1、總體方案:
思路:整合百度AI功能,經過百度AI解決、優化在公交運行過程當中遇到的運營、管理、安全等方面的問題。具體以下:json
安全方面:
經過駕駛員檢測+語音合成,對駕駛員狀態進行實時檢測,跟蹤,告警。
經過人流量統計對車內人數進行跟蹤,在人數過多的時候告警。
經過危險行爲識別功能對駕駛室及車輛內部的危險行爲進行識別,提出警告。並上傳後臺系統,啓動安全預案,將危險控制在萌芽狀態。安全
經營方面:
經過車內和車站人流量識別,判斷車內乘客數量上傳後臺系統,對車輛調度計劃進行優化。app
總體方案如圖所示:ide
2、相關功能介紹:
人流量統計
統計圖像中的人體個數和流動趨勢,以頭肩爲主要識別目標統計人數,無需正臉、全身照,適應人羣密集、各類出入口場景,包括:
靜態人流量統計:適用於3米以上的中遠距離俯拍,以頭部爲識別目標統計圖片中的瞬時人數;無人數上限,普遍適用於機場、車站、商場、展會、景區等人羣密集場所
動態人流量統計:面向門店、通道等出入口場景,以頭肩爲識別目標,進行人體檢測和追蹤,根據目標軌跡判斷進出區域方向,實現動態人數統計,返回區域進出人數
詳細說明見:
https://ai.baidu.com/tech/body/num測試
駕駛行爲分析:
針對車載場景,識別駕駛員使用手機、抽菸、不繫安全帶、雙手離開方向盤等動做姿態,分析預警危險駕駛行爲,提高行車安全性。能夠針對出租車、客車、公交車、貨車等各種營運車輛,實時監控車內狀況,識別駕駛員抽菸、使用手機、未系安全帶等危險行爲,及時預警,下降事故發生率,保障人身財產安全
詳細說明見:
https://ai.baidu.com/tech/body/driver優化
危險行爲識別:
針對5s內的監控視頻片斷,識別行爲類別,目前支持7類行爲:單人-情緒性指人、單人-摔倒、單人-激烈抱怨、單人-砸東西、單人-正常、雙人-危險(包含出拳/拉扯/推搡/激烈摟抱/砸按/踢踹等)、雙人-正常。
詳細說明見:
https://ai.baidu.com/tech/body/danger
文檔:https://ai.baidu.com/docs#/Body-API/19f2f5e1
請求URL:https://aip.baidubce.com/rest/2.0/video-classify/v1/body_dangerurl
3、關鍵調用代碼(Python3)rest
#駕駛行爲識別: import urllib import base64 import json import time #client_id 爲官網獲取的AK, client_secret 爲官網獲取的SK client_id = 'XXXXXXXX' client_secret = 'XXXXXXXXX' #獲取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 #駕駛行爲識別 def driver_behavior(filename): request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/driver_behavior" print(filename) # 二進制方式打開圖片文件 f = open(filename, 'rb') img = base64.b64encode(f.read()) params = dict() params['image'] = img params = urllib.parse.urlencode(params).encode("utf-8") access_token = get_token() begin = time.perf_counter() 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() end = time.perf_counter() print('處理時長:'+'%.2f'%(end-begin)+'秒') if content: content=content.decode('utf-8') data = json.loads(content) print('人數:',data['person_num']) persons=data['person_info'] print (persons) #人流量統計 def body_num(filename): 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) return person_num
#危險行爲識別 #filename:原圖片名(本地存儲包括路徑) def body_danger(filename): request_url = "https://aip.baidubce.com/rest/2.0/video-classify/v1/body_danger" # 二進制方式打開圖片文件 f = open(filename, 'rb') img = base64.b64encode(f.read()) params = dict() params['data'] = img 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) for item in data['result']: print ('行爲:',item['name']) print ('分數:',item['score'])
4、相關功能測試:code
4.1 安全管理orm
(一)首先是駕駛行爲分析,針對駕駛員的抽菸,打手機等不規範行爲:
人數: 1
使用手機: 0.10
抽菸: 0.40
未系安全帶: 0.81
雙手離開方向盤: 0.24
視角未看前方: 0.16
警告:未系安全帶
人數: 1
使用手機: 0.95
抽菸: 0.01
未系安全帶: 0.80
雙手離開方向盤: 0.95
視角未看前方: 0.98
警告:使用手機 未系安全帶 雙手離開方向盤 視角未看前方
(二)而後是針對駕駛室的危險行爲,尤爲是針對駕駛員的各類危險行爲。這裏之前一段時間的重慶萬州的公交事故的駕駛室監控視頻爲例。由於社區不支持視頻,因此使用圖片示意。
你們能夠經過微博地址查看視頻:http://t.cn/EwM3WqQ
識別的速度很快,識別的內容以下:
行爲: 雙人-危險
分數: 0.954391598701477
能夠發現,百度AI快速的識別了危險行爲,並且危險分數很高。在系統的支持下,在自動報警的同時,經過語音合成技術大聲語音警告:「對公共車輛駕駛員的暴力行爲是違法的,爲了全部人的安全請馬上中止!!!」
4.2 運營管理
對車輛內部及車站人數的統計,進而對車輛調度進行優化,同時也能夠防止車輛過於擁擠產生踩踏事故。例如對下圖的識別。
人數:6,未超過最大載荷。車內安全。
車站人數:8,很準確(右上角有一個穿白衣服人的背影)
結合車輛人的數量和車站人的數量就能夠進行科學調度,對於這個例子來講,能夠適當增長下一輛公交的發車時間了。
5、測試結論及展望:
經過對百度AI功能進行測試,發現識別的效果都很好。百度AI能快速、準確的識別各類風險,對人數的統計也很是的準確。針對如今公共出行的安全和管理的痛點進行了很好的解決,如今能夠直接落地的技術包括:
安全方面:經過駕駛員檢測+語音合成,對駕駛員狀態進行實時檢測,跟蹤,告警;經過人流量統計對車內人數進行跟蹤,在人數過多的時候告警;經過危險行爲識別功能對駕駛室及車輛內部的危險行爲進行識別,提出警告。並上傳後臺系統,啓動安全預案,將危險控制在萌芽狀態。
經營方面:經過車內和車站人流量識別,判斷車內乘客數量上傳後臺系統,對車輛調度計劃進行優化。
再配套開發對應的管理平臺等平臺結合起來就能夠造成一整套的公交安全運營解決方案,對於提升公交運營的安全性和運營效率會有很是的的幫助。結合百度雲技術、AI技術與開發平臺,實現端雲結合,讓應用快速落地。在結合將來的全自動AI駕駛,百度城市大腦,相信公共出行會愈來愈安全、便捷。
做者:worddict