コード例 #1
0
ファイル: test_hook.py プロジェクト: testerLr/stagesepx
def test_hook():
    # init hook
    hook = ExampleHook()
    hook1 = ExampleHook(overwrite=True)
    hook2 = IgnoreHook(size=(0.5, 0.5), overwrite=True)
    frame_home = os.path.join(PROJECT_PATH, 'frame_save_dir')
    hook3 = FrameSaveHook(frame_home)
    hook4 = CropHook(
        size=(0.5, 0.5),
        offset=(0., 0.5),
        overwrite=True,
    )
    hook5 = RefineHook()
    hook6 = InvalidFrameDetectHook()
    hook7 = TemplateCompareHook({
        'amazon': IMAGE_PATH,
    })

    # --- cutter ---
    cutter = VideoCutter(compress_rate=0.8)
    # add hook
    cutter.add_hook(hook)
    cutter.add_hook(hook1)
    cutter.add_hook(hook2)
    cutter.add_hook(hook3)
    cutter.add_hook(hook4)
    cutter.add_hook(hook5)
    cutter.add_hook(hook6)
    cutter.add_hook(hook7)

    res = cutter.cut(VIDEO_PATH)
    stable, unstable = res.get_range()
    assert len(stable) == 2, 'count of stable range is not correct'

    data_home = res.pick_and_save(
        stable,
        5,
    )
    assert os.path.isdir(data_home), 'result dir not existed'

    # --- classify ---
    cl = SVMClassifier()
    cl.load(data_home)
    cl.train()
    classify_result = cl.classify(VIDEO_PATH, stable)

    # --- draw ---
    r = Reporter()
    report_path = os.path.join(data_home, 'report.html')
    r.draw(
        classify_result,
        report_path=report_path,
        cut_result=res,
    )
    assert os.path.isfile(report_path)

    # hook check
    assert os.path.isdir(frame_home)
    assert hook6.result
    assert hook7.result
コード例 #2
0
def test_hook():
    # init hook
    hook = ExampleHook()
    hook1 = ExampleHook()
    hook2 = IgnoreHook(size=(0.5, 0.5))
    frame_home = os.path.join(PROJECT_PATH, "frame_save_dir")
    hook3 = FrameSaveHook(frame_home)
    hook4 = CropHook(size=(0.5, 0.5), offset=(0.0, 0.5))
    hook5 = RefineHook()
    hook6 = InterestPointHook()
    hook7 = TemplateCompareHook({"amazon": IMAGE_PATH})

    # --- cutter ---
    cutter = VideoCutter(compress_rate=0.9)
    # add hook
    cutter.add_hook(hook)
    cutter.add_hook(hook1)
    cutter.add_hook(hook2)
    cutter.add_hook(hook3)
    cutter.add_hook(hook4)
    cutter.add_hook(hook5)
    cutter.add_hook(hook6)
    cutter.add_hook(hook7)

    res = cutter.cut(VIDEO_PATH)
    stable, unstable = res.get_range()
    assert len(stable) == 2, "count of stable range is not correct"

    data_home = res.pick_and_save(stable, 5)
    assert os.path.isdir(data_home), "result dir not existed"

    # --- classify ---
    cl = SVMClassifier()
    cl.load(data_home)
    cl.train()
    classify_result = cl.classify(VIDEO_PATH, stable)

    # --- draw ---
    r = Reporter()
    report_path = os.path.join(data_home, "report.html")
    r.draw(classify_result, report_path=report_path, cut_result=res)
    assert os.path.isfile(report_path)

    # hook check
    assert os.path.isdir(frame_home)
    assert hook6.result
    assert hook7.result
コード例 #3
0
    # 默认情况下,所有的坐标都是从左上角开始的
    # 如果我们需要偏移到右下角,意味着我们需要向下偏移 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)

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

# 开始切割
res = cutter.cut(
    video_path,
    # block 能够对每帧进行切割并分别进行比较,计算出更加敏感的ssim值
    # 默认为2,即切为4宫格;若为4,即切为16宫格,以此类推;为1即不做切割,全图比较
    # 值得注意,如果无法整除,block是会报错的
    block=2,
)

# 你可以将你的cutter结果保存起来,供其他时刻使用(>=0.4.4)
コード例 #4
0
# 使用Keras方法进行预测
cl = KerasClassifier()
cl.load_model('./model.h5')

# 将视频切分成帧
file_name = './video_for_forecast.mp4'
# 预加载,大幅度提升分析速度
video = VideoObject(file_name, pre_load=True)
# 新建帧,计算视频总共有多少帧,每帧多少ms
video.load_frames()
# 压缩视频
cutter = VideoCutter()
# 这个hook是干什么的,后续做解释
hook = IgnoreHook(
    size=(0.05, 1),
    overwrite=True,
)
cutter.add_hook(hook)
# 计算每一帧视频的每一个block的ssim和psnr。
res = cutter.cut(video, block=6)
# 计算出哪些区间是稳定的,哪些是不稳定的。判断A帧到B帧之间是稳定还是不稳定
stable, unstable = res.get_range(threshold=0.97, offset=2)
# 把分好类的稳定阶段的图片存本地
res.pick_and_save(stable,
                  30,
                  to_dir='./picture/forecast_stable',
                  meaningful_name=True)
res.pick_and_save(unstable,
                  30,
                  to_dir='./picture/forecast_unstable',
                  meaningful_name=True)