调用百度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,当然这是个例,我试的几个都还不错。

发布了32 篇原创文章 · 获赞 32 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43199584/article/details/98642262