0%

人流统计模块说明

人流统计模块讲解

我们使用onenet提供的AI平台的接口

人体检测

能力介绍

接口能力:检测并定位图片中无遮挡的人体,返回人体位置和置信度(0~1),可实现多人体检测;

图片格式:现支持PNG、JPG、JPEG、BMP,不支持GIF图片;

图片大小:上传图片大小不超过2M;图片中识别的人体不被遮挡,人体区域高度120像素以上,宽度80像素以上;

业务应用:智慧零售人流量统计、人体跟踪、安防监控。

API调用方式

请求方式 POST
url http://ai.heclouds.com:9090/v1/aiApi/picture/BODY_RECO
http-header token: xxxxxxxxxxxxxxxxx //通过AI Key和Secret Key鉴权(推荐)
request-body { "picture": ["String"] //一张图片的base64图片编码

下面是python的示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import requests
import json
import base64

url = 'http://ai.heclouds.com:9090/v1/aiApi/picture/BODY_RECO'
headers ={
'Content-Type':'application/json',
'token':'xxxxxxxxxxxxxxxxx(用户鉴权接口返回结果中的accessToken)'
}


# 打开图片文件
file = open('D:/Desktop/体验图片/03人体检测/body5.png','rb')

# 将其转为base64信息
base64Str = base64.b64encode(file.read()).decode()

# 关闭打开的文件
file.close()

# 构造接口调用参数
data = {
'picture':[base64Str]
}

# POST 方式调用
response = requests.request("POST", url, headers=headers, data=json.dumps(data))

# 打印结果
print(response.text)

返回示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"stateCode": "0x0000", //结果状态码,16进制。"0x0000":成功
"message": "success", //返回信息
"data": Array //JSON对象数组,每一个JSON对象表示一个人体,包含了人体在图片中的位置、大小,标签,置信度
}
例如:
[
{
//人体在图片中的位置、大小
"box": {
"x": 50,
"y": 270,
"width": 795,
"height": 978
},
//置信度(0~1)
"confidence": 0.9998502731323242,
//标签
"label": "person"
}
]
注意:
http错误码返回"401"时表示"未经授权",造成的原因有:未使用或使用的token不正确;使用的token已经超时失效。

代码说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import requests
import json
import base64

# 获得tocken对应的keys
aiKey = 'd071c2afa0f14fb28d40be114e524984'
secretKey = '209e5e8fb0b64299b671cc8a0c3a3592'



# 获取access Token
def get_access_token(aikey, seckey):
tkUrl = 'http://ai.heclouds.com:9090/v1/user/app/accessToken?aiKey=%s&secretKey=%s' % (aiKey, secretKey)
tkheader = {
"Content-Type" : "application/json"
}
# 获得tocken返回的json
r = requests.get(url=tkUrl, headers=tkheader).json()
return r["data"]["accessToken"]



def getRes():
url = 'http://ai.heclouds.com:9090/v1/aiApi/picture/BODY_RECO'
headers ={
'Content-Type':'application/json',
'token': get_access_token(aiKey, secretKey)
}
# 打开图片文件
file = open('1.png','rb')
# 将其转为base64信息
base64Str = base64.b64encode(file.read()).decode()
# 关闭打开的文件
file.close()
# 构造接口调用参数
data = {
'picture':[base64Str]
}
# POST 方式调用
response = requests.request("POST", url, headers=headers, data=json.dumps(data)).json()
# 打印结果
# print(len(response["data"]))
return len(response["data"])


if __name__ == '__main__':
getRes()

注释已经讲解的很清楚了。上一个函数是获得accessToken的函数,下一个就是获取答案,由于答案是返回一个json数组,每一个元素就是一个人体,一个框框的信息。我们直接次len函数获得数组的元素个数。我们就可以获得实时人数。