人体关键点检测
旷视 官方文档
传入图片进行人体检测和骨骼关键点检测,返回人体14个关键点 支持对图片中的所有人体进行骨骼检测
基本说明:
接口地址:https://api-cn.faceplusplus.com/humanbodypp/v1/skeleton
返回格式:json
请求方式:post
请求示例:https://api-cn.faceplusplus.com/humanbodypp/v1/skeleton?api_key=1&api_secret=2&image_url=3
请求参数说明:
名称 类型 必填 说明
api_key string 必填 Face++的 API Key
api_secret string 必填 Face++的 API Secret
image_url string 必填 图片的 URL
返回参数说明:
名称 类型 说明
- - 见json返回
JSON返回示例:
{
	"time_used": 2299,
	"image_id": "lHjvzhnGndA/zZja3ho2fA==",
	"skeletons": [{
		"body_rectangle": {
			"width": 781,
			"top": 315,
			"height": 910,
			"left": 134
		},
		"landmark": {
			"left_buttocks": {
				"y": 901,
				"x": 452,
				"score": 0.7299447
			},
			"head": {
				"y": 9,
				"x": 305,
				"score": 0.5368539
			},
			"neck": {
				"y": 673,
				"x": 378,
				"score": 0.6446256
			},
			"left_shoulder": {
				"y": 692,
				"x": 769,
				"score": 0.7006054
			},
			"left_hand": {
				"y": 597,
				"x": 769,
				"score": 0.41823307
			},
			"left_knee": {
				"y": 901,
				"x": 329,
				"score": 0.6185796
			},
			"right_elbow": {
				"y": 901,
				"x": 12,
				"score": 0.4332367
			},
			"right_shoulder": {
				"y": 635,
				"x": 12,
				"score": 0.724305
			},
			"right_hand": {
				"y": 901,
				"x": 232,
				"score": 0.56872773
			},
			"left_foot": {
				"y": 901,
				"x": 452,
				"score": 0.3753785
			},
			"left_elbow": {
				"y": 901,
				"x": 769,
				"score": 0.51084995
			},
			"right_buttocks": {
				"y": 901,
				"x": 134,
				"score": 0.5565492
			},
			"right_knee": {
				"y": 901,
				"x": 85,
				"score": 0.47690523
			},
			"right_foot": {
				"y": 901,
				"x": 452,
				"score": 0.52765757
			}
		}
	}, {
		"body_rectangle": {
			"width": 559,
			"top": 533,
			"height": 740,
			"left": 394
		},
		"landmark": {
			"left_buttocks": {
				"y": 732,
				"x": 114,
				"score": 0.8086717
			},
			"head": {
				"y": 270,
				"x": 464,
				"score": 0.4876535
			},
			"neck": {
				"y": 270,
				"x": 79,
				"score": 0.5550944
			},
			"left_shoulder": {
				"y": 378,
				"x": 359,
				"score": 0.64766926
			},
			"left_hand": {
				"y": 362,
				"x": 481,
				"score": 0.6320832
			},
			"left_knee": {
				"y": 563,
				"x": 271,
				"score": 0.49012265
			},
			"right_elbow": {
				"y": 378,
				"x": 551,
				"score": 0.6178683
			},
			"right_shoulder": {
				"y": 347,
				"x": 324,
				"score": 0.5143001
			},
			"right_hand": {
				"y": 378,
				"x": 551,
				"score": 0.6799432
			},
			"left_foot": {
				"y": 732,
				"x": 9,
				"score": 0.4409459
			},
			"left_elbow": {
				"y": 362,
				"x": 499,
				"score": 0.56940734
			},
			"right_buttocks": {
				"y": 732,
				"x": 201,
				"score": 0.6996023
			},
			"right_knee": {
				"y": 424,
				"x": 551,
				"score": 0.48145446
			},
			"right_foot": {
				"y": 732,
				"x": 9,
				"score": 0.43120167
			}
		}
	}],
	"request_id": "1533886107,224911b6-e136-42bd-aebb-e1aec327e018"
}
服务级错误码参照
错误码 说明
401 api_key 和 api_secret 不匹配。
403 api_key 没有调用本 API 的权限,具体原因为:用户自己禁止该 api_key 调用、管理员禁止该 api_key 调用、由于账户余额不足禁止调用。
403 并发数超过限制。
400 缺少某个必选参数。
400 某个参数解析出错(比如必须是数字,但是输入的是非数字字符串; 或者长度过长,etc.)
400 同时传入了要求是二选一或多选一的参数。如有特殊说明则不返回此错误。
413 客户发送的请求大小超过了 2MB 限制。该错误的返回格式为纯文本,不是 json 格式。
404 所调用的 API 不存在。
500 服务器内部错误,当此类错误发生时请再次请求,如果持续出现此类错误,请及时联系技术支持团队。
完整教学代码示例
<?php
/**
 * Created by PhpStorm.
 * User: FZS
 * Time: 2020/11/02 21:53
 */
//----------------------------------
// 人体关键点检测 调用类
//----------------------------------
class freeApi
{
    private $apiKey = false;
    private $apiSecret = false;
    private $apiUrl = 'https://api-cn.faceplusplus.com/humanbodypp/v1/skeleton';
    public function __construct($apikey,$apiSecret){
        $this->apiKey = $apikey;
        $this->apiSecret = $apiSecret;
    }
    /**
     * 将JSON内容转为数据,并返回
     * @param string $content [内容]
     * @return array
     */
    public function returnArray($content){
        return json_decode($content,true);
    }
    /**
     * 获取结果
     * @return array
     */
    public function getResult(){
        $params = [
            "api_key" => $this->apiKey,
            "api_secret" => $this->apiSecret,
            "image_url" => "",
        ];
        $params = http_build_query($params);
        return $this->returnArray($this->freeApiCurl($this->apiUrl,$params,1));
    }
    /**
     * 请求接口返回内容
     * @param  string $url [请求的URL地址]
     * @param  string $params [请求的参数]
     * @param  int $ipost [是否采用POST形式]
     * @return  string
     */
    public function freeApiCurl($url,$params=false,$ispost=0){
        $ch = curl_init();
        curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
        curl_setopt( $ch , CURLOPT_SSL_VERIFYHOST , false );
        curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER , false );
        curl_setopt( $ch, CURLOPT_USERAGENT , 'free-api' );
        curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );
        curl_setopt( $ch, CURLOPT_TIMEOUT , 60);
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
        if( $ispost )
        {
            curl_setopt( $ch , CURLOPT_POST , true );
            curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
            curl_setopt( $ch , CURLOPT_URL , $url );
        }
        else
        {
            if($params){
                curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );
            }else{
                curl_setopt( $ch , CURLOPT_URL , $url);
            }
        }
        $response = curl_exec( $ch );
        if ($response === FALSE) {
            return false;
        }
        curl_close( $ch );
        return $response;
    }
}