2020-05-11

新零售-人形Reid

git 地址:http://l-git2.dev.cn2.corp.agrant.cn/cue_retail/retailx_reid.git

Introduction - 介绍

1)分析视频,负责人形检测+简单reid。
2)根据人形检测框和简单reid值做 tracking 轨迹追踪。
3)根据 linecross 配置,触发轨迹的跨线的事件(双向事件:进店、出店)。
4)根据跨线事件,触发人形图像采集(定位采集)。
5)定义时钟事件,触发人形图像采集(定时采集)。
6)高级 reid 模型 预处理采集的人形图像,保存特征数据(业务属性, reid 特征,检测框位置,检测事件戳)。
7)根据高级reid特征,做进出店匹配。采样率大于70%是,top1 准确率大于70%。
8)根据进出店匹配,计算在店停留时长。统计店铺在店停留时长分布。(日采样率大于70% 或采样量大于300对)

人工标注,一店一天停留分布图

2451589192697_.pic_hd.jpg

'算法计算,一天一店停留分布图
210_4.32_0.5.png

531_4.13_0.5-0.3.png

Requirements - 必要条件(环境,对所有项目,和所有子模块和库的描述。)

1)NUC 盒子;ubuntu 18.06 以上; 预装 openvino
2)需要联网,可访问 腾讯云cos存储。
3)cue 人形检测模型:f16_s512_ssdmobilenetV2

  1. intel 人形reid模型:person-reidentification-retail-0079 FP16
  2. cue 人形reid模型:fpn_osnet_x1_0_d512_d256_h384_w192_FP16_V20200323

Configuration - 配置

(待定)

Installation - 安装

(待定)

Usage - 用法

1)Camer 模块的三种使用方式

usb 摄像头:

usb_cam = Camera(video=0, size=[640, 480], type="usb")

rtsp 摄像头:

rtsp_cam = Camera(video="rtsp://admin:xyab1234@10.30.3.157:554/h264/ch2/sub/av_stream", type="rtsp")

video 文件:

video_cam = Camera(video="~/video.mp4", video_start_tmsp=0, video_fps=15, type="file")

两种运行方式:

# 根据视频里的时间,按固定帧率获取视频图像。
cam.do_frames(do_fps)

# 根据视频里的时间,按固定帧率获取视频图像, 并当作观看者的帧率播放出来。 (用于以正常速度,低帧率播放已经录制好的视频文件)
cam.play_frames(do_fps)

# Demo
cam.show("demo", cam.play_frames, fps)
cam.show("demo", cam.do_frames, fps)

2)ReidInference 模块

ReidInference: 推断模块,内建 人形检测 和 用于tracking 的简单reid模型。
接口: get_crowd(frame, tmsp)
输入:原始尺寸图片 + 时间戳
输出: crowd 数据(PersonDB 数据对象)

Demo

    infer = ReidInference()
    img = cv2.imread(img_path)
    crowd = infer.get_crowd(img, time.time())
    i = 0
    for person, descriptor in PersonDB.objs(crowd):
        print(person.det, person.tmsp, person.descriptor)
        cv2.imwrite("data/person_%d.jpg" % i, person.frame)
        i += 1

3) ReidTracking 模块

功能:用于轨迹追踪的模块,基于PersonDB算法包。
接口:on_dets(crowd, tmsp)
输入:crowd:检测数据, tmsp 时间戳
内部构建追踪对象 traces (基于PersonDB算法包)

4)LineCross 模块

功能:根据 lines 配置,判断轨迹的业务分析结果(进店、出店)
接口:cross(trace)
返回:业务分析结果,会写在trace里返回
trace.cross = cross
trace.cross_type = self.cross_type(cross)

5)ReidVideo

功能:对视频进行业务分析,做检测和人形提取。

    cam = Camera(video=video, video_start_tmsp=video_start_tmsp, video_fps=video_fps)
    info = ReidInference()
    # qcs = QCloudService()
    qcs = None
    # qcs 为空,输出图像到本地文件系统。

    w = ReidVideo(info, cam, qcs,
                  # img_output="sijiu.duan/reid/[shopid]/reid/[year-month-day]/[type]/[cameraid]/[hour][ms]_[traceid].jpg",
                  img_output="/home/pi/dev/retailx_reid/reid/[shopid]/reid/[year-month-day]/[type]/[cameraid]/[hour][ms]_[traceid].jpg",
                  shopid=shopid,
                  cameraid=cameraid,
                  fps=4)

    cam.show(w.frames, 4)

6) ReidSet reid 数据集合生成器

功能:对于制定某天某店铺的所有进店/出店人形,生成reid 数据集合。数据集合包含图像本身和高级reid模型计算的特征向量。用于后期快速浸出店匹配。

def demo_inference_save(full_path):
    reid_infer = InferenceCUEPersonReid()

    if "instore" in full_path:
        io_fmt = "/home/pi/dev/retailx_reid/reid/[shopid]/reid/[date]/img_in/C001021/"
    elif "outstore" in full_path:
        io_fmt = "/home/pi/dev/retailx_reid/reid/[shopid]/reid/[date]/img_out/C001021/"
    else:
        print("Error! 'instore' or 'outstore' should in the save file name:", full_path)
        return

    instore = ReidSet(shopid="3a04d33f3cab4cd8af6c942b6d211116",
                      date="2020-01-01",
                      fmt=io_fmt)

    io = FileIO()
    instore.inference(reid_infer, io)
    ReidSet.save(instore, full_path)


def demo_load_show(full_path):
    instore = ReidSet.load(full_path)
    instore.show(full_path)

7) InOutMatch 进出店匹配模块

功能:用于进出店匹配,计算顾客停留时长分布图;平均停留时长。
Demo:

def demo():
    mt = InOutMatch()
    maches, stay_times = mt.smart_maching()

    fig = plt.figure()
    x = np.array(stay_times)
    ax = fig.add_subplot(111)
    numBins = 120
    ax.hist(x, numBins, color='blue', alpha=0.8, rwidth=0.9)
    plt.grid(True)  #
    plt.title(u'weight')
    plt.show()

Development - 开发

开发者:段思九

Changelog - 更新日志

(待定)

FAQ - 常见问题

(待定)

Support - 支持

(待定)

Dos - 文档

(待定)

Contact - 联系

(待定)

License - 版权信息(版权和许可信息(或阅读许可证)、法律声明。)