客流识别SDK使用文档

统计视频序列中经过图像视野(门前通过)或进入指定区域(入店)的人体个数,主要适用于店铺出入口场景,摄像头视角为正常监控摄像头视角,以人体作为主要检测目标,核心功能:

门前通过人数统计:摄像头视角覆盖店铺门前区域,传入摄像头视频序列,返回经过图像视野人体的个数,同时可返回结果渲染图。

入店人数统计:摄像头视角覆盖店铺入口区域,传入摄像头视频序列和指定有效进入区域坐标信息(如店铺内部区域),返回进入指定区域的人体个数,同时可返回结果渲染图。

1、平台支持

系统和硬件支持

CPUGPUTPU
Ubuntu 16.04 LTS×
Windows 10后续推出后续推出×
Mendel Linux××后续推出

Python版本支持

Python 3.6Python 3.7Python 3.8
Ubuntu 16.04 LTS (CPU/GPU)后续推出后续推出
Windows 10 (CPU/GPU)后续推出后续推出后续推出
Mendel Linux (TPU)×后续推出×

2、依赖库

opencv-python

pillow

psutil

tensorflow版本见下表

CPUGPUTPU
Ubuntu 16.04 LTStensorflow 1.15.0tensorflow-gpu 1.15.0-
Windows 10tensorflow 1.15.0tensorflow-gpu 1.15.0-
Mendel Linux--python3-pycoral

3、SDK安装

根据平台和系统环境,自行安装依赖库中所需的依赖包。

使用pip安装客流量统计SDK,以下为在Ubuntu 16.04 LTS系统上安装Python3.6版本SDK的命令示例:

shell script pip install passflow-0.0.1-cp36-none-linux_x86_64.whl

4、调用方式

参考如下代码进行SDK在线认证

"""
app_key: string 官网获取的APP_KEY
app_secret: string 官网获取的APP_SECRET
service_key: string 官网获取的SERVICE_KEY
license_path: string license文件本地路径(首次认证时,license文件会被下载到该路径)
"""
from passflow.counter import Authorizer
authorizer = Authorizer(app_key, app_secret, service_key, license_path)
authorizer.authorization()

认证成功后,参考如下代码初始化一个客流计数器CustomerCounter

from passflow.counter import CustomerCounter
counter = CustomerCounter()

参考如下代码调用客流量统计算法

"""
device: string 设备参数,"cpu"和"gpu"两种可选,缺省值为"cpu",如在TPU上使用,不传递该参数
gpu_id: int 如使用显卡,用参数gpu_id来指定显卡序号,如在TPU上使用,不传递该参数
vis: bool 是否返回结果渲染图,缺省值为False
mosaic: bool 是否给人像区域打码,缺省值为True
region: list 有效区域的坐标(入店人数统计),缺省时则默认全图区域统计(门前通过人数统计)
video_path: string 视频文件路径或视频流地址
"""
device = 'gpu'
gpu_id = 0
vis = True
mosaic = True
region = [[(x11, y11), (x12, y12), (x13, y13),..., (x1n, y1n)],
          [(x21, y21), (x22, y22), (x23, y23),..., (x2n, y2n)],
          [(xm1, ym1), (xm2, ym2), (xm3, ym3),..., (xmn, ymn)]]
video_path = "example.mp4"
for n, result in enumerate(counter.run(video_path, region, vis, mosaic, device, gpu_id)):
    frame_result = result     # 每帧处理结果

正常结果返回示例

{
    "code": 200,                                      # 系统状态码
    "msg": "SUCCESS",                                 # 系统状态信息
    "status": 200,                                    # 接口状态
    "data": {                                         # 处理结果
        "current_num": 1,                                 # 当前帧统计人数
        "total_num": 8,                                   # 累积统计人数
        "frame_num": 500,                                 # 当前帧数
        "res_frame": "/9j/4AAQSkZJRgABAQAAAQABAAD/"       # 结果渲染图片的base64编码内容,如vis参数为False,此内容为null
    }
}

异常结果返回示例

{
    "code": 501,                                      # 系统状态码
    "msg": "region format error",                     # 系统状态信息
    "status": 200,                                    # 接口状态
    "data": null                                      # 处理结果
}

5、参数说明

在线认证请求参数详情

参数名称是否必选数据类型说明
app_keystring官网获取的APP_KEY
app_secretstring官网获取的APP_SECRET
service_keystring官网获取的SERVICE_KEY
license_pathstringlicense文件本地路径(首次认证时,license文件会被下载到该路径)

客流量统计算法请求参数详情

参数名称是否必选数据类型说明
video_pathstring 视频文件路径或视频
流地址视频文件格式支持:mp4、mkv、mov、avi
视频流地址协议支持:RTSP、RTMP
regionlist 有效进入区域的坐标,支持多个多边形区域;缺省值为None,缺省时,默认进行门前通过人数统计;
传入正确坐标时,进行入店人数统计 region参数格式:[[(x11, y11),(x12, y12),…,(x1n, y1n)], [(x21, y21),(x22, y22),…,
(x2n, y2n)],[(xm1, ym1),(xm2, ym2),…,(xmn, ymn)]]其中n表示多边形的点的个数,m表示多边形个数,x,y均为int型整数
visbool是否返回结果渲染图,缺省值为False
mosaicbool是否给人像区域打码,缺省值为True
devicestring 设备参数,”cpu”和”gpu”两种可选,缺省值为”cpu”;如在TPU上使用,保持缺省
gpu_idint 如使用显卡,用该参数指定显卡序号,缺省值为0;如在TPU上使用,保持缺省

客流量统计算法返回参数详情

参数名称数据类型说明
codeint 系统状态码;系统未发生异常时,默认保持200
msgstring 系统状态信息;系统未发生异常时,默认保持”SUCCESS”
statusint接口状态,默认保持200
datadict处理结果数据,字典中包含以下四个数据;系统发生异常时,该参数返回null
current_numint 当前帧统计人数
total_numint 累积统计人数
frame_numint 当前帧数
res_framestring 结果渲染图片的base64编码内容,当请求参数vis为False,该参数返回null

6、错误码

错误码信息

error_codeerror_msg描述
300required parameter is null必要参数未传入
500SDK Not AuthorizedSDK在线认证失败
501region format errorregion数据格式错误,请检查传入的region数据格式是否正确(如数据类型错误、维数错误、x,y坐标未成对出现)
502CUDA device errorCUDA设备错误
503video initialization errorCUDA设备错误
504frame data error视频帧数据缺失
505unsupported video format不支持的视频文件格式或视频流协议
509unknown error未知错误