资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

人流量统计-动态版

统计图像中的人体个数和流动趋势,主要适用于低空俯拍、出入口场景,以人体头肩为主要识别目标,核心功能:

  • 静态人数统计:传入单帧图像,检测图片中的人体头肩,返回图中总人数。
  • 动态人数统计和跟踪:传入监控视频抓拍图片序列,进行人体追踪,返回每个人体框的坐标和所属ID;并根据目标轨迹判断进出区域行为,进行动态人数统计,返回区域进出人数。同时可输出渲染结果图(含统计值和跟踪框渲染)。(注:抽祯频率需>2fps,否则无法有效跟踪,建议5fps,接口默认保证5qps,每天赠送5万次免费调用量,以便充分测试。)

渲染图示例:

Json::Value result;

std::string image;
aip::get_file_content("/assets/sample.jpg", &image);

std::string dynamic = "true";

// 调用人流量统计-动态版
result = client.body_tracking(image, dynamic, aip::null);

// 如果有可选参数
std::map<std::string, std::string> options;
options["case_id"] = "123";
options["case_init"] = "123";
options["show"] = "true";
options["area"] = "100";

// 带参数调用人流量统计-动态版
result = client.body_tracking(image, dynamic, options);

人流量统计-动态版 请求参数详情

参数名称 是否必选 类型 可选值范围 默认值 说明
image std::string 图片数据的二进制字符串,可以使用aip::get_file_content函数获取
dynamic std::string true
false
true:动态人流量统计,返回总人数、跟踪ID、区域进出人数;
false:静态人数统计,返回总人数
case_id 当dynamic为True时,必填 std::string 任务ID(通过case_id区分不同视频流,自拟,不同序列间不可重复即可)
case_init 当dynamic为True时,必填 std::string true
false
每个case的初始化信号,为true时对该case下的跟踪算法进行初始化,为false时重载该case的跟踪状态。当为false且读取不到相应case的信息时,直接重新初始化
show std::string true
false
false 否返回结果图(含统计值和跟踪框渲染),默认不返回,选true时返回渲染后的图片(base64),其它无效值或为空则默认false
area 当dynamic为True时,必填 std::string 静态人数统计时,只统计区域内的人,缺省时为全图统计。
动态人流量统计时,进出区域的人流会被统计。
逗号分隔,如‘x1,y1,x2,y2,x3,y3...xn,yn',按顺序依次给出每个顶点的xy坐标(默认尾点和首点相连),形成闭合多边形区域。
服务会做范围(顶点左边需在图像范围内)及个数校验(数组长度必须为偶数,且大于3个顶点)。只支持单个多边形区域,建议设置矩形框,即4个顶点。坐标取值不能超过图像宽度和高度,比如1280的宽度,坐标值最小建议从1开始,最大到1279

area参数设置说明

进出区域方向:从区域外走到区域内就是in,相反就是out,详见下方示例。

示例1: 如下图,area区域框三条边贴着图像左方边缘,从图像右方往左走到框里就是in,从图像左方往右走出框就是out,相当于只有图像中间那条线起作用。 如果想要从图像左方向右走是in,就把框画在图像右半部分,上、下、右三条边贴着图像边缘。

同理,上下方向,如果area区域框三条边贴着图像下方边缘,从图像上方往下走到框里就是in,从图像下方往上走出框就是out,相当于只有图像中间那条线起作用。如果想要从图像下方向上走是in,就把框画在图像上半部分,上、左、右三条边贴着图像边缘。

示例2: 如下图,area区域是一个不规则多边形,将画面中门口以外的部分都框起来了,蓝色箭头的方向代表in,人从门外走进区域框里,红色箭头的方向代表out,人走出区域框,走向门外。

人流量统计-动态版 返回数据参数详情

字段 是否必选 类型 说明
person_num int 检测到的人体框数目
person_info object[] 每个框的具体信息
+location object 跟踪到的人体框位置
++left int 人体框左坐标
++top int 人体框顶坐标
++width int 人体框宽度
++height int 人体框高度
+ID int 人体的ID编号,ID的取值逻辑为:每个case从1开始,不同人体向上递增但不一定连续
person_count object 进出区域的人流统计
+in int 当前帧进入区域的瞬时人数,一般情况下,当人体头肩检测框刚好完全进入area区域框时,该画面帧的in计数1;如要计算某一段时间内进入区域的累计人数,可基于连续帧图片的返回结果计算得到
+out int 当前帧进入区域的瞬时人数,一般情况下,当人体头肩检测框刚好完全离开area区域框时,该画面帧的out计数1;如要计算某一段时间内进入区域的累计人数,可基于连续帧图片的返回结果计算得到
image string 结果图,含跟踪框和统计值(渲染jpg图片byte内容的base64编码,得到后先做base64解码再以字节流形式imdecode)

渲染结果图说明

画面里刚出现的人体头肩检测框都是红色,被跟踪锁定之后会变成其他颜色(颜色随机,不同颜色没有特定规律),模型根据同颜色框的运动轨迹来判断进出移动方向;人体被跟踪锁定后,检测框上方会出现人体的ID编号,ID的取值逻辑为:每个case从1开始,不同人体向上递增但不一定连续。

人流量统计-动态版 返回示例

未检测到任何人:

    {
        "person_num":0,
        "person_info":[]
        “person_count”:
        {
            "in":0,
            "out":0
        }
    }

检测到2个人,无轨迹,无人进出区域:

    {
      "person_num":2,
      "person_info":[]
      “person_count”:
      {
          "in":0,
          "out":0
      }
    }

检测到2个人和2条轨迹,1人离开区域:

    {
      "person_num":2,
      "person_info":
       [
           {
              "ID":3
              "location":
              {
                  "left": 100,
                  "top": 200,
                  "width": 200,
                  "height": 400,
              }
          }
          {
              "ID": 5
              "location":
              {
                  "left": 400,
                  "top": 200,
                  "width": 200,
                  "height": 400,
              }
          }
      ]
      “person_count”:
      {
          "in":0,
          "out":1
      }
    }
上一篇
驾驶行为分析
下一篇
手部关键点识别