百度智能云人体分析云服务-私有化部署方案接口调用指南 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
产品推荐: 1、安全稳定的云服务器租用,2核/2G/5M仅37元,点击抢购>>>; 2、高防物理服务器20核/16G/50M/500G防御仅350元,点击抢购>>> 3、百度智能建站(五合一网站)仅880元/年,点击抢购>>> 模板建站(PC+手机站)仅480元/年,点击抢购>>> 4、阿里云服务器2核2G3M仅99元/年、2核4G5M仅199元/年,新老同享,点击抢购>>> 5、腾讯云服务器2核2G4M仅99元/年、新老同享,点击抢购>>> 点击这里申请百度智能云特邀VIP帐号,立即体验人体分析>>> 百度智能云人体分析云服务-私有化部署方案接口调用指南 Hi,您好,欢迎使用百度人体分析私有化部署产品。 人体分析私有化部署包部署成功后,即可获得与在线API基本完全相同的接口,相关接口将会启动,即可参考本文档开始调用测试。 人体分析的各个接口拆分为不同的私有部署包,人体关键点识别、人流量统计、人体检测、人体属性识别(单人版)、手势识别、人像分割、手部关键点识别、驾驶行为分析对应8个不同的部署包,方便选取所需能力灵活应用。 接口能力介绍1、人体关键点识别 检测图片中的所有人体,识别每个人体的21个主要关键点,包含四肢、脖颈、五官等部位,同时可输出人体的坐标信息。支持多人检测、人体位置重叠、遮挡、背面、侧面、中低空俯拍、大动作等复杂场景。
注:接口会返回人体坐标框和每个关键点的置信度分数,在应用时可综合置信度score分数,过滤掉置信度低的“无效人体”,推荐的过滤阈值在下文"接口调用说明"部分展开。 2、人体检测 检测图像中的所有人体,返回每个人体的矩形框位置;支持人体重叠、遮挡、截断、背面、侧面、动作变化等复杂场景。人体像素需大于60px * 60px。 3、人体属性识别(单人版) 输入单个人体的图片,识别人体的静态属性和行为,共支持28种属性。主要适用于中低空大角度斜拍视角,支持人体轻度重叠、轻度遮挡、背面、侧面等不同拍摄角度。
注:接口返回的属性信息包括人体的遮挡、截断情况,在应用时可基于此过滤掉“无效人体”,比如严重遮挡、严重截断的人体。 4、人流量统计 识别和统计图像当中的人体个数(静态统计,不支持追踪和去重);支持框定多个不规则区域统计局部人数,同时可输出渲染图片。 适用于3米以上的中远距离俯拍,5米以上为佳,以头部为主要识别目标统计人数,无需正脸、全身照,适应各类人流密集场景。支持轻度畸变的鱼眼摄像头。 5、手势识别 识别图片中的手势类型,返回手势名称、手势矩形框、概率分数,可识别24种常见手势,适用于手势特效、智能家居手势交互等场景。
适用于3米以内的拍摄距离,1米内为佳,自拍和他人拍摄均支持,拍摄距离尽量近一些,否则手势目标太小,容易漏识别。 6、人像分割 识别人体的轮廓范围,与背景进行分离,适用于拍照背景替换、照片合成、身体特效等场景。输入正常人像图片,返回分割后的二值结果图、灰度图、透明背景的人像图(png格式)。 美颜、P图等图片美化手段会影响分割效果,请使用原图进行分割。 7、手部关键点识别 检测图片中的手部,输出手部坐标框、21个骨节点的坐标信息。当前主要适用于图片中单个手部的情况,图片中同时存在多个手部时,识别效果可能欠佳。 8、驾驶行为分析 针对车载场景,识别驾驶员使用手机、抽烟、不系安全带、未佩戴口罩、闭眼、打哈欠、双手离开方向盘等动作姿态,分析预警危险驾驶行为,提升行车安全性。 接口格式说明变量类型定义
返回格式
{
"error_code" : 0, //错误码 0代表成功
"error_msg" : "SUCCESS", //错误信息
"result" : {...} //返回结果 具体内容详见相关接口
"log_id" : 3535325235 //请求的日志id
"timestamp" : 1512391548 //请求到达的时间戳 精确到秒级
"cached" : 0 //未启用 无需处理
} 接口调用说明人体关键点识别检测图片中的所有人体,识别每个人体的21个主要关键点,包含四肢、脖颈、五官等部位,同时可输出人体的坐标信息。 21个关键点的位置:头顶、左耳、右耳、左眼、右眼、鼻子、左嘴角、右嘴角、脖子、左肩、右肩、左手肘、右手肘、左手腕、右手腕、左髋部、右髋部、左膝、右膝、左脚踝、右脚踝。示意图如下: 调用接口的地址示例:[192.168.0.1]:8124/GeneralClassifyService/classify,其中ip需要替换为用户自己服务器的ip,端口默认为:8124 路径 /GeneralClassifyService/classify 请求参数
请求参数构造及python代码示例 请求参数为json格式,请求时请将Content-Type设置为application/json格式。 请求参数格式如下: { "data" : base64encode( { "image" : base64encode(binary image data) } ) } python代码示例如下: import base64 import json # 输入图片为/home/work/01.jpg image_file = "/home/work/01.jpg" # 将图片内容读取至image_data with open(image_file, 'rb') as f: image_data = f.read() data = { # 将image_data进行base64编码 "image": base64.b64encode(image_data) } request_body = { # 将data转为json,并进行base64编码 "data": base64.b64encode(json.dumps(data)) } # 最终应该传入http body的内容 print json.dumps(request_body) 返回参数 接口返回人体坐标框和每个关键点的置信度分数,在应用时可综合置信度score分数,过滤掉置信度低的“无效人体”,建议过滤方法:当关键点得分大于0.2的个数大于3,且人体框的得分大于0.2时,才认为是有效人体。 实际应用中,可根据对误识别、漏识别的容忍程度,调整阈值过滤方案,灵活应用,比如对误识别容忍低的应用场景,人体框的得分阈值可以提到0.3甚至更高。
说明:body_parts,一共21个part,每个part包含x,y两个坐标,如果part被截断,则x、y坐标为part被截断的图片边界位置,part顺序以实际返回顺序为准。 返回示例 { "err_no": 0, "err_msg": "fg_human_service[status:succeed]", "result": { "person_num": 1, "person_info": [ { "body_parts": { "left_ankle":{ "score":0.868368387222290, "x":643.8750, "y":649.6250 }, "left_ear":{ "score":0.8685630559921265, "x":643.8750, "y":303.68750 }, "left_elbow":{ "score":0.8781360983848572, "x":677.6250, "y":413.3750 },"left_eye":{ "score":0.9187903404235840, "x":635.43750, "y":303.68750 }, "left_hip":{ "score":0.8074261546134949, "x":652.31250, "y":480.8750 }, "left_knee":{ "score":0.7978388071060181, "x":652.31250, "y":565.250 }, "left_mouth_corner":{ "score":0.8915061950683594, "x":635.43750, "y":320.56250 }, "left_shoulder":{ "score":0.8677763342857361, "x":660.750, "y":354.31250 }, "left_wrist":{ "score":0.8828375339508057, "x":702.93750, "y":464.0 }, "neck":{ "score":0.8687257170677185, "x":627.0, "y":337.43750 }, "nose":{ "score":0.9034447669982910, "x":627.0, "y":312.1250 }, "right_ankle":{ "score":0.8528900742530823, "x":610.1250, "y":649.6250 }, "right_ear":{ "score":0.8603078126907349, "x":610.1250, "y":303.68750 }, "right_elbow":{ "score":0.8440912961959839, "x":559.50, "y":413.3750 }, "right_eye":{ "score":0.8926745653152466, "x":618.56250, "y":303.68750 }, "right_hip":{ "score":0.7821152210235596, "x":601.68750, "y":480.8750 }, "right_knee":{ "score":0.7996079921722412, "x":610.1250, "y":573.68750 }, "right_mouth_corner":{ "score":0.8937355875968933, "x":618.56250, "y":320.56250 }, "right_shoulder":{ "score":0.8571984171867371, "x":584.81250, "y":354.31250 }, "right_wrist":{ "score":0.8279093503952026, "x":542.6250, "y":455.56250 }, "top_head":{ "score":0.8723988533020020, "x":627.0, "y":278.3750 } }, "location": { "height":449.7995910644531, "left":514.0347900390625, "score":0.9874296784400940, "top":256.1484069824219, "width":226.6530609130859 } } ] }, "format": "json", "img": "./data/img/normal_109.jpg" //这个字段为测试端新加,为方便核对图片结果,与服务端无关。 } 错误返回值
错误码表
人体检测检测图像中的所有人体,返回每个人体的矩形框位置和置信度分数。人体目标需大于30px * 30px,否则模型会直接丢弃,无法检测到有效人体。 调用接口的地址示例:[192.168.0.1]:8125/GeneralClassifyService/classify,其中ip需要替换为用户自己服务器的ip,端口默认为:8125 路径 /GeneralClassifyService/classify 请求参数
请求参数构造及python代码示例 请求参数为json格式,请求时请将Content-Type设置为application/json格式。 请求参数格式如下: { "data" : base64encode( { "image" : base64encode(binary image data), "return_crop" : "0,1", } ) } python代码示例如下: import base64 import json # 输入图片为/home/work/01.jpg image_file = "/home/work/01.jpg" # 将图片内容读取至image_data with open(image_file, 'rb') as f: image_data = f.read() data = { # 将image_data进行base64编码 "image": base64.b64encode(image_data), "return_crop": 0, } request_body = { # 将data转为json,并进行base64编码 "data": base64.b64encode(json.dumps(data)) } # 最终应该传入http body的内容 print json.dumps(request_body) 返回参数
正确返回值说明(返回参数为base64编码格式,将result字段base64解码后可得到以下内容):
返回示例 {
"person_num": 3,
"det_res":
[
{
"classname":"person",
"crop":"",
"left": 1092,
"top": 594,
"width": 112,
"height": 200,
"probability": 0.6849,
"label":1
},
{
"classname":"person",
"crop":"",
"left": 1263,
"top": 281,
"width": 63,
"height": 130,
"probability": 0.5300,
"label":1
},
{
"classname":"person",
"crop":"",
"left": 969,
"top": 192,
"width": 71,
"height": 75,
"probability": 0.4311,
"label":1
}
]
} 错误码表
人体属性识别(单人版)输入单个人体的图片,识别人体的静态属性和行为,共支持28种属性。 注:模型默认将输入的整张图片当作“1个人体”直接识别属性,需提前使用人体检测模型,将原图中的每个人体检测、裁剪出来,再调用本服务识别属性信息。 接口返回每个属性的置信度分数,在应用时可综合置信度score分数,过滤掉置信度低的属性。实际应用中,可根据对误识别、漏识别的容忍程度,调整阈值过滤方案,灵活应用。 调用接口的地址示例:[192.168.0.1]:8126/GeneralClassifyService/classify,其中ip需要替换为用户自己服务器的ip,端口默认为:8126 路径 /GeneralClassifyService/classify 请求参数
请求参数构造及python代码示例 请求参数为json格式,请求时请将Content-Type设置为application/json格式。 请求参数格式如下: { "data" : base64encode( { "image" : base64encode(binary image data), "type" : "gender,headwear,carrying_item,cellphone" } ) } python代码示例如下: import base64 import json # 输入图片为/home/work/01.jpg image_file = "/home/work/01.jpg" # 将图片内容读取至image_data with open(image_file, 'rb') as f: image_data = f.read() data = { # 将image_data进行base64编码 "image": base64.b64encode(image_data), "type": "gender,headwear,carrying_item,cellphone" } request_body = { # 将data转为json,并进行base64编码 "data": base64.b64encode(json.dumps(data)) } # 最终应该传入http body的内容 print json.dumps(request_body) type字段说明
返回参数
正确返回值说明(返回参数为base64编码格式,将result字段base64解码后可得到以下内容):
说明:接口返回每个属性的置信度分数,在应用时可综合置信度score分数,过滤掉置信度低的属性。实际应用中,可根据对误识别、漏识别的容忍程度,调整阈值过滤方案,灵活应用。 返回示例 {
"person_num": 1,
"person_info":
[
{
"location":
{
"left": 0,
"top": 0,
"width": 200,
"height": 400
"score": 1.0
}
"attributes":
{
"gender":
{
"name": "男性",
"score": 0.937
}
"hair_length":
{
"name": "短发",
"score": 0.889
}
"lower_wear":
{
"name": "长裤",
"score": 0.925
}
"upper_wear":
{
"name": "短袖",
"score": 0.774
}
}
}
]
} 错误码表
人流量统计识别和统计图像当中的人体个数(静态统计,不支持追踪和去重)。默认识别整图中的人数,支持指定多个不规则区域统计局部人数,同时可输出渲染图片(会增加接口延时)。 适用于3米以上的中远距离俯拍,5米以上为佳,以头部为主要识别目标统计人数,无需正脸、全身照,适应各类人流密集场景。支持轻度畸变的鱼眼摄像头。 渲染图示例如下: 调用接口的地址示例:[192.168.0.1]:8122/GeneralClassifyService/classify,其中ip需要替换为用户自己服务器的ip,端口默认为:8122 路径 /GeneralClassifyService/classify 请求参数
请求参数构造及python代码示例 请求参数为json格式,请求时请将Content-Type设置为application/json格式。 请求参数格式如下: { "data" : base64encode( { "image" : base64encode(binary image data) } ) } python代码示例如下: import base64 import json # 输入图片为/home/work/01.jpg image_file = "/home/work/01.jpg" # 将图片内容读取至image_data with open(image_file, 'rb') as f: image_data = f.read() data = { # 将image_data进行base64编码 "image": base64.b64encode(image_data) } request_body = { # 将data转为json,并进行base64编码 "data": base64.b64encode(json.dumps(data)) } # 最终应该传入http body的内容 print json.dumps(request_body) 返回参数
正确返回值说明:(返回参数为base64编码格式,将result字段base64解码后可得到以下内容)
特别说明: 1)person_num固定返回,image只有当请求字段中"show"为true时候返回; 2) image 的内容是图片字节内容做byte64编码的string字符,拿到后反编码再按照字节写成文件即可; 返回示例 {"person_num": 86} // 请求时,show为0或者不传
{"person_num": 86, "image": "/9j/4AAoFS2P/9k="} // 请求时,show为1 错误码表
手势识别识别图片中的手势类型,返回手势名称、手势矩形框、概率分数,可识别24种常见手势:拳头、OK、祈祷、作揖、作别、单手比心、点赞、Diss、我爱你、掌心向上、双手比心(3种)、数字(9种)、Rock、竖中指。每种手势的示例图参考:https://ai.baidu.com/ai-doc/BODY/4k3cpywrv 适用于3米以内的拍摄距离,1米内为佳,自拍和他人拍摄均支持,拍摄距离尽量近一些,否则手势目标太小,容易漏识别。 调用接口的地址示例:[192.168.0.1]:8120/GeneralClassifyService/classify,其中ip需要替换为用户自己服务器的ip,端口默认为:8120 路径 /GeneralClassifyService/classify 请求参数
请求参数构造及python代码示例 请求参数为json格式,请求时请将Content-Type设置为application/json格式。 请求参数格式如下: { "data" : base64encode( { "image" : base64encode(binary image data), } ) } python代码示例如下: import base64 import json # 输入图片为/home/work/01.jpg image_file = "/home/work/01.jpg" # 将图片内容读取至image_data with open(image_file, 'rb') as f: image_data = f.read() data = { # 将image_data进行base64编码 "image": base64.b64encode(image_data) } request_body = { # 将data转为json,并进行base64编码 "data": base64.b64encode(json.dumps(data)) } # 最终应该传入http body的内容 print json.dumps(request_body) 返回参数
其中classname和label的对应关系如下表所示:
返回示例: { u'err_no': 0, u'err_msg': u'DetectionSsd[status:succeed]', u'result': '{ "object": [ { "classname":"Thumb_up", "height":145, "label":9, "left":453, "probability":0.5996769666671753, "top":563, "width":106 } ] }\n', u'format': u'json' } 错误码表
手部关键点识别检测图片中的所有手部,返回每只手的坐标框、21个骨节点坐标信息。 当前接口主要适用于图片中单个手部的情况,图片中同时存在多个手部时,识别效果可能欠佳。 21个关键点对应位置示意图: 调用接口的地址示例:[192.168.0.1]:8128/GeneralClassifyService/classify,其中ip需要替换为用户自己服务器的ip,端口默认为:8128 路径 /GeneralClassifyService/classify 请求参数
请求参数构造及python代码示例 请求参数为json格式,请求时请将Content-Type设置为application/json格式。 请求参数格式如下: { "data" : base64encode( { "image" : base64encode(binary image data), } ) } python代码示例如下: import base64 import json # 输入图片为/home/work/01.jpg image_file = "/home/work/01.jpg" # 将图片内容读取至image_data with open(image_file, 'rb') as f: image_data = f.read() data = { # 将image_data进行base64编码 "image": base64.b64encode(image_data) } request_body = { # 将data转为json,并进行base64编码 "data": base64.b64encode(json.dumps(data)) } # 最终应该传入http body的内容 print json.dumps(request_body) 返回参数
正确返回值说明:(返回参数为base64编码格式,将result字段base64解码后可得到以下内容)
返回示例 {
"hand_num": 1,
"hand_info": [
{
"hand_parts": {
"0": {
"y": 707,
"x": 829,
"score": 0.81601244211197
},
"1": {
"y": 620,
"x": 873,
"score": 0.6850221157074
},
……
"20": {
"y": 325,
"x": 567,
"score": 0.91110396385193
}
},
"location": {
"height": 556,
"width": 426,
"top": 151,
"score": 17.495880126953,
"left": 567
}
}
]
} 错误码表
人像分割识别人体的轮廓范围,与背景进行分离,返回分割后的二值结果图、灰度图、透明背景的人像图(png格式)。分割效果示例图请参考:https://ai.baidu.com/ai-doc/BODY/Fk3cpyxua 美颜、P图等图片美化手段会影响分割效果,请使用原图进行分割。 调用接口的地址示例:[192.168.0.1]:8127/GeneralClassifyService/classify,其中ip需要替换为用户自己服务器的ip,端口默认为:8127 路径 /GeneralClassifyService/classify 请求参数
请求参数构造及python代码示例 请求参数为json格式,请求时请将Content-Type设置为application/json格式。 请求参数格式如下: { "data": base64.b64encode(data) } python 2.x 代码示例如下: import base64 import json
def encode_img_to_file(image_data): img_encode = cv2.imencode('.png', image_data)[1] data_encode = np.array(img_encode)
str_encode = data_encode.tostring()
return str_encode
file = "test.jpg" image = cv2.imread(file, -1)
img_data = encode_img_to_file(image)
proto_data.image = img_data
data = proto_data.SerializeToString()
data = { # 将图片进行json编码 "data": base64.b64encode(image_string) } # 将数据转为json字符串
request_body = json.dump(data)
# 最终应该传入http body的内容
print json.dumps(request_body) python 3.x 代码示例下载地址: https://ai.baidu.com/file/8044251026DB40619E8C8E77AB4152A5 返回参数
返回示例 {
"err_no": 0,
"err_msg": "ParseService[status:succeed]",
"result":
{
"labelmap": "",
"scoremap": "",
"type":"person",
"foreground": ""
},
"format": "json"
} 错误码表
驾驶行为分析针对车内驾驶室监控画面,识别图像中是否有人体,若检测到至少1个人体,将目标最大的人体作为驾驶员,进一步识别驾驶员的属性行为,可识别使用手机、抽烟、未系安全带、双手离开方向盘、视线未朝前方、未佩戴口罩、闭眼、打哈欠、低头9种典型行为姿态。 注:若图像中检测到多个大小相当的人体,默认取画面中右侧最大的人体作为驾驶员;针对香港、海外地区的右舵车,可通过请求参数里的wheel_location字段,指定将左侧最大的人体作为驾驶员。 图片质量要求:
调用接口的地址示例:[192.168.0.1]:8132/GeneralClassifyService/classify,其中ip需要替换为用户自己服务器的ip,端口默认为:8132 路径 /GeneralClassifyService/classify 请求参数
请求参数构造及python代码示例 请求参数为json格式,请求时请将Content-Type设置为application/json格式。 请求参数格式如下: { "data" : base64encode( { "image" : base64encode(binary image data), "type" : "smoke,cellphone" } ) } python代码示例如下: import base64 import json # 输入图片为/home/work/01.jpg image_file = "/home/work/01.jpg" # 将图片内容读取至image_data with open(image_file, 'rb') as f: image_data = f.read() data = { # 将image_data进行base64编码 "image": base64.b64encode(image_data), "type": "smoke,cellphone" } request_body = { # 将data转为json,并进行base64编码 "data": base64.b64encode(json.dumps(data)) } # 最终应该传入http body的内容 print json.dumps(request_body) 返回参数
正确返回值说明(返回参数为base64编码格式,将result字段base64解码后可得到以下内容):
说明:接口返回每个属性的置信度分数,在应用时可综合置信度score分数,过滤掉置信度低的属性。实际应用中,可根据对误识别、漏识别的容忍程度,调整阈值过滤方案,灵活应用。 返回示例 {
"person_num": 1,
"person_info":
[
{
"location":
{
"left": 0,
"top": 0,
"width": 200,
"height": 400
"score": 1.0
}
"attributes":
{
"gender":
{
"name": "男性",
"score": 0.937
}
"hair_length":
{
"name": "短发",
"score": 0.889
}
"lower_wear":
{
"name": "长裤",
"score": 0.925
}
"upper_wear":
{
"name": "短袖",
"score": 0.774
}
}
}
]
} 错误码表
|