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