williamfzc/stagesepx

关于轮播图(走马灯)

williamfzc opened this issue · 2 comments

轮播图 / 走马灯 的 概念:https://element.eleme.cn/#/zh-CN/component/carousel

很多人有疑问,认为轮播图不应该被分为多个状态,即便上面的图片发生了改变。

半自动场景下(人工触发+人工看报告),其实轮播图被检测为多个阶段无伤大雅,甚至更好。无论你希望看哪个阶段的数据,你都可以直接计算出来。后面着重讨论的是全自动化的场景。

另外,轮播图这个概念是业务相关的,不会也不适合在该项目中做特定适配。毕竟很可能部分业务的场景就是检测轮播图切换速度。stagesepx 提供了两种方法用于处理该类情况:

  • 截取非轮播图的部分进行判断 #53
  • 屏蔽掉轮播图的区域 #56
# CropHook(>=0.7.0,被用于局部检测)
# 它能够对帧进行裁剪,使用户能够只对视频的其中一部分进行分析
# 例如,它能够顺利解决轮播图问题:https://github.com/williamfzc/stagesepx/issues/55
# 它采用两种参数,size 与 offset,分别对应 裁剪区域大小 与 偏移量
# 例如,你希望裁剪出画面右下角的 1/4
hook2 = CropHook(
    # 高度为 0.5 * height,宽度为 0.5 * width
    size=(0.5, 0.5),
    # 除了指定比例,你也可以直接指定绝对长度
    # 例如你希望裁剪 高度100 宽度200 的一部分
    # size=(100, 200),
    # 默认情况下,所有的坐标都是从左上角开始的
    # 如果我们需要偏移到右下角,意味着我们需要向下偏移 0.5 * height,向右偏移 0.5 * width
    # offset=(0.5, 0.5),
    # 当然,这里也可以指定绝对长度,同size
    # offset=(100, 100),
    overwrite=True,
)
# 在初始化完成后,你就可以将hook添加到 cutter 或 classifier 中了
# 在添加完成后,你可以发现,stagesepx 只会对你裁剪后的区域进行检测
cutter.add_hook(hook2)

# 针对 CropHook 的使用场景,IgnoreHook 被加入用于对其进行进一步补充(>=0.7.1)
# 与 CropHook 相反,它被用于对帧的一部分进行屏蔽
# 详见 https://github.com/williamfzc/stagesepx/issues/56
hook3 = IgnoreHook(
    # 它的参数解析方式与 CropHook 是一致的,此处不赘述
    # 与 CropHook 不同的是,此处指定的区域会被屏蔽掉
    size=(0.5, 0.5),
    offset=(0.5, 0.5),
    overwrite=True,
)

对图像处理不是很熟悉,想求教一下,屏蔽和裁剪这两种方式,对测算结果会有不同影响吗?还是说两者跑出来的结果其实是一样的?

肯定有,否则也不需要这俩东西了。