顾客识别SDK使用文档

在目标相机中匹配指定人物,主要适用于中大型超市多相机场景,摄像头视角为正常监控摄像头视角,以人体作为主要检测目标,然后在其他角度的视频中搜索该人物,核心功能:

1.检测图片中的人物

2.计算人物框的特征

3.在视频中匹配该人物特征

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(版本不限)

requests(版本不限)

pycryptodome(版本不限)

scikit-image(版本不限)

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安装

3.1 环境准备 (ubuntu16.04)

# 事先安装miniconda
conda create -n reid python=3.6
source activate reid

# cpu
pip install tensorflow==1.15

# gpu
pip install tensorflow-gpu==1.15
        

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

pip install reid-0.0.1-py36-none-linux_x86_64.whl
        

4、调用方式

在线认证

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

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

认证成功返回结果

True
        

认证失败返回结果

False
        

初始化行人重识别对象

认证成功后,参考如下代码初始化一个行人重识别对象

"""
初始化行人重识别对象:
device:         设备,cpu或gpu
gpu_id:         使用的gpu设备号
"""

from reid.reid import Reid
# cpu
reid = Reid(device="cpu")
# gpu
reid = Reid(device="gpu", gpu_id="0")
        

使用gpu,但设备无效或不存在时,执行后续接口返回 505

人检测

参考如下代码调用人检测

img_path = "example.jpg"
person_img_list, score_list, feature_list, status_code = reid.detect_person(img_path)
        

person_img_list: 人物切图列表 scores: 人检测置信度 feature_list: 人物特征列表

正常结果返回示例

([[...], [...]], [0.92235493, 0.878392432], [[...], [...]], 200)
        

异常结果返回示例

([], [], [], 500)
        

特征匹配

# example1,一个离线视频
video_path = "test.mp4"
save_path = "result"
ret, status_code = reid.person_match(video_path, query_fea, save_path)

# example2,离线视频的列表,不适用视频流
video_path = ["test.mp4", "test2.mp4"]
save_path = "result"
ret, status_code = reid.person_match(video_path, query_fea, save_path)

# example3,一个视频流
video_path = "rtsp://..."
ret, status_code = reid.person_match(video_path, query_fea, save_path)
        

query_fea: 来自人检测接口的返回值 支持的视频格式: .mp4, .mov, .mkv, .avi 支持的视频流协议: rtsp://, rtmp://

正常结果返回示例

({
    "test.mp4": {
        "frame_time_list": [...],
        "similar_list": [...],
        "img_path_list": [...]
    },
    "test2.mp4": {
        "frame_time_list": [...],
        "similar_list": [...],
        "img_path_list": [...]
    }
}, 200)

# 视频流不返回时间等信息:
(None, 200)
        

人物切图保存在对应路径下,文件名格式: `videoname/videoname_frameid_frametime_similar.jpg`

异常结果返回示例

(None, 500)
        

5、参数说明

在线认证请求参数详情

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

算法请求参数详情

参数名称 是否必选 数据类型 说明 范围
device str 设备 cpu, gpu
gpu_id str gpu设备号 0,1...

算法返回参数详情

参数名称 数据类型 说明
code int 系统状态码;系统未发生异常时,默认保持200
person_img_list list 人检测结果列表
score_list list 人检测置信度列表
feature_list list 人特征列表
frame_time_list list 匹配到人的时间列表
similar_list list 匹配相似度列表
img_path_list list 匹配人物切图保存路径

6、错误码

错误码信息

error_code error_msg 描述
300 required parameter is null 必要参数未传入
500 SDK Not Authorized SDK在线认证失败
501 feature not valid 无效的特征
502 parameter type error 参数类型错误
503 file not exists 文件不存在
504 file not valid 文件无效
505 CUDA device error CUDA设备错误
506 unsupported video format 不支持的视频文件格式或视频流协议
507 frame data error 视频帧数据缺失
508 video list is empty 视频列表为空
509 unknown error 未知错误