前言
在一个地区,人流密度过大很容易造成踩踏事故,人流量统计动态版可以统计图像中的人体个数和流动趋势,与监控技术结合起来,可以提前预警,进而避免悲剧的发生。
1.平台接入
界面如下图所示:
点击创建应用,输入应用名,点击确认。
查看生成的应用,查看APIKEY和SecretKey,在后续的代码中替换对应的内容即可执行。
3.调用攻略(Python3)及评测
- 首先认证授权:
在开始调用任何API之前需要先进行认证授权,具体的说明请参考:
http://ai.baidu.com/docs#/Auth/top
具体Python3代码如下:
# -*- coding: utf-8 -*-#!/usr/bin/env pythonimport urllibimport base64import json#client_id 为官网获取的AK, client_secret 为官网获取的SKclient_id =【百度云应用的AK】client_secret =【百度云应用的SK】#获取tokendef 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) token_key = token_info['access_token'] return token_key
- 人流量统计动态版分析接口调用:
详细说明请参考:http://ai.baidu.com/docs#/Body-API/1a6628be
接口描述
对于输入的一张图片(可正常解码,且长宽比适宜),识别和统计图像当中的人体个数(静态统计,不支持追踪和去重)。
适用于3米以上的中远距离俯拍,以头部为主要识别目标统计人数,无需正脸、全身照,适应各类人流密集场景(如:机场、车展、景区、广场等);默认识别整图中的人数,支持指定不规则区域的人数统计,同时可输出渲染图片。
摄像头硬件选型无特殊要求,分辨率建议720p以上,更低分辨率的图片也能识别,只是效果可能有差异。暂不适用夜间红外监控图片,后续会考虑扩展。
请求说明
HTTP 方法:POST
请求URL:https://aip.baidubce.com/rest/2.0/image-classify/v1/body_num
URL参数:
access_token: 通过API Key和Secret Key获取的access_token,参考”Access Token获取”
Header:
Content-Type: application/x-www-form-urlencoded
Body中放置请求参数,参数详情如下:
返回说明
Python3调用代码如下:
#保存图片def save_base_image(img_str,filename): img_data = base64.b64decode(img_str) with open(filename, 'wb') as f: f.write(img_data) #人流量统计#filename:原图片名(本地存储包括路径);resultfilename:处理后的文件保存名称(每个人打标)def body_num(filename,resultfilename): request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_num" # 二进制方式打开图片文件 f = open(filename, 'rb') img = base64.b64encode(f.read()) params = dict() params['image'] = img params['show'] = 'true' params = urllib.parse.urlencode(params).encode("utf-8") #params = json.dumps(params).encode('utf-8') access_token = get_token() 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) content = response.read() if content: #print(content) content=content.decode('utf-8') #print(content) data = json.loads(content) #print(data) person_num=data['person_num'] print ('person_num',person_num) img_str=data['image'] save_base_image(img_str,resultfilename) body_num('crowd1.jpg','crowd1_num.jpg')
(上篇完)
下篇预告:
接下来会写出Python处理效果展现对比,以及使用方案。另外小编有一套自学资料,需要的朋友可以回复【01】获取。