人体关键点识别
百度 官方文档
检测人体并返回人体矩形框位置,精准定位14个核心关键点
基本说明:
接口地址:https://aip.baidubce.com/rest/2.0/image-classify/v1/body_analysis
返回格式:json
请求方式:post
请求示例:https://aip.baidubce.com/rest/2.0/image-classify/v1/body_analysis?access_token=test
请求参数说明:
名称 类型 必填 说明
image string 必填 图像数据,Base64编码字符串,以图片文件形式请求时必填。图片的base64编码是不包含图片头的,(支持图片格式:jpg,bmp,png),图片Base64编码后大小不超过4M。最短边至少50px,最长边最大4096px
返回参数说明:
名称 类型 说明
person_num uint32 人体数目
person_info object[] 人体姿态信息
+body_parts object 身体部位信息,包含14个关键点
++left_ankle object 左脚踝
+++x float x坐标
+++y float y坐标
++left_elbow object 左手肘
+++x float x坐标
+++y float y坐标
++left_hip object 左髋部
+++x float x坐标
+++y float y坐标
++left_knee object 左膝
+++x float x坐标
+++y float y坐标
++left_shoulder object 左肩
+++x float x坐标
+++y float y坐标
++left_wrist object 左手腕
+++x float x坐标
+++y float y坐标
++neck object
+++x float x坐标
+++y float y坐标
++nose object 鼻子
+++x float x坐标
+++y float y坐标
++right_ankle object 右脚踝
+++x float x坐标
+++y float y坐标
++right_elbow object 右手肘
+++x float x坐标
+++y float y坐标
++right_hip object 右髋部
+++x float x坐标
+++y float y坐标
++right_knee object 右膝
+++x float x坐标
+++y float y坐标
++right_shoulder object 右肩
+++x float x坐标
+++y float y坐标
++right_wrist object 右手腕
+++x float x坐标
+++y float y坐标
+location object 人体坐标信息
++height float 人体区域的高度
++left float 人体区域离左边界的距离
++top float 人体区域离上边界的距离
++width float 人体区域的宽度
log_id uint64 唯一的log id,用于问题定位
JSON返回示例:
{
	"person_num": 1,
	"person_info": [{
		"body_parts": {
			"neck": {
				"y": 288.7258911132812,
				"x": 845.4238891601562
			},
			"left_shoulder": {
				"y": 307.2262573242188,
				"x": 949.0001831054688
			},
			"left_knee": {
				"y": 582.1116333007812,
				"x": 568.9564819335938
			},
			"left_ankle": {
				"y": 593.6278076171875,
				"x": 421.5616149902344
			},
			"right_elbow": {
				"y": 0.0,
				"x": 0.0
			},
			"right_shoulder": {
				"y": 270.217529296875,
				"x": 744.0525512695312
			},
			"left_hip": {
				"y": 575.1278076171875,
				"x": 776.3110961914062
			},
			"right_hip": {
				"y": 505.7799377441406,
				"x": 700.2752075195312
			},
			"left_wrist": {
				"y": 586.6766357421875,
				"x": 1001.920715332031
			},
			"left_elbow": {
				"y": 468.8005676269531,
				"x": 965.2022094726562
			},
			"nose": {
				"y": 203.2225036621094,
				"x": 792.3795776367188
			},
			"right_ankle": {
				"y": 524.3399658203125,
				"x": 393.8475036621094
			},
			"right_knee": {
				"y": 339.5772399902344,
				"x": 591.977783203125
			},
			"right_wrist": {
				"y": 0.0,
				"x": 0.0
			}
		},
		"location": {
			"width": 212.8609619140625,
			"top": 105.8213119506836,
			"height": 532.152587890625,
			"left": 591.45361328125
		}
	}],
	"log_id": 6900199721518695010
}
服务级错误码参照
错误码 说明
1 服务器内部错误,请再次请求, 如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。
2 服务暂不可用,请再次请求, 如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。
3 调用的API不存在,请检查请求URL后重新尝试,一般为URL中有非英文字符,如“-”,可手动输入重试
4 集群超限额,请再次请求, 如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。
6 无权限访问该用户数据,创建应用时未勾选相关接口
13 获取token失败
14 IAM 鉴权失败
15 应用不存在或者创建失败
17 每天请求量超限额,可通过QQ群(860337848)联系群管、提交工单提升限额
18 QPS超限额,可通过QQ群(860337848)联系群管、提交工单提升限额
19 请求总量超限额,可通过QQ群(860337848)联系群管、提交工单提升限额
100 无效的access_token参数,请检查后重新尝试
110 access_token无效
111 access token过期
282000 服务器内部错误,请再次请求, 如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。
216100 请求中包含非法参数,请检查后重新尝试
216101 缺少必须的参数,请检查参数是否有遗漏
216102 请求了不支持的服务,请检查调用的url
216103 请求中某些参数过长,请检查后重新尝试
216110 appid不存在,请重新核对信息是否为后台应用列表中的appid
216200 图片为空,请检查后重新尝试
216201 上传的图片格式错误,现阶段我们支持的图片格式为:PNG、JPG、BMP,请进行转码或更换图片
216202 上传的图片大小错误,现阶段我们支持的图片大小为:base64编码后小于4M,分辨率不高于4096 * 4096,请重新上传图片
216203 上传的图片base64编码有误,请校验base64编码方式,并重新上传图片
216630 识别错误,请再次请求,如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。
216634 检测错误,请再次请求,如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。
282003 请求参数缺失
282005 处理批量任务时发生部分或全部错误,请根据具体错误码排查
282006 批量任务处理数量超出限制,请将任务数量减少到10或10以下
282114 URL长度超过1024字节或为0
282808 request id xxxxx 不存在
282809 返回结果请求错误(不属于excel或json)
282810 图像识别错误
283300 入参格式有误,可检查下图片编码、代码格式是否有误
完整教学代码示例
package com.xs.image;

import java.net.URLEncoder;

import com.alibaba.fastjson.JSON;
import com.xs.common.image.ImageAPI;
import com.xs.pojo.image.BodyAnalysisBean;
import com.xs.util.baidu.Base64Util;
import com.xs.util.baidu.FileUtil;
import com.xs.util.baidu.HttpUtil;
/**
 * 人体关键点识别-JavaAPI示例代码(非官方)
 * @author 小帅丶
 */
public class BodyAnalysisSample {
	public static void main(String[] args) throws Exception {
		//返回字符串
		String result = getBodyAnalysisResult("本地图片路径", "自己的accesstoken");
		System.out.println(result);
		//返回java对象
		//BodyAnalysisBean bodyAnalysisBean = getBodyAnalysisBean("本地图片路径", "自己的accesstoken");
		//System.out.println("图中有"+bodyAnalysisBean.getPerson_num()+"个人");
	}
	/**
	 * 人体关键点识别Demo
	 * @param imagePath
	 * @param accessToken
	 * @return 字符串
	 * @throws Exception
	 */
	public static String getBodyAnalysisResult(String imagePath,String accessToken) throws Exception{
		byte[] imgData = FileUtil.readFileByBytes(imagePath);
        String imgStr = Base64Util.encode(imgData);
		String param = "image=" + URLEncoder.encode(imgStr,"UTF-8");
        // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
		String result = HttpUtil.post(ImageAPI.BODYANALYSIS_API, accessToken, param);
        System.out.println(result);
        return result;
	}
	/**
	 * 人体关键点识别Demo
	 * @param imagePath
	 * @param accessToken
	 * @return CarMode对象
	 * @throws Exception
	 */
	public static BodyAnalysisBean getBodyAnalysisBean(String imagePath,String accessToken) throws Exception{
		byte[] imgData = FileUtil.readFileByBytes(imagePath);
        String imgStr = Base64Util.encode(imgData);
		String param = "image=" + URLEncoder.encode(imgStr,"UTF-8");
        // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
		String result = HttpUtil.post(ImageAPI.BODYANALYSIS_API, accessToken, param);
		BodyAnalysisBean bodyAnalysisBean = JSON.parseObject(result,BodyAnalysisBean.class);
        System.out.println(result);
        return bodyAnalysisBean;
	}
}