人体关键点识别

接口描述

对于输入的一张图片(可正常解码,且长宽比适宜),检测图片中的所有人体,输出每个人体的14个主要关键点,包含四肢、脖颈、鼻子等部位,以及人体的坐标信息和数量

支持多人检测、人体位置重叠、遮挡、背面、侧面、中低空俯拍、大动作等复杂场景。

14个关键点的位置:鼻子、脖子、左肩、右肩、左手肘、右手肘、左手腕、右手腕、左髋部、右髋部、左膝、右膝、左脚踝、右脚踝。示意图如下(接口只输出关键点的坐标信息,不包含连线,如要实现“火柴人”的展现效果,需自行连线),正在扩展更多关键点,敬请期待。

注:人体的坐标位置是根据关键点的坐标信息推算得出,当图片中人体有一定截断、遮挡时,也能识别出关键点,进而推算出人体的坐标位置。

单人场景:

pose-1.png

多人场景:

pose-2.png

请求说明

请求示例

HTTP 方法:POST

请求URL: https://aip.baidubce.com/rest/2.0/image-classify/v1/body_analysis

URL参数:

参数
access_token 通过API Key和Secret Key获取的access_token,参考“Access Token获取

Header如下:

参数
Content-Type application/x-www-form-urlencoded

Body中放置请求参数,参数详情如下:

请求参数

参数 是否必选 类型 可选值范围 说明
image string - 图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M。图片的base64编码是不包含图片头的,如(data:image/jpg;base64,,支持图片格式:jpg、bmp、png,最短边至少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,用于问题定位

返回示例

{
  "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
}

示例代码

考虑到文档阅读体验,示例代码单独放在社区,请移步社区查阅,各个接口、不同语言的示例代码在持续补充中。
感谢@小帅等开发者的支持与贡献~

人体关键点识别,Java示例代码:http://ai.baidu.com/forum/topic/show/497758