python视频车流量计数_【使用攻略】【图像识别】车流量统计(动态版)
Ai技術(shù)的發(fā)展,催生了智慧城市,智慧交通是其中很重要的一環(huán)。百度AI車流量統(tǒng)計(動態(tài)版)能夠檢測圖片中所有機(jī)動車輛,返回每輛車的類型和坐標(biāo)位置,以及運(yùn)動軌跡。應(yīng)用于智慧交通領(lǐng)域,可以很方便地監(jiān)控城市道路交通情況,實現(xiàn)交通擁堵預(yù)警。利用大數(shù)據(jù)挖掘交通流量規(guī)律,可以對車流進(jìn)行合理疏導(dǎo)。另外,對一些限行城市,還可以通過車牌識別、車型識別等技術(shù),對違規(guī)車輛進(jìn)行監(jiān)控。
一.平臺接入
此步驟比較簡單,不多闡述??蓞⒄罩拔臋n:
https://ai.baidu.com/forum/topic/show/943028
二.接口API分析
1.接口API:
https://ai.baidu.com/docs#/ImageClassify-API/0d270ea1
(1)接口描述
根據(jù)傳入的連續(xù)視頻圖片序列,進(jìn)行車輛檢測和追蹤,返回每個車輛的坐標(biāo)位置、車輛類型(包括小汽車、卡車、巴士、摩托車、三輪車5大類)。在原圖中指定區(qū)域,根據(jù)車輛軌跡判斷駛?cè)?駛出區(qū)域的行為,統(tǒng)計各類車輛的區(qū)域進(jìn)出車流量,可返回含統(tǒng)計值和跟蹤框的渲染圖。
注:邀測的接口,不能直接在控制臺調(diào)用,可通過提交工單申請開通測試權(quán)限。
(2)請求說明
需要用到的信息有:
請求URL:https://aip.baidubce.com/rest/2.0/image-classify/v1/traffic_flow
Header格式:Content-Type:application/x-www-form-urlencoded
(3)返回示例
檢測到2輛小汽車、1輛卡車,3條軌跡,1輛卡車離開區(qū)域:
{
"vehicle_num":
{
"car":2,
"truck":1,
...
"tricycle":0
},
"vehicle_info":
[
{
"ID":3
"location":
{
"left": 100,
"top": 200,
"width": 200,
"height": 400,
}
"type": "car"
},
{
"ID": 5
"location":
{
"left": 400,
"top": 200,
"width": 200,
"height": 400,
}
"type": "car"
},
{
"ID": 6
"location":
{
"left": 600,
"top": 200,
"width": 300,
"height": 400,
}
"type": "truck"
}
],
“vehicle_count”:
{
"car":
{
"in":0,
"out":0
},
"truck":
{
"in":0
"out":1
},
...
}
}
2.獲取access_token
#client_id 為官網(wǎng)獲取的AK, client_secret 為官網(wǎng)獲取的SK
client_id =【百度云應(yīng)用的AK】
client_secret =【百度云應(yīng)用的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.decode("utf-8"))
token_key = token_info['access_token']
return token_key
三.識別結(jié)果
識別結(jié)果方面:選取一段渲染后的輸出圖片,結(jié)果只能用“牛X”來形容。車輛識別結(jié)果比較準(zhǔn)確,車輛分類基本正確。對遠(yuǎn)處車輛識別程度不高,當(dāng)然這里可能受圖片質(zhì)量是否清晰等因素影響。
處理速度方面:每張圖片處理時間在1-2s,相對于視頻來說,略有卡頓。
四.源碼共享
# -*- coding: utf-8 -*-
#!/usr/bin/env python
import os
import requests
import base64
import json
from pprint import pprint
import time
import io
from io import BytesIO
import cv2
import numpy as np
from PIL import Image
import glob
#client_id 為官網(wǎng)獲取的AK, client_secret 為官網(wǎng)獲取的SK
api_key = '77ibV7Kvyo8bMh3FovLzxc6D'
secret_key = 'EdKVNt56ce1FUIdB0oCZYHwO3uPKSiEz'
class Traffic_flowRecognizer(object):
def __init__(self, api_key, secret_key):
self.access_token = self._get_access_token(api_key=api_key, secret_key=secret_key)
self.API_URL = 'https://aip.baidubce.com/rest/2.0/image-classify/v1/traffic_flow' + '?access_token=' \
+ self.access_token
#獲取token
@staticmethod
def _get_access_token(api_key, secret_key):
api = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials' \
'&client_id={}&client_secret={}'.format(api_key, secret_key)
rp = requests.post(api)
if rp.ok:
rp_json = rp.json()
print(rp_json['access_token'])
return rp_json['access_token']
else:
print('=> Error in get access token!')
def get_result(self, params):
rp = requests.post(self.API_URL, data=params)
if rp.ok:
print('=> Success! got result: ')
rp_json = rp.json()
pprint(rp_json)
return rp_json
else:
print('=> Error! token invalid or network error!')
print(rp.content)
return None
#識別車流量
def detect(self):
###對視頻進(jìn)行抽幀后,連續(xù)讀取圖片
WSI_MASK_PATH = 'E:/cheliu/chouzhen/'#存放圖片的文件夾路徑
paths = glob.glob(os.path.join(WSI_MASK_PATH, '*.jpg'))
paths.sort()
data_list = []
c = 1
for path in paths:
f = open(path, 'rb')
img_str = base64.b64encode(f.read())
data_list.append(img_str)
params = {'area':'1,269,400,269,400,180,1,180','case_id':1214,'case_init':'false','image':data_list,'show':'true'}
tic = time.clock()
rp_json = self.get_result(params)
toc = time.clock()
print('單次處理時長: '+'%.2f' %(toc - tic) +' s')
img_b64encode = rp_json['image']
img_b64decode = base64.b64decode(img_b64encode) # base64解碼
#顯示檢測結(jié)果圖片
image = io.BytesIO(img_b64decode)
img = Image.open(image)
img.show()
#存儲檢測結(jié)果圖片
file=open('E:/cheliu/out/'+str(c)+'.jpg','wb')
file.write(img_b64decode)
file.close()
c = c + 1
if __name__ == '__main__':
recognizer = Traffic_flowRecognizer(api_key, secret_key)
recognizer.detect()
五.意見建議
1.目前API接口支持傳入圖片流,視頻預(yù)處理比較復(fù)雜,后續(xù)是否有直接傳入視頻流的接口,這樣的話對用戶會更加友好。
2.對輸入圖片質(zhì)量還要有一定要求,由于拍攝場景的原因,距離遠(yuǎn)、夜晚光線不好等造成圖片模糊,均會影響識別效果,所以調(diào)用接口需要對抓拍圖片進(jìn)行篩選,建議明確圖片質(zhì)量要求。
3.渲染后輸出的圖片,車輛信息文本輸出格式建議優(yōu)化,如前面圖示,輸出文本僅打印出一部分,而且分的太開,顏色也不明顯。
總結(jié)
以上是生活随笔為你收集整理的python视频车流量计数_【使用攻略】【图像识别】车流量统计(动态版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “睡服”面试官系列第十六篇之Symbol
- 下一篇: 前端学习(1436):vue特点