开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件
人体分析

    人体检测和属性识别

    接口描述

    对于输入的一张图片(可正常解码,且长宽比适宜),检测图像中的所有人体并返回每个人体的矩形框位置,识别人体的静态属性和行为,共支持22种属性,包括:性别、年龄阶段、上下身服饰(含类别/颜色)、是否戴帽子、是否戴口罩、是否戴眼镜、背包、是否吸烟、是否使用手机、人体朝向等。

    主要适用于监控场景的中低空斜拍视角,支持人体轻度截断、轻度遮挡、背面、侧面、动作变化等复杂场景。

    摄像头硬件选型无特殊要求,分辨率建议720p以上,更低分辨率的图片也能识别,只是效果可能有差异。夜间红外监控图片的识别效果可能欠佳

    注:接口返回的属性信息包括人体的遮挡、截断情况,在应用时可基于此过滤掉“无效人体”,比如严重遮挡、严重截断的人体。

    人体检测的效果示例如下:

    非正常人体示例:严重截断

    22种属性及其输出项如下,持续扩展更多属性,敬请期待。

    序号 属性 接口字段 输出项说明
    1 性别 gender 男性、女性
    2 年龄阶段 age 幼儿、青少年、青年、中年、老年
    3 上身服饰 upper_wear 长袖、短袖
    4 下身服饰 lower_wear 长裤、短裤、长裙、短裙、不确定
    5 上身服饰颜色 upper_color 红、橙、黄、绿、蓝、紫、粉、黑、白、灰、棕
    6 下身服饰颜色 lower_color 红、橙、黄、绿、蓝、紫、粉、黑、白、灰、棕、不确定
    7 上身服饰纹理 upper_wear_texture 纯色、图案、碎花、条纹或格子
    8 背包 bag 无背包、单肩包、双肩包、不确定
    9 上身服饰细分类 upper_wear_fg T恤、无袖、衬衫、西装、毛衣、夹克、羽绒服、风衣、外套
    10 是否戴帽子 headwear 无帽、普通帽、安全帽
    11 是否戴口罩 face_mask 无口罩、戴口罩、不确定
    12 是否戴眼镜 glasses 戴眼镜、戴墨镜、无眼镜、不确定
    13 是否打伞 umbrella 打伞、未打伞
    14 是否使用手机 cellphone 未使用手机、看手机、打电话、不确定
    15 人体朝向 orientation 正面、背面、左侧面、右侧面
    16 是否吸烟 smoke 吸烟、未吸烟、不确定
    17 是否有手提物 carrying_item 无手提物、有手提物、不确定
    18 交通工具 vehicle 无交通工具、骑摩托车、骑自行车、骑三轮车
    19 上方截断 upper_cut 无上方截断、有上方截断
    20 下方截断 lower_cut 无下方截断、有下方截断
    21 遮挡情况 occlusion 无遮挡、轻度遮挡、重度遮挡
    22 是否是正常人体 is_human 非正常人体、正常人体;用于判断说明人体的截断/遮挡情况,并非判断动物等非人类生物
    正常人体:身体露出大于二分之一的人体,一般以能看到腰部肚挤眼为标准;
    非正常人体:严重截断、或严重遮挡的人体,一般看不到肚挤眼,比如只有个脑袋、一条腿

    注意:接口默认输出所有22个属性,如只需返回某几个特定属性,请将type 参数值设定属性可选值,用逗号分隔。

    请求说明

    请求示例

    HTTP 方法:POST

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

    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
    type string gender,
    age,
    lower_wear,
    upper_wear,
    headwear,
    face_mask,
    glasses,
    upper_color,
    lower_color,
    cellphone,
    upper_wear_fg,
    upper_wear_texture,
    lower_wear_texture,
    orientation,
    umbrella,
    bag,
    smoke,
    vehicle,
    carrying_item,
    upper_cut,
    lower_cut,
    occlusion,
    is_human
    1)可选值说明:
    gender-性别,
    age-年龄阶段,
    lower_wear-下身服饰,
    upper_wear-上身服饰,
    headwear-是否戴帽子,
    face_mask-是否戴口罩,
    glasses-是否戴眼镜,
    upper_color-上身服饰颜色,
    lower_color-下身服饰颜色,
    cellphone-是否使用手机,
    upper_wear_fg-上身服饰细分类,
    upper_wear_texture-上身服饰纹理,
    orientation-人体朝向,
    umbrella-是否打伞;
    bag-背包,
    smoke-是否吸烟,
    vehicle-是否有交通工具,
    carrying_item-是否有手提物,
    upper_cut-上方截断,
    lower_cut-下方截断,
    occlusion-遮挡情况,
    is_human-是否是正常人体
    2)type 参数值可以是可选值的组合,用逗号分隔;如果无此参数默认输出全部22个属性

    请求代码示例

    提示一:使用示例代码前,请记得替换其中的示例Token、图片地址或Base64信息。

    提示二:部分语言依赖的类或库,请在代码注释中查看下载地址。

    人体检测和属性识别
    curl -i -k 'https://aip.baidubce.com/rest/2.0/image-classify/v1/body_attr?access_token=【调用鉴权接口获取的token】' --data 'image=【图片Base64编码,需UrlEncode】' -H 'Content-Type:application/x-www-form-urlencoded'
    <?php
    /**
    
     * 发起http post请求(REST API), 并获取REST请求的结果
    
     * @param string $url
    
     * @param string $param
    
     * @return - http response body if succeeds, else false.
       */
       function request_post($url = '', $param = '')
       {
       if (empty($url) || empty($param)) {
           return false;
       }
    
       $postUrl = $url;
       $curlPost = $param;
       // 初始化curl
       $curl = curl_init();
       curl_setopt($curl, CURLOPT_URL, $postUrl);
       curl_setopt($curl, CURLOPT_HEADER, 0);
       // 要求结果为字符串且输出到屏幕上
       curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
       curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
       // post提交方式
       curl_setopt($curl, CURLOPT_POST, 1);
       curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
       // 运行curl
       $data = curl_exec($curl);
       curl_close($curl);
    
       return $data;
       }
    
    $token = '[调用鉴权接口获取的token]';
    $url = 'https://aip.baidubce.com/rest/2.0/image-classify/v1/body_attr?access_token=' . $token;
    $img = file_get_contents('[本地文件路径]');
    $img = base64_encode($img);
    $bodys = array(
        'image' => $img
    );
    $res = request_post($url, $bodys);
    
    var_dump($res);
    package com.baidu.ai.aip;
    
    import com.baidu.ai.aip.utils.Base64Util;
    import com.baidu.ai.aip.utils.FileUtil;
    import com.baidu.ai.aip.utils.HttpUtil;
    
    import java.net.URLEncoder;
    
    /**
    
    * 人体检测和属性识别
      */
      public class BodyAttr {
    
        /**
    
        * 重要提示代码中所需工具类
    
        * FileUtil,Base64Util,HttpUtil,GsonUtils请从
    
        * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
    
        * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
    
        * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
    
        * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
    
        * 下载
          */
            public static String body_attr() {
          // 请求url
          String url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_attr";
          try {
              // 本地文件路径
              String filePath = "[本地文件路径]";
              byte[] imgData = FileUtil.readFileByBytes(filePath);
              String imgStr = Base64Util.encode(imgData);
              String imgParam = URLEncoder.encode(imgStr, "UTF-8");
    
              String param = "image=" + imgParam;
              
              // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
              String accessToken = "[调用鉴权接口获取的token]";
              
              String result = HttpUtil.post(url, accessToken, param);
              System.out.println(result);
              return result;
    
          } catch (Exception e) {
              e.printStackTrace();
          }
          return null;
            }
    
        public static void main(String[] args) {
            BodyAttr.body_attr();
        }
      }
    # encoding:utf-8
    
    import requests
    import base64
    
    '''
    人体检测和属性识别
    '''
    
    request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_attr"
    
    # 二进制方式打开图片文件
    
    f = open('[本地文件]', 'rb')
    img = base64.b64encode(f.read())
    
    params = {"image":img}
    access_token = '[调用鉴权接口获取的token]'
    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    if response:
        print (response.json())
    #include <iostream>
    #include <curl/curl.h>
    
    // libcurl库下载链接:https://curl.haxx.se/download.html
    // jsoncpp库下载链接:https://github.com/open-source-parsers/jsoncpp/
    const static std::string request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_attr";
    static std::string body_attr_result;
    /**
    
     * curl发送http请求调用的回调函数,回调函数中对返回的json格式的body进行了解析,解析结果储存在全局的静态变量当中
    
     * @param 参数定义见libcurl文档
    
     * @return 返回值定义见libcurl文档
       */
       static size_t callback(void *ptr, size_t size, size_t nmemb, void *stream) {
       // 获取到的body存放在ptr中,先将其转换为string格式
       body_attr_result = std::string((char *) ptr, size * nmemb);
       return size * nmemb;
       }
       /**
    
     * 人体检测和属性识别
    
     * @return 调用成功返回0,发生错误返回其他错误码
       */
       int body_attr(std::string &json_result, const std::string &access_token) {
       std::string url = request_url + "?access_token=" + access_token;
       CURL *curl = NULL;
       CURLcode result_code;
       int is_success;
       curl = curl_easy_init();
       if (curl) {
           curl_easy_setopt(curl, CURLOPT_URL, url.data());
           curl_easy_setopt(curl, CURLOPT_POST, 1);
           curl_httppost *post = NULL;
           curl_httppost *last = NULL;
           curl_formadd(&post, &last, CURLFORM_COPYNAME, "image", CURLFORM_COPYCONTENTS, "【base64_img】", CURLFORM_END);
    
           curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
           curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);
           result_code = curl_easy_perform(curl);
           if (result_code != CURLE_OK) {
               fprintf(stderr, "curl_easy_perform() failed: %s\n",
                       curl_easy_strerror(result_code));
               is_success = 1;
               return is_success;
           }
           json_result = body_attr_result;
           curl_easy_cleanup(curl);
           is_success = 0;
    
       } else {
           fprintf(stderr, "curl_easy_init() failed.");
           is_success = 1;
       }
       return is_success;
       }
    using System;
    using System.IO;
    using System.Net;
    using System.Text;
    using System.Web;
    
    namespace com.baidu.ai
    {
        public class BodyAttr
        {
            // 人体检测和属性识别
            public static string body_attr()
            {
                string token = "[调用鉴权接口获取的token]";
                string host = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_attr?access_token=" + token;
                Encoding encoding = Encoding.Default;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
                request.Method = "post";
                request.KeepAlive = true;
                // 图片的base64编码
                string base64 = getFileBase64("[本地图片文件]");
                String str = "image=" + HttpUtility.UrlEncode(base64);
                byte[] buffer = encoding.GetBytes(str);
                request.ContentLength = buffer.Length;
                request.GetRequestStream().Write(buffer, 0, buffer.Length);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
                string result = reader.ReadToEnd();
                Console.WriteLine("人体检测和属性识别:");
                Console.WriteLine(result);
                return result;
            }
    
            public static String getFileBase64(String fileName) {
                FileStream filestream = new FileStream(fileName, FileMode.Open);
                byte[] arr = new byte[filestream.Length];
                filestream.Read(arr, 0, (int)filestream.Length);
                string baser64 = Convert.ToBase64String(arr);
                filestream.Close();
                return baser64;
            }
        }
    }

    返回说明

    返回参数

    字段 是否必选 类型 说明
    log_id uint64 唯一的log id,用于问题定位
    person_num uint32 检测到的人体数目
    person_info object[] 每个人体框的信息
    +location object 人体坐标信息
    ++height float 人体区域的高度
    ++left float 人体区域离左边界的距离
    ++top float 人体区域离上边界的距离
    ++width float 人体区域的宽度
    ++score float 人体框的置信度分数,取值0-1,得分越接近1表示识别准备的概率越大
    +attributes object 人体属性内容
    ++gender object 性别
    +++name string 男性、女性
    +++score float 对应概率分数
    ++age object 年龄阶段
    +++name string 幼儿、青少年、青年、中年、老年
    +++score float 对应概率分数
    ++upper_color object 上半身衣着颜色
    +++name string 红、橙、黄、绿、蓝、紫、粉、黑、白、灰、棕
    +++score float 对应概率分数
    ++lower_color object 下半身衣着颜色
    +++name string 红、橙、黄、绿、蓝、紫、粉、黑、白、灰、棕、不确定
    +++score float 对应概率分数
    ++cellphone object 是否使用手机
    +++name string 未使用手机、看手机、打电话、不确定
    +++score float 对应概率分数
    ++lower_wear object 下半身服饰
    +++name string 长裤、短裤、长裙、短裙、不确定
    +++score float 对应概率分数
    ++upper_wear object 上半身服饰
    +++name string 长袖、短袖
    +++score float 对应概率分数
    ++headwear object 是否戴帽子
    +++name string 无帽、普通帽、安全帽
    +++score float 对应概率分数
    ++face_mask object 是否戴口罩
    +++name string 无口罩、戴口罩、不确定(背面或者头部被截断的人体,一般为不确定)
    +++score float 对应概率分数
    ++glasses object 是否戴眼镜
    +++name string 戴眼镜、戴墨镜、无眼镜、不确定
    +++score float 对应概率分数
    ++upper_wear_fg object 上身服饰细分类
    +++name string T恤、无袖、衬衫、西装、毛衣、夹克、羽绒服、风衣、外套
    +++score float 对应概率分数
    ++upper_wear_texture object 上身服饰纹理
    +++name string 纯色、图案、碎花、条纹或格子
    +++score float 对应概率分数
    ++orientation object 人体朝向
    +++name string 正面、背面、侧面
    +++score float 对应概率分数
    ++umbrella object 是否打伞
    +++name string 未打伞、打伞
    +++score float 对应概率分数
    ++bag object 背包
    +++name string 无背包、单肩包、双肩包
    +++score float 对应概率分数
    ++smoke object 是否吸烟
    +++name string 未吸烟、吸烟、不确定
    +++score float 对应概率分数
    ++vehicle object 是否有交通工具
    +++name string 无交通工具、骑摩托车、骑自行车、骑三轮车
    +++score float 对应概率分数
    ++upper_cut object 上方截断
    +++name string 无上方截断、有上方截断
    +++score float 对应概率分数
    ++lower_cut object 下方截断
    +++name string 无下方截断、有下方截断
    +++score float 对应概率分数
    ++occlusion object 遮挡情况
    +++name string 无遮挡、轻度遮挡、重度遮挡
    +++score float 对应概率分数
    ++is_human object 是否是正常人体
    +++name string 正常人体、非正常人体
    +++score float 对应概率分数

    返回示例

    {
    	"person_num": 1,
    	"person_info": [
    		{
    			"attributes": {
    				"orientation": {
    					"score": 0.99913859367371,
    					"name": "正面"
    				},
    				"is_human": {
    					"score": 0.99985098838806,
    					"name": "正常人体"
    				},
    				"headwear": {
    					"score": 0.7862206697464,
    					"name": "无帽"
    				},
    				"upper_wear_texture": {
    					"score": 0.73293226957321,
    					"name": "纯色"
    				},
    				"carrying_item": {
    					"score": 0.88011014461517,
    					"name": "无手提物"
    				},
    				"face_mask": {
    					"score": 0.99429154396057,
    					"name": "无口罩"
    				},
    				"lower_wear": {
    					"score": 0.96919763088226,
    					"name": "长裤"
    				},
    				"vehicle": {
    					"score": 0.99982362985611,
    					"name": "无交通工具"
    				},
    				"upper_wear_fg": {
    					"score": 0.40853327512741,
    					"name": "T恤"
    				},
    				"lower_color": {
    					"score": 0.77661311626434,
    					"name": "灰"
    				},
    				"umbrella": {
    					"score": 0.99996972084045,
    					"name": "未打伞"
    				},
    				"upper_cut": {
    					"score": 0.99979013204575,
    					"name": "无上方截断"
    				},
    				"lower_cut": {
    					"score": 0.99873107671738,
    					"name": "无下方截断"
    				},
    				"upper_wear": {
    					"score": 0.98250997066498,
    					"name": "短袖"
    				},
    				"cellphone": {
    					"score": 0.99923753738403,
    					"name": "未使用手机"
    				},
    				"gender": {
    					"score": 0.91399890184402,
    					"name": "女性"
    				},
    				"age": {
    					"score": 0.94620317220688,
    					"name": "青年"
    				},
    				"bag": {
    					"score": 0.88887012004852,
    					"name": "无背包"
    				},
    				"smoke": {
    					"score": 0.99988353252411,
    					"name": "未吸烟"
    				},
    				"upper_color": {
    					"score": 0.94646281003952,
    					"name": "灰"
    				},
    				"occlusion": {
    					"score": 0.99341428279877,
    					"name": "无遮挡"
    				},
    				"glasses": {
    					"score": 0.84259980916977,
    					"name": "无眼镜"
    				}
    			},
    			"location": {
    				"height": 826,
    				"width": 219,
    				"top": 176,
    				"score": 0.9693506360054,
    				"left": 754
    			}
    		}
    	],
    	"log_id": "1324248829299466129"
    }
    上一篇
    人体关键点识别
    下一篇
    人流量统计