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
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
# 步长,默认为1,通过它可以自行把握效率与颗粒度 # 设定为2时,会以2帧为一个单位进行遍历 # 即跳过一帧 step=1, # 默认为0.2,即将图片缩放为0.2倍 # 主要为了提高计算效率 # 如果你担心影响分析效果,可以将其提高 compress_rate=0.2, # 或者直接指定尺寸 # 当压缩率与指定尺寸同时传入时,优先以指定尺寸为准 # target_size=(200, 400), ) # 在 0.4.2 之后,hook特性正式被加入:https://williamfzc.github.io/stagesepx/#/pages/3_how_it_works?id=hook # 使用极其简单,你只需要初始化 hook hook = ExampleHook() # 再将 hook 添加到 cutter 或者 classifier 中去 cutter.add_hook(hook) # 支持多个hook,他们会按顺序执行 # 当 overwrite 被设置为 true 时,hook的修改将会持续影响到后续的分析 # 否则 hook 操作的都是 frame 的副本 hook1 = ExampleHook(overwrite=True) cutter.add_hook(hook1) # 在 0.7.0 之后,CropHook加入,被用于局部检测 # 它能够对帧进行裁剪,使用户能够只对视频的其中一部分进行分析 # 例如,它能够顺利解决轮播图问题:https://github.com/williamfzc/stagesepx/issues/55 # 它采用两种参数,size 与 offset,分别对应 裁剪区域大小 与 偏移量 # 例如,你希望裁剪出画面右下角的 1/4 hook2 = CropHook( # 高度为 0.5 * height,宽度为 0.5 * width
def test_preload_with_hook(): v = VideoObject(VIDEO_PATH) hook = ExampleHook() v.add_preload_hook(hook) v.load_frames()