一、整體方案:
思路:整合百度AI功能,通過百度AI解決、優化在公交運行程序中遇到的運營、管理、安全等方面的問題,具體如下:
安全方面:
通過駕駛員檢測+語音合成,對駕駛員狀態進行實時檢測,跟蹤,告警,
通過人流量統計對車內人數進行跟蹤,在人數過多的時候告警,
通過危險行為識別功能對駕駛室及車輛內部的危險行為進行識別,提出警告,并上傳后臺系統,啟動安全預案,將危險控制在萌芽狀態,
經營方面:
通過車內和車站人流量識別,判斷車內乘客數量上傳后臺系統,對車輛調度計劃進行優化,
整體方案如圖所示:
二、相關功能介紹:
人流量統計
統計影像中的人體個數和流動趨勢,以頭肩為主要識別目標統計人數,無需正臉、全身照,適應人群密集、各種出入口場景,包括:
靜態人流量統計:適用于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_danger
三、關鍵呼叫代碼(Python3)
#駕駛行為識別:
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=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()
end = time.perf_counter()
print('處理時長:'+'%.2f'%(end-begin)+'秒')
if content:
content=content.decode('utf-8')
data = https://www.cnblogs.com/AIBOOM/p/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=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()
person_num=0
if content:
#print(content)
content=content.decode('utf-8')
#print(content)
data = https://www.cnblogs.com/AIBOOM/p/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=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)
data = https://www.cnblogs.com/AIBOOM/p/json.loads(content)
print(data)
for item in data['result']:
print ('行為:',item['name'])
print ('分數:',item['score'])
四、相關功能測驗:
4.1 安全管理
(一)首先是駕駛行為分析,針對駕駛員的抽煙,打手機等不規范行為:
人數: 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,很準確(右上角有一個穿白衣服人的背影)
結合車輛人的數量和車站人的數量就可以進行科學調度,對于這個例子來說,可以適當增加下一輛公交的發車時間了,
五、測驗結論及展望:
通過對百度AI功能進行測驗,發現識別的效果都很好,百度AI能快速、準確的識別各種風險,對人數的統計也非常的準確,針對現在公共出行的安全和管理的痛點進行了很好的解決,現在可以直接落地的技術包括:
安全方面:通過駕駛員檢測+語音合成,對駕駛員狀態進行實時檢測,跟蹤,告警;通過人流量統計對車內人數進行跟蹤,在人數過多的時候告警;通過危險行為識別功能對駕駛室及車輛內部的危險行為進行識別,提出警告,并上傳后臺系統,啟動安全預案,將危險控制在萌芽狀態,
經營方面:通過車內和車站人流量識別,判斷車內乘客數量上傳后臺系統,對車輛調度計劃進行優化,
再配套開發對應的管理平臺等平臺結合起來就可以形成一整套的公交安全運營解決方案,對于提高公交運營的安全性和運營效率會有非常的的幫助,結合百度云技術、AI技術與開發平臺,實作端云結合,讓應用快速落地,在結合未來的全自動AI駕駛,百度城市大腦,相信公共出行會越來越安全、便捷,
作者:worddict
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/5471.html
標籤:其他
