예제 #1
0
def test_read(test_video_file):
    """ Test VideoManager read method. """
    video_manager = VideoManager([test_video_file] * 2)
    base_timecode = video_manager.get_base_timecode()
    try:
        video_manager.start()
        assert video_manager.get_current_timecode() == base_timecode
        for i in range(1, 10):
            # VideoManager.read() -> Tuple[bool, numpy.ndarray]
            ret_val, frame_image = video_manager.read()
            assert ret_val
            assert frame_image.shape[0] > 0
            assert video_manager.get_current_timecode() == base_timecode + i
    finally:
        video_manager.release()
def test_read(test_video_file):
    """ Test VideoManager read method. """
    video_manager = VideoManager([test_video_file] * 2)
    base_timecode = video_manager.get_base_timecode()
    try:
        video_manager.start()
        assert video_manager.get_current_timecode() == base_timecode
        for i in range(1, 10):
            # VideoManager.read() -> Tuple[bool, numpy.ndarray]
            ret_val, frame_image = video_manager.read()
            assert ret_val
            assert frame_image.shape[0] > 0
            assert video_manager.get_current_timecode() == base_timecode + i
    finally:
        video_manager.release()
예제 #3
0
def scene_detect(opt):

    video_manager = VideoManager(
        [os.path.join(opt.avi_dir, opt.reference, 'video.avi')])
    stats_manager = StatsManager()
    scene_manager = SceneManager(stats_manager)
    # Add ContentDetector algorithm (constructor takes detector options like threshold).
    scene_manager.add_detector(ContentDetector())
    base_timecode = video_manager.get_base_timecode()

    video_manager.set_downscale_factor()

    video_manager.start()

    scene_manager.detect_scenes(frame_source=video_manager)

    scene_list = scene_manager.get_scene_list(base_timecode)

    savepath = os.path.join(opt.work_dir, opt.reference, 'scene.pckl')

    if scene_list == []:
        scene_list = [(video_manager.get_base_timecode(),
                       video_manager.get_current_timecode())]

    with open(savepath, 'wb') as fil:
        pickle.dump(scene_list, fil)

    print('%s - scenes detected %d' % (os.path.join(
        opt.avi_dir, opt.reference, 'video.avi'), len(scene_list)))

    return scene_list
예제 #4
0
def test_seek(test_video_file):
    """ Test VideoManager seek method. """
    video_manager = VideoManager([test_video_file] * 2)
    base_timecode = video_manager.get_base_timecode()
    try:
        video_manager.start()
        assert video_manager.get_current_timecode() == base_timecode
        ret_val, frame_image = video_manager.read()
        assert ret_val
        assert frame_image.shape[0] > 0
        assert video_manager.get_current_timecode() == base_timecode + 1

        assert video_manager.seek(base_timecode + 10)
        assert video_manager.get_current_timecode() == base_timecode + 10
        ret_val, frame_image = video_manager.read()
        assert ret_val
        assert frame_image.shape[0] > 0
        assert video_manager.get_current_timecode() == base_timecode + 11

    finally:
        video_manager.release()
def test_seek(test_video_file):
    """ Test VideoManager seek method. """
    video_manager = VideoManager([test_video_file] * 2)
    base_timecode = video_manager.get_base_timecode()
    try:
        video_manager.start()
        assert video_manager.get_current_timecode() == base_timecode
        ret_val, frame_image = video_manager.read()
        assert ret_val
        assert frame_image.shape[0] > 0
        assert video_manager.get_current_timecode() == base_timecode + 1

        assert video_manager.seek(base_timecode + 10)
        assert video_manager.get_current_timecode() == base_timecode + 10
        ret_val, frame_image = video_manager.read()
        assert ret_val
        assert frame_image.shape[0] > 0
        assert video_manager.get_current_timecode() == base_timecode + 11

    finally:
        video_manager.release()
예제 #6
0
def test_multiple_videos(test_video_file):
    """ Test VideoManager handling decoding frames across video boundaries. """

    NUM_FRAMES = 10
    NUM_VIDEOS = 3
    # Open VideoManager and get base timecode.
    video_manager = VideoManager([test_video_file] * NUM_VIDEOS)
    base_timecode = video_manager.get_base_timecode()

    # List of NUM_VIDEOS VideoManagers pointing to test_video_file.
    vm_list = [
        VideoManager([test_video_file]),
        VideoManager([test_video_file]),
        VideoManager([test_video_file])
    ]

    # Set duration of all VideoManagers in vm_list to NUM_FRAMES frames.
    for vm in vm_list:
        vm.set_duration(duration=base_timecode + NUM_FRAMES)
    # (FOR TESTING PURPOSES ONLY) Manually override _cap_list with the
    # duration-limited VideoManager objects in vm_list
    video_manager._cap_list = vm_list

    try:
        for vm in vm_list:
            vm.start()
        video_manager.start()
        assert video_manager.get_current_timecode() == base_timecode

        curr_time = video_manager.get_base_timecode()
        while True:
            ret_val, frame_image = video_manager.read()
            if not ret_val:
                break
            assert frame_image.shape[0] > 0
            curr_time += 1
        assert curr_time == base_timecode + ((NUM_FRAMES + 1) * NUM_VIDEOS)

    finally:
        # Will release the VideoManagers in vm_list as well.
        video_manager.release()
def test_multiple_videos(test_video_file):
    """ Test VideoManager handling decoding frames across video boundaries. """

    NUM_FRAMES = 10
    NUM_VIDEOS = 3
    # Open VideoManager and get base timecode.
    video_manager = VideoManager([test_video_file] * NUM_VIDEOS)
    base_timecode = video_manager.get_base_timecode()

    # List of NUM_VIDEOS VideoManagers pointing to test_video_file.
    vm_list = [
        VideoManager([test_video_file]),
        VideoManager([test_video_file]),
        VideoManager([test_video_file])]

    # Set duration of all VideoManagers in vm_list to NUM_FRAMES frames.
    for vm in vm_list: vm.set_duration(duration=base_timecode+NUM_FRAMES)
    # (FOR TESTING PURPOSES ONLY) Manually override _cap_list with the
    # duration-limited VideoManager objects in vm_list
    video_manager._cap_list = vm_list

    try:
        for vm in vm_list: vm.start()
        video_manager.start()
        assert video_manager.get_current_timecode() == base_timecode

        curr_time = video_manager.get_base_timecode()
        while True:
            ret_val, frame_image = video_manager.read()
            if not ret_val:
                break
            assert frame_image.shape[0] > 0
            curr_time += 1
        assert curr_time == base_timecode + ((NUM_FRAMES+1) * NUM_VIDEOS)

    finally:
        # Will release the VideoManagers in vm_list as well.
        video_manager.release()