顾客识别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 | 未知错误 |