客流识别SDK使用文档
统计视频序列中经过图像视野(门前通过)或进入指定区域(入店)的人体个数,主要适用于店铺出入口场景,摄像头视角为正常监控摄像头视角,以人体作为主要检测目标,核心功能:
门前通过人数统计:摄像头视角覆盖店铺门前区域,传入摄像头视频序列,返回经过图像视野人体的个数,同时可返回结果渲染图。
入店人数统计:摄像头视角覆盖店铺入口区域,传入摄像头视频序列和指定有效进入区域坐标信息(如店铺内部区域),返回进入指定区域的人体个数,同时可返回结果渲染图。
1、平台支持
系统和硬件支持
CPU | GPU | TPU | |
---|---|---|---|
Ubuntu 16.04 LTS | √ | √ | × |
Windows 10 | 后续推出 | 后续推出 | × |
Mendel Linux | × | × | 后续推出 |
Python版本支持
Python 3.6 | Python 3.7 | Python 3.8 | |
---|---|---|---|
Ubuntu 16.04 LTS (CPU/GPU) | √ | 后续推出 | 后续推出 |
Windows 10 (CPU/GPU) | 后续推出 | 后续推出 | 后续推出 |
Mendel Linux (TPU) | × | 后续推出 | × |
2、依赖库
opencv-python
pillow
psutil
tensorflow版本见下表
CPU | GPU | TPU | |
---|---|---|---|
Ubuntu 16.04 LTS | tensorflow 1.15.0 | tensorflow-gpu 1.15.0 | - |
Windows 10 | tensorflow 1.15.0 | tensorflow-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_key | 是 | string | 官网获取的APP_KEY |
app_secret | 是 | string | 官网获取的APP_SECRET |
service_key | 是 | string | 官网获取的SERVICE_KEY |
license_path | 是 | string | license文件本地路径(首次认证时,license文件会被下载到该路径) |
客流量统计算法请求参数详情
参数名称 | 是否必选 | 数据类型 | 说明 |
---|---|---|---|
video_path | 是 | string |
视频文件路径或视频 流地址视频文件格式支持:mp4、mkv、mov、avi 视频流地址协议支持:RTSP、RTMP |
region | 否 | list |
有效进入区域的坐标,支持多个多边形区域;缺省值为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型整数 |
vis | 否 | bool | 是否返回结果渲染图,缺省值为False |
mosaic | 否 | bool | 是否给人像区域打码,缺省值为True |
device | 否 | string | 设备参数,”cpu”和”gpu”两种可选,缺省值为”cpu”;如在TPU上使用,保持缺省 |
gpu_id | 否 | int | 如使用显卡,用该参数指定显卡序号,缺省值为0;如在TPU上使用,保持缺省 |
客流量统计算法返回参数详情
参数名称 | 数据类型 | 说明 |
---|---|---|
code | int | 系统状态码;系统未发生异常时,默认保持200 |
msg | string | 系统状态信息;系统未发生异常时,默认保持”SUCCESS” |
status | int | 接口状态,默认保持200 |
data | dict | 处理结果数据,字典中包含以下四个数据;系统发生异常时,该参数返回null |
current_num | int | 当前帧统计人数 |
total_num | int | 累积统计人数 |
frame_num | int | 当前帧数 |
res_frame | string | 结果渲染图片的base64编码内容,当请求参数vis为False,该参数返回null |
6、错误码
错误码信息
error_code | error_msg | 描述 |
---|---|---|
300 | required parameter is null | 必要参数未传入 |
500 | SDK Not Authorized | SDK在线认证失败 |
501 | region format error | region数据格式错误,请检查传入的region数据格式是否正确(如数据类型错误、维数错误、x,y坐标未成对出现) |
502 | CUDA device error | CUDA设备错误 |
503 | video initialization error | CUDA设备错误 |
504 | frame data error | 视频帧数据缺失 |
505 | unsupported video format | 不支持的视频文件格式或视频流协议 |
509 | unknown error | 未知错误 |