調用百度Ai飛槳平臺人流量估計API【親測可用】

最近搞了下高密度人羣數量估計,參考了很多資料,首先是想自己動手搭建一個CSRnet進行訓練,這個網絡的代碼實現可以參照

論文和代碼如下,有興趣的可以動手自己做:
CVPR 2018 Paper : https://arxiv.org/abs/1802.10062

Keras實現:https://github.com/DiaoXY/CSRnet

官方Pytorch實現:https://github.com/leeyeehoo/CSRNet-pytorch
**注意點:**使用Keras代碼比較特殊,預處理階段很耗時,4g的筆記本就別想跑完了(比如我)
訓練和測試的順序是:‘Preprocess.ipynb(預處理)’ ——>‘Model.ipynb(訓練參數)’——>‘Inference.ipynb(模型測試)’
迴歸法對人羣計數:根據圖像迴歸人羣密度圖,直接計算人羣數量
通過論文中的對比數據發現,相較於Crowdnet、MCNN、SCNN等方法,CSRnet是目前計算擁擠人羣密度的最好的迴歸方法模型。
今天偶然發現百度的Ai平臺有人流量統計,我使用這個接口進行分析,發現效果還不錯,個人感覺應該優於我自己訓練CSRnet,而且支持動態圖像,比如商業區統計人流量。

因爲我的開發能力菜,所以摸索了一下午才搞出來。(其實百度的關於API的文檔是真的該更新了,都9102年了呀)百度Ai參考文檔
大概流程是:註冊百度雲賬號——>按照嚮導申請相關的應用(API)——>成功後應用列表中可見client_id 爲官網獲取的AK, client_secret 爲官網獲取的SK——>接下來可以打開你的本地編輯器了
我用的是jupyter Notebook:

# encoding:utf-8
import base64
import urllib
import urllib3
from PIL import Image
import matplotlib.pyplot as plt

 ###第一步:獲取access_token
# client_id 爲官網獲取的AK, client_secret 爲官網獲取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=***個人的***&client_secret=***個人的***&'#注意最後有&不要刪掉了
request = urllib.request.Request(host)
request.add_header('Content-Type', 'application/json; charset=UTF-8')
response = urllib.request.urlopen(request)
content = response.read()
if (content):
    print(type(content))#<class 'bytes'>
content_str=str(content, encoding="utf-8")
content_dir = eval(content_str)
access_token = content_dir['access_token']
# '''
# 第二步調用API進行人流量統計
# '''
request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_num"#這裏我調用的是人流量統計—body_num,注意區分
# # 二進制方式打開圖片文件
path = 'testdata/IMG_160.jpg'
image = Image.open(path)
plt.figure("Original image")# 顯示原圖
plt.imshow(image)
f = open(path,'rb')
img = base64.b64encode(f.read())
params = {"image":img} #注意百度給的文檔是說可以用show=true輸出圖片,正確的參數格式應該是“show”:"true"
params = urllib.parse.urlencode(params).encode("utf-8")  #注意坑encode('utf-8')
request_url = request_url + '?access_token=' + access_token
print(request_url)
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().decode("utf-8")  #注意坑decode('utf-8'),別問我爲啥解碼,反正不加好像不行
if content:
    print(content)

好了,然後顯示結果,總體不錯,每天的免費調取次數爲50000次。
{“person_num”: 111, “log_id”: 2444277999205366182}
真實值爲119,CSRnet預測爲100,當然這是個例,我試的幾個都還不錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章