python视频车流量计数_【使用攻略】【图像识别】车流量统计(动态版)
Ai技術的發(fā)展,催生了智慧城市,智慧交通是其中很重要的一環(huán)。百度AI車流量統(tǒng)計(動態(tài)版)能夠檢測圖片中所有機動車輛,返回每輛車的類型和坐標位置,以及運動軌跡。應用于智慧交通領域,可以很方便地監(jiān)控城市道路交通情況,實現(xiàn)交通擁堵預警。利用大數(shù)據(jù)挖掘交通流量規(guī)律,可以對車流進行合理疏導。另外,對一些限行城市,還可以通過車牌識別、車型識別等技術,對違規(guī)車輛進行監(jiān)控。
一.平臺接入
此步驟比較簡單,不多闡述。可參照之前文檔:
https://ai.baidu.com/forum/topic/show/943028
二.接口API分析
1.接口API:
https://ai.baidu.com/docs#/ImageClassify-API/0d270ea1
(1)接口描述
根據(jù)傳入的連續(xù)視頻圖片序列,進行車輛檢測和追蹤,返回每個車輛的坐標位置、車輛類型(包括小汽車、卡車、巴士、摩托車、三輪車5大類)。在原圖中指定區(qū)域,根據(jù)車輛軌跡判斷駛入/駛出區(qū)域的行為,統(tǒng)計各類車輛的區(qū)域進出車流量,可返回含統(tǒng)計值和跟蹤框的渲染圖。
注:邀測的接口,不能直接在控制臺調用,可通過提交工單申請開通測試權限。
(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 =【百度云應用的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.decode("utf-8"))
token_key = token_info['access_token']
return token_key
三.識別結果
識別結果方面:選取一段渲染后的輸出圖片,結果只能用“牛X”來形容。車輛識別結果比較準確,車輛分類基本正確。對遠處車輛識別程度不高,當然這里可能受圖片質量是否清晰等因素影響。
處理速度方面:每張圖片處理時間在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):
###對視頻進行抽幀后,連續(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解碼
#顯示檢測結果圖片
image = io.BytesIO(img_b64decode)
img = Image.open(image)
img.show()
#存儲檢測結果圖片
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接口支持傳入圖片流,視頻預處理比較復雜,后續(xù)是否有直接傳入視頻流的接口,這樣的話對用戶會更加友好。
2.對輸入圖片質量還要有一定要求,由于拍攝場景的原因,距離遠、夜晚光線不好等造成圖片模糊,均會影響識別效果,所以調用接口需要對抓拍圖片進行篩選,建議明確圖片質量要求。
3.渲染后輸出的圖片,車輛信息文本輸出格式建議優(yōu)化,如前面圖示,輸出文本僅打印出一部分,而且分的太開,顏色也不明顯。
總結
以上是生活随笔為你收集整理的python视频车流量计数_【使用攻略】【图像识别】车流量统计(动态版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “睡服”面试官系列第十六篇之Symbol
- 下一篇: Python实现批量导入Markdown