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:StudyPythonscrapyqiutu.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("图片保存成功!")

这是结果的截图:

 

原文地址:https://www.cnblogs.com/moxihuishou/p/14108382.html