python对图片的人数分析【人群拥挤警告】
一、需求统计
在一个地区,人流密度过大很容易造成踩踏事故,人流量统计动态版可以统计图像中的人体个数和流动趋势,与监控技术结合起来,可以提前预警,进而避免悲剧的发生。
二、申请api接口权限。
网址:点这里
查看生成的应用,查看APIKEY和SecretKey,在后续的代码中替换对应的内容即可执行。
那么好,到这里就要获取Access Token。因为调用API时必须在URL中带上access_token参数,获取Access Token的流程具体详情去看这个官网:
但是官网是以代码的代码发送请求,这时我们可以拼接网址 直接去浏览去请求(我是直接去浏览器请求的):
向授权服务地址https://aip.baidubce.com/oauth/2.0/token
发送请求(推荐使用POST),并在URL中带上以下参数:
- grant_type: 必须参数,固定为
client_credentials
; - client_id: 必须参数,应用的
API Key
; - client_secret: 必须参数,应用的
Secret Key
;
https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】
我们所需要的就是access_token
三、可以去测试,识别图片中的人数了
具体方法参见:看这里
下面是我的代码:
# -*- codeing = utf-8 -*- # @Time : 21:15 # @Auther : ly # @File : test.py # @Software : PyCharm import base64 import json import urllib.parse import urllib.request jishu = input('超过多少人算拥堵,请输入:') count = int(jishu) request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_num" # 二进制方式打开图片文件 这是将图片的输入路径, 后面还有一个输出路径 # 本地路径写法 D:\StudyPython\scrapy\qiutu.jpg f = open('./test4.jpg', 'rb') img = base64.b64encode(f.read()) #字典 params python中的叫法 params = dict() params['image'] = img params['show'] = 'true' params = urllib.parse.urlencode(params).encode("utf-8") #已经请求好的access_tocken access_token = '24.210ea7846e76e190a56e8f1d84e90145.2592000.1610022297.282335-23118272' request_url = request_url + "?access_token=" + access_token request = urllib.request.Request(url=request_url, data=params) request.add_header('Content-Type', 'application/x-www-form-urlencoded') response = urllib.request.urlopen(request) # 获取响应内容 response是响应对象 content = response.read() if content: content = content.decode('utf-8') # 将返回内容解析成json数据 data = json.loads(content) person_num = data['person_num'] person_count = int(person_num) #输出人数 count为你输入的。 if person_count > count: print('图片中一共有%d人 ,状态为拥堵' % person_count) if person_count <= count: print('图片中一共有%d人 ,状态为正常' % person_count) # 保存识别后的图片 img_str = data['image'] img_data = base64.b64decode(img_str) with open('./img/jieguo.jpg', 'wb') as f: f.write(img_data) print("图片保存成功!")
这是结果的截图: