Esempio n. 1
0
    def test_flat_value10(self):
        print 'test on flat pattern of value 10...'
        LOCAL_LOG_FILENAME = self.LOG_FILENAME + '_flat_value10'
        ref_yuv = VmafConfig.test_resource_path("yuv", "flat_1920_1080_0.yuv")
        dis_yuv = VmafConfig.test_resource_path("yuv", "flat_1920_1080_10.yuv")
        yuv_fmt = "yuv420p"
        yuv_width = 1920
        yuv_height = 1080
        cmd = self.CMD_TEMPLATE.format(vmaf=required(ExternalProgram.vmaf), fmt=yuv_fmt, ref=ref_yuv,
                                       dis=dis_yuv, w=yuv_width, h=yuv_height,
                                       log=LOCAL_LOG_FILENAME)
        run_process(cmd, shell=True)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm")[0], 1.0, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "ansnr")[0], 21.899511, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "motion")[0], 0.0, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif")[0], 1.0, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_num")[0], 149.780313, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_den")[0], 149.780392, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_num")[0], 2753999.99219, places=1)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_den")[0], 2754000.0, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "anpsnr")[0], 29.045954, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_num_scale0")[0],2073600.0, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_den_scale0")[0], 2073600.0, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_num_scale3")[0], 32400.0, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_den_scale3")[0], 32400.0, places=4)

        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_num_scale0")[0], 65.573967, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_den_scale0")[0], 65.573967, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_num_scale3")[0], 16.667711, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_den_scale3")[0], 16.667747, places=3)
Esempio n. 2
0
    def test_run_dis_yuv_raw_video_extractor_parallel(self):
        print 'test on running dis YUV raw video extractor...'
        ref_path = VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test", content_id=0, asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={'width':576, 'height':324})

        asset_original = Asset(dataset="test", content_id=0, asset_id=2,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=ref_path,
                      asset_dict={'width':576, 'height':324})

        h5py_file = DisYUVRawVideoExtractor.open_h5py_file(self.h5py_filepath)

        self.fextractor = DisYUVRawVideoExtractor(
            [asset, asset_original], None, fifo_mode=False,
            optional_dict={'channels': 'yu'},
            optional_dict2={'h5py_file': h5py_file}
        )

        with self.assertRaises(AssertionError):
            self.fextractor.run(parallelize=True)

        DisYUVRawVideoExtractor.close_h5py_file(h5py_file)
Esempio n. 3
0
    def test_train_test_on_raw_dataset_with_dis1st_thr(self):
        train_dataset = import_python_file(
            VmafConfig.test_resource_path('raw_dataset_sample.py'))
        model_param = import_python_file(
            VmafConfig.test_resource_path('model_param_sample.py'))
        feature_param = import_python_file(
            VmafConfig.test_resource_path('feature_param_sample.py'))

        train_fassembler, train_assets, train_stats, test_fassembler, test_assets, test_stats, _ = train_test_vmaf_on_dataset(
            train_dataset=train_dataset,
            test_dataset=train_dataset,
            feature_param=feature_param,
            model_param=model_param,
            train_ax=None,
            test_ax=None,
            result_store=None,
            parallelize=True,
            logger=None,
            fifo_mode=True,
            output_model_filepath=self.output_model_filepath
        )

        self.train_fassembler = train_fassembler
        self.assertTrue(os.path.exists(self.output_model_filepath))
        self.assertAlmostEqual(train_stats['ys_label_pred'][0], 93.565459224020742, places=3)
        self.assertAlmostEqual(test_stats['ys_label_pred'][0], 93.565459224020742, places=3)
Esempio n. 4
0
    def test_checkerboard_opposite(self):
        print 'test on checkerboard pattern opposite...'
        LOCAL_LOG_FILENAME = self.LOG_FILENAME + '_checkerboard_opposite'
        ref_yuv = VmafConfig.test_resource_path("yuv", "checkerboard_1920_1080_10_3_0_0.yuv")
        dis_yuv = VmafConfig.test_resource_path("yuv", "checkerboard_1920_1080_10_3_10_0.yuv")
        yuv_fmt = "yuv420p"
        yuv_width = 1920
        yuv_height = 1080
        cmd = self.CMD_TEMPLATE.format(vmaf=required(ExternalProgram.vmaf), fmt=yuv_fmt, ref=ref_yuv,
                                       dis=dis_yuv, w=yuv_width, h=yuv_height,
                                       log=LOCAL_LOG_FILENAME)
        run_process(cmd, shell=True)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm")[0], 0.053996333333333334, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "ansnr")[0], -5.758091333333334, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "motion")[0], 12.554836666666667, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif")[0], 0.0, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_num")[0], 149.780313, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_den")[0], 2773.891225, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_num")[0], 6.66666666667, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_den")[0], 33021387.0625, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "anpsnr")[0], 2.984752, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_num_scale0")[0], 6.66666666667, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_den_scale0")[0], 25757473.3333, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_num_scale3")[0], 0.0, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_den_scale3")[0], 259774.9375, places=3)

        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_num_scale0")[0], 65.573967, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_den_scale0")[0], 277.120382, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_num_scale3")[0], 16.667711, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_den_scale3")[0], 924.193766, places=3)
Esempio n. 5
0
    def test_checkerboard_shifted_by_1(self):
        print 'test on checkerboard pattern shifted by 1...'
        LOCAL_LOG_FILENAME = self.LOG_FILENAME + '_checkerboard_shifted_by_1'
        ref_yuv = VmafConfig.test_resource_path("yuv", "checkerboard_1920_1080_10_3_0_0.yuv")
        dis_yuv = VmafConfig.test_resource_path("yuv", "checkerboard_1920_1080_10_3_1_0.yuv")
        yuv_fmt = "yuv420p"
        yuv_width = 1920
        yuv_height = 1080
        cmd = self.CMD_TEMPLATE.format(vmaf=required(ExternalProgram.vmaf), fmt=yuv_fmt, ref=ref_yuv,
                                       dis=dis_yuv, w=yuv_width, h=yuv_height,
                                       log=LOCAL_LOG_FILENAME)
        run_process(cmd, shell=True)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm")[0], 0.7853383333333334, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "ansnr")[0], 7.92623066667, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "motion")[0], 12.5548366667, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif")[0], 0.156834666667, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_num")[0], 2178.5352886666665, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_den")[0], 2773.891225, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_num")[0], 5178894.51562, places=-1)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_den")[0], 33021387.0625, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "anpsnr")[0], 16.669074, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_num_scale0")[0], 2908829.0, places=-1)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_den_scale0")[0], 25757473.3333, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_num_scale3")[0], 128957.796875, places=-2)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_den_scale3")[0], 259774.9375, places=3)

        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_num_scale0")[0], 201.15329999999997, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_den_scale0")[0], 277.120382, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_num_scale3")[0], 765.1562903333333, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_den_scale3")[0], 924.193766, places=3)
    def test_run_strred_fextractor(self):
        print 'test on running STRRED feature extractor...'
        ref_path = VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test", content_id=0, asset_id=0,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={'width':576, 'height':324})

        asset_original = Asset(dataset="test", content_id=0, asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=ref_path,
                      asset_dict={'width':576, 'height':324})

        self.fextractor = StrredFeatureExtractor(
            [asset, asset_original],
            None, fifo_mode=True,
            result_store=None
        )
        self.fextractor.run(parallelize=True)

        results = self.fextractor.results

        self.assertAlmostEqual(results[0]['STRRED_feature_srred_score'], 3.0114681041666671, places=4)
        self.assertAlmostEqual(results[0]['STRRED_feature_trred_score'], 7.3039486249999994, places=4)
        self.assertAlmostEqual(results[0]['STRRED_feature_strred_score'], 21.995608318659482, places=4)
        self.assertAlmostEqual(results[1]['STRRED_feature_srred_score'], 0.0, places=4)
        self.assertAlmostEqual(results[1]['STRRED_feature_trred_score'], 0.0, places=4)
        self.assertAlmostEqual(results[1]['STRRED_feature_strred_score'], 0.0, places=4)
Esempio n. 7
0
    def test_run_parallel_ssim_fextractor(self):
        print 'test on running SSIM feature extractor in parallel...'
        ref_path = VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test", content_id=0, asset_id=0,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={'width':576, 'height':324})

        asset_original = Asset(dataset="test", content_id=0, asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=ref_path,
                      asset_dict={'width':576, 'height':324})

        self.fextractor = SsimFeatureExtractor(
            [asset, asset_original, asset],
            None, fifo_mode=True,
            result_store=None
        )
        self.fextractor.run(parallelize=True)
        results = self.fextractor.results

        self.assertAlmostEqual(results[0]['SSIM_feature_ssim_score'], 0.86322654166666657, places=4)
        self.assertAlmostEqual(results[0]['SSIM_feature_ssim_l_score'], 0.9981474583333334, places=4)
        self.assertAlmostEqual(results[0]['SSIM_feature_ssim_c_score'], 0.96126793750000006, places=4)
        self.assertAlmostEqual(results[0]['SSIM_feature_ssim_s_score'], 0.89773633333333336, places=4)

        self.assertAlmostEqual(results[1]['SSIM_feature_ssim_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['SSIM_feature_ssim_l_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['SSIM_feature_ssim_c_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['SSIM_feature_ssim_s_score'], 1.0, places=4)

        self.assertAlmostEqual(results[2]['SSIM_feature_ssim_score'], 0.86322654166666657, places=4)
Esempio n. 8
0
    def test_explain_vmaf_results(self):
        print 'test on running VMAF runner with local explainer...'
        ref_path = VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test", content_id=0, asset_id=0,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={'width':576, 'height':324})

        asset_original = Asset(dataset="test", content_id=0, asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=ref_path,
                      asset_dict={'width':576, 'height':324})

        self.runner = VmafQualityRunnerWithLocalExplainer(
            [asset, asset_original],
            None, fifo_mode=True,
            delete_workdir=True,
            result_store=None,
            optional_dict2={'explainer': LocalExplainer(neighbor_samples=100)}
        )

        np.random.seed(0)

        self.runner.run()
        results = self.runner.results

        self.assertAlmostEqual(results[0]['VMAF_score'], 76.699271272486044, places=4)
        self.assertAlmostEqual(results[1]['VMAF_score'], 99.946416604585025, places=4)

        expected_feature_names = ['VMAF_feature_adm2_score',
                                  'VMAF_feature_motion2_score',
                                  'VMAF_feature_vif_scale0_score',
                                  'VMAF_feature_vif_scale1_score',
                                  'VMAF_feature_vif_scale2_score',
                                  'VMAF_feature_vif_scale3_score']

        weights = np.mean(results[0]['VMAF_scores_exps']['feature_weights'], axis=0)
        self.assertAlmostEqual(weights[0], 0.66021689480916868, places=4)
        self.assertAlmostEqual(weights[1], 0.14691682562211777, places=4)
        self.assertAlmostEqual(weights[2], -0.023682744847036086, places=4)
        self.assertAlmostEqual(weights[3], -0.029779341850172818, places=4)
        self.assertAlmostEqual(weights[4], 0.19149485210137338, places=4)
        self.assertAlmostEqual(weights[5], 0.31890978778344126, places=4)

        self.assertEqual(results[0]['VMAF_scores_exps']['feature_names'],
                         expected_feature_names)

        weights = np.mean(results[1]['VMAF_scores_exps']['feature_weights'], axis=0)
        self.assertAlmostEqual(weights[0], 0.69597961598838509, places=4)
        self.assertAlmostEqual(weights[1], 0.18256016705513464, places=4)
        self.assertAlmostEqual(weights[2], 0.0090048099912423147, places=4)
        self.assertAlmostEqual(weights[3], 0.028671810808880094, places=4)
        self.assertAlmostEqual(weights[4], 0.21935602577417926, places=4)
        self.assertAlmostEqual(weights[5], 0.34190431429767715, places=4)

        self.assertEqual(results[1]['VMAF_scores_exps']['feature_names'],
                         expected_feature_names)
Esempio n. 9
0
    def test_run_psnr_fextractor(self):
        print 'test on running PSNR feature extractor...'
        ref_path = VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test", content_id=0, asset_id=0,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={'width':576, 'height':324})

        asset_original = Asset(dataset="test", content_id=0, asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=ref_path,
                      asset_dict={'width':576, 'height':324})

        self.fextractor = PsnrFeatureExtractor(
            [asset, asset_original],
            None, fifo_mode=True,
            result_store=None
        )
        self.fextractor.run()

        results = self.fextractor.results

        self.assertAlmostEqual(results[0]['PSNR_feature_psnr_score'], 30.755063979166664, places=4)
        self.assertAlmostEqual(results[1]['PSNR_feature_psnr_score'], 60.0, places=4)
Esempio n. 10
0
    def test_run_asset_extractor(self):
        print 'test on running asset extractor...'
        ref_path = VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test", content_id=0, asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={'width':576, 'height':324,
                                  'quality_width':160, 'quality_height':90})

        asset_original = Asset(dataset="test", content_id=0, asset_id=2,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=ref_path,
                      asset_dict={'width':576, 'height':324,
                                  'quality_width':160, 'quality_height':90})

        self.fextractor = AssetExtractor(
            [asset, asset_original], None, fifo_mode=True)

        self.fextractor.run()

        results = self.fextractor.results

        self.assertEqual(str(results[0]['asset']), 'test_0_1_src01_hrc00_576x324_576x324_vs_src01_hrc01_576x324_576x324_q_160x90')
        self.assertEqual(str(results[1]['asset']), 'test_0_2_src01_hrc00_576x324_576x324_vs_src01_hrc00_576x324_576x324_q_160x90')

        self.fextractor.run(parallelize=True)

        results = self.fextractor.results

        self.assertEqual(str(results[0]['asset']), 'test_0_1_src01_hrc00_576x324_576x324_vs_src01_hrc01_576x324_576x324_q_160x90')
        self.assertEqual(str(results[1]['asset']), 'test_0_2_src01_hrc00_576x324_576x324_vs_src01_hrc00_576x324_576x324_q_160x90')
    def test_run_vmaf_fextractor_with_resampling(self):
        ref_path = VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test", content_id=0, asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={'width':576, 'height':324,
                                  'quality_width':160, 'quality_height':90})

        asset_original = Asset(dataset="test", content_id=0, asset_id=2,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=ref_path,
                      asset_dict={'width':576, 'height':324,
                                  'quality_width':160, 'quality_height':90})

        self.fextractor = VmafFeatureExtractor(
            [asset, asset_original], None, fifo_mode=False)

        self.fextractor.run(parallelize=False)

        results = self.fextractor.results

        self.assertAlmostEqual(results[0]['VMAF_feature_vif_score'], 0.782546520833, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_motion_score'],1.3216766875, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_adm_score'], 0.98229347916666665, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_ansnr_score'], 28.0085990417, places=4)

        self.assertAlmostEqual(results[1]['VMAF_feature_vif_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_motion_score'], 1.3216766875, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_adm_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_ansnr_score'], 31.811350125, places=4)
Esempio n. 12
0
    def test_checkerboard_identical(self):
        print 'test on checkerboard pattern identical...'
        LOCAL_LOG_FILENAME = self.LOG_FILENAME + '_checkerboardIdentical'
        ref_yuv = VmafConfig.test_resource_path("yuv", "checkerboard_1920_1080_10_3_0_0.yuv")
        dis_yuv = VmafConfig.test_resource_path("yuv", "checkerboard_1920_1080_10_3_0_0.yuv")
        yuv_fmt = "yuv420p"
        yuv_width = 1920
        yuv_height = 1080
        cmd = self.CMD_TEMPLATE.format(vmaf=required(ExternalProgram.vmaf), fmt=yuv_fmt, ref=ref_yuv,
                                       dis=dis_yuv, w=yuv_width, h=yuv_height,
                                       log=LOCAL_LOG_FILENAME)
        run_process(cmd, shell=True)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm")[0], 1.0, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "ansnr")[0], 21.1138813333, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "motion")[0], 12.554836666666667, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif")[0], 1.0, places=4)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_num")[0], 2773.891225, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_den")[0], 2773.891225, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_num")[0], 33021350.5, places=-3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_den")[0], 33021387.0625, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "anpsnr")[0], 29.8567246667, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_num_scale0")[0], 25757432.0, places=-3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_den_scale0")[0], 25757473.3333, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_num_scale3")[0], 259774.958333, places=1)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "vif_den_scale3")[0], 259774.9375, places=3)

        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_num_scale0")[0], 277.120382, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_den_scale0")[0], 277.120382, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_num_scale3")[0], 924.193766, places=3)
        self.assertAlmostEquals(read_log(LOCAL_LOG_FILENAME, "adm_den_scale3")[0], 924.193766, places=3)
    def test_run_parallel_moment_noref_fextractor(self):
        print 'test on running Moment noref feature extractor on NorefAssets in parallel...'
        ref_path = VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "src01_hrc01_576x324.yuv")
        asset = NorefAsset(dataset="test", content_id=0, asset_id=0,
                      workdir_root=VmafConfig.workdir_path(),
                      dis_path=dis_path,
                      asset_dict={'width':576, 'height':324})

        asset_original = NorefAsset(dataset="test", content_id=0, asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      dis_path=ref_path,
                      asset_dict={'width':576, 'height':324})

        fextractor = MomentNorefFeatureExtractor(
            [asset, asset_original],
            None,
            fifo_mode=True,
            delete_workdir=True,
            result_store=None,
        )
        self.fextractors = [fextractor]
        fextractor.run(parallelize=True)
        results = fextractor.results

        self.assertAlmostEqual(results[0]['Moment_noref_feature_1st_score'], 61.332006624999984)
        self.assertAlmostEqual(results[0]['Moment_noref_feature_2nd_score'], 4798.659574041666)
        self.assertAlmostEqual(results[0]['Moment_noref_feature_var_score'], 1036.8371843488285)

        self.assertAlmostEqual(results[1]['Moment_noref_feature_1st_score'], 59.788567297525134)
        self.assertAlmostEqual(results[1]['Moment_noref_feature_2nd_score'], 4696.668388042271)
        self.assertAlmostEqual(results[1]['Moment_noref_feature_var_score'], 1121.519917231207)
Esempio n. 14
0
    def test_run_vmaf_fextractor_checkerboard(self):
        print 'test on running VMAF feature extractor on checkerboard...'

        ref_path = VmafConfig.test_resource_path("yuv", "checkerboard_1920_1080_10_3_0_0.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "checkerboard_1920_1080_10_3_10_0.yuv")
        dis_path2 = VmafConfig.test_resource_path("yuv", "checkerboard_1920_1080_10_3_1_0.yuv")
        asset = Asset(dataset="test", content_id=0, asset_id=0,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={'width':1920, 'height':1080})

        asset_original = Asset(dataset="test", content_id=0, asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=ref_path,
                      asset_dict={'width':1920, 'height':1080})

        asset2 = Asset(dataset="test", content_id=0, asset_id=2,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path2,
                      asset_dict={'width':1920, 'height':1080})

        self.fextractor = VmafFeatureExtractor(
            [asset, asset_original, asset2],
            None, fifo_mode=True,
            result_store=None
        )
        self.fextractor.run()

        results = self.fextractor.results

        self.assertAlmostEqual(results[0]['VMAF_feature_adm_score'], 0.053996333333333334, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_adm2_score'], 0.053996333333333334, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_adm_scale0_score'], 0.23738393128710478, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_adm_scale1_score'], 0.08524788663335138, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_adm_scale2_score'], 0.024058909404945077, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_adm_scale3_score'], 0.018034879735107798, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_motion_score'], 12.554836666666667, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_motion2_score'], 12.554836666666667, places=4)

        self.assertAlmostEqual(results[1]['VMAF_feature_adm_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_adm2_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_adm_scale0_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_adm_scale1_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_adm_scale2_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_adm_scale3_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_motion_score'], 12.554836666666667, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_motion2_score'], 12.554836666666667, places=4)

        self.assertAlmostEqual(results[2]['VMAF_feature_adm_score'], 0.78533833333333336, places=4)
        self.assertAlmostEqual(results[2]['VMAF_feature_adm2_score'], 0.7853384465157921, places=4)
        self.assertAlmostEqual(results[2]['VMAF_feature_adm_scale0_score'], 0.72132189911792899, places=4)
        self.assertAlmostEqual(results[2]['VMAF_feature_adm_scale1_score'], 0.69259738857522501, places=4)
        self.assertAlmostEqual(results[2]['VMAF_feature_adm_scale2_score'], 0.80415911639244586, places=4)
        self.assertAlmostEqual(results[2]['VMAF_feature_adm_scale3_score'], 0.82791889676239039, places=4)
        self.assertAlmostEqual(results[2]['VMAF_feature_motion_score'], 12.554836666666667, places=4)
        self.assertAlmostEqual(results[2]['VMAF_feature_motion2_score'], 12.554836666666667, places=4)
Esempio n. 15
0
    def test_run_ms_ssim_fextractor(self):
        print 'test on running MS-SSIM feature extractor...'
        ref_path = VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test", content_id=0, asset_id=0,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={'width':576, 'height':324})

        asset_original = Asset(dataset="test", content_id=0, asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=ref_path,
                      asset_dict={'width':576, 'height':324})

        self.fextractor = MsSsimFeatureExtractor(
            [asset, asset_original],
            None, fifo_mode=True,
            result_store=None
        )
        self.fextractor.run()

        results = self.fextractor.results

        self.assertAlmostEqual(results[0]['MS_SSIM_feature_ms_ssim_score'], 0.9632498125, places=4)
        self.assertAlmostEqual(results[0]['MS_SSIM_feature_ms_ssim_l_scale0_score'], 0.9981474583333334, places=4)
        self.assertAlmostEqual(results[0]['MS_SSIM_feature_ms_ssim_c_scale0_score'], 0.96126793750000006, places=4)
        self.assertAlmostEqual(results[0]['MS_SSIM_feature_ms_ssim_s_scale0_score'], 0.89773633333333336, places=4)
        self.assertAlmostEqual(results[0]['MS_SSIM_feature_ms_ssim_l_scale1_score'], 0.99899612500000001, places=4)
        self.assertAlmostEqual(results[0]['MS_SSIM_feature_ms_ssim_c_scale1_score'], 0.9857694375, places=4)
        self.assertAlmostEqual(results[0]['MS_SSIM_feature_ms_ssim_s_scale1_score'], 0.941185875, places=4)
        self.assertAlmostEqual(results[0]['MS_SSIM_feature_ms_ssim_l_scale2_score'], 0.99923564583333324, places=4)
        self.assertAlmostEqual(results[0]['MS_SSIM_feature_ms_ssim_c_scale2_score'], 0.997034020833, places=4)
        self.assertAlmostEqual(results[0]['MS_SSIM_feature_ms_ssim_s_scale2_score'], 0.977992145833, places=4)
        self.assertAlmostEqual(results[0]['MS_SSIM_feature_ms_ssim_l_scale3_score'], 0.99929210416666658, places=4)
        self.assertAlmostEqual(results[0]['MS_SSIM_feature_ms_ssim_c_scale3_score'], 0.999588104167, places=4)
        self.assertAlmostEqual(results[0]['MS_SSIM_feature_ms_ssim_s_scale3_score'], 0.99387125, places=4)
        self.assertAlmostEqual(results[0]['MS_SSIM_feature_ms_ssim_l_scale4_score'], 0.99940356249999995, places=4)
        self.assertAlmostEqual(results[0]['MS_SSIM_feature_ms_ssim_c_scale4_score'], 0.999907625, places=4)
        self.assertAlmostEqual(results[0]['MS_SSIM_feature_ms_ssim_s_scale4_score'], 0.998222583333, places=4)

        self.assertAlmostEqual(results[1]['MS_SSIM_feature_ms_ssim_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['MS_SSIM_feature_ms_ssim_l_scale0_score'], 1., places=4)
        self.assertAlmostEqual(results[1]['MS_SSIM_feature_ms_ssim_c_scale0_score'], 1., places=4)
        self.assertAlmostEqual(results[1]['MS_SSIM_feature_ms_ssim_s_scale0_score'], 1., places=4)
        self.assertAlmostEqual(results[1]['MS_SSIM_feature_ms_ssim_l_scale1_score'], 1., places=4)
        self.assertAlmostEqual(results[1]['MS_SSIM_feature_ms_ssim_c_scale1_score'], 1., places=4)
        self.assertAlmostEqual(results[1]['MS_SSIM_feature_ms_ssim_s_scale1_score'], 1., places=4)
        self.assertAlmostEqual(results[1]['MS_SSIM_feature_ms_ssim_l_scale2_score'], 1., places=4)
        self.assertAlmostEqual(results[1]['MS_SSIM_feature_ms_ssim_c_scale2_score'], 1., places=4)
        self.assertAlmostEqual(results[1]['MS_SSIM_feature_ms_ssim_s_scale2_score'], 1., places=4)
        self.assertAlmostEqual(results[1]['MS_SSIM_feature_ms_ssim_l_scale3_score'], 1., places=4)
        self.assertAlmostEqual(results[1]['MS_SSIM_feature_ms_ssim_c_scale3_score'], 1., places=4)
        self.assertAlmostEqual(results[1]['MS_SSIM_feature_ms_ssim_s_scale3_score'], 1., places=4)
        self.assertAlmostEqual(results[1]['MS_SSIM_feature_ms_ssim_l_scale4_score'], 1., places=4)
        self.assertAlmostEqual(results[1]['MS_SSIM_feature_ms_ssim_c_scale4_score'], 1., places=4)
        self.assertAlmostEqual(results[1]['MS_SSIM_feature_ms_ssim_s_scale4_score'], 1., places=4)
Esempio n. 16
0
    def test_bitrate(self):
        ref_path = VmafConfig.test_resource_path('yuv/', 'src01_hrc00_576x324.yuv')
        dis_path = VmafConfig.test_resource_path('yuv', 'src01_hrc01_576x324.yuv')

        asset = Asset(dataset="test", content_id=0, asset_id=0,
                      ref_path=ref_path, dis_path=dis_path,
                      asset_dict={'ref_start_frame':0, 'ref_end_frame':47,
                                  'dis_start_frame':0, 'dis_end_frame':47,
                                  'fps':23.976},)
        self.assertAlmostEquals(asset.ref_bitrate_kbps_for_entire_file,
                          53693.964287999996, places=4)
        self.assertAlmostEquals(asset.dis_bitrate_kbps_for_entire_file,
                          53693.964287999996, places=4)
Esempio n. 17
0
    def setUp(self):
        ref_path = VmafConfig.test_resource_path("yuv", "checkerboard_1920_1080_10_3_0_0.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "checkerboard_1920_1080_10_3_1_0.yuv")
        asset = Asset(dataset="test", content_id=0, asset_id=0,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={'width':1920, 'height':1080})

        self.runner = VmafLegacyQualityRunner(
            [asset], None, fifo_mode=True,
            delete_workdir=True, result_store=None,
        )
        self.runner.run()
        self.result = self.runner.results[0]
Esempio n. 18
0
    def test_run_testlib_runner(self):
        print 'test on running TESTLIB runner...'
        ref_path = VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test", content_id=0, asset_id=0,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={'width':576, 'height':324})

        asset_original = Asset(dataset="test", content_id=0, asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=ref_path,
                      asset_dict={'width':576, 'height':324})

        self.runner = TestLibRunner(
            [asset, asset_original],
            None, fifo_mode=True,
            delete_workdir=True,
            result_store=None,
        )
        self.runner.run()

        results = self.runner.results

        self.assertAlmostEqual(results[0]['TESTLIB_vif_scale0_score'],0.363420458333, places=4)
        self.assertAlmostEqual(results[0]['TESTLIB_vif_scale1_score'], 0.766647520833, places=4)
        self.assertAlmostEqual(results[0]['TESTLIB_vif_scale2_score'], 0.862854708333, places=4)
        self.assertAlmostEqual(results[0]['TESTLIB_vif_scale3_score'], 0.915971791667, places=4)
        self.assertAlmostEqual(results[0]['TESTLIB_motion2_score'], 3.8953518541666665, places=4)
        self.assertAlmostEqual(results[0]['TESTLIB_adm2_score'], 0.93458777083333333, places=4)
        self.assertAlmostEqual(results[0]['TESTLIB_psnr_score'], 30.7550666667, places=4)
        self.assertAlmostEqual(results[0]['TESTLIB_ssim_score'], 0.86322654166666657, places=4)
        self.assertAlmostEqual(results[0]['TESTLIB_ms_ssim_score'], 0.9632498125, places=4)

        self.assertAlmostEqual(results[1]['TESTLIB_vif_scale0_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['TESTLIB_vif_scale1_score'],0.999999958333, places=4)
        self.assertAlmostEqual(results[1]['TESTLIB_vif_scale2_score'],0.999999416667, places=4)
        self.assertAlmostEqual(results[1]['TESTLIB_vif_scale3_score'], 0.999999208333, places=4)
        self.assertAlmostEqual(results[1]['TESTLIB_motion2_score'], 3.8953518541666665, places=4)
        self.assertAlmostEqual(results[1]['TESTLIB_adm2_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['TESTLIB_psnr_score'], 60.0, places=4)
        self.assertAlmostEqual(results[1]['TESTLIB_ssim_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['TESTLIB_ms_ssim_score'], 1.0, places=4)

        self.assertAlmostEqual(results[0]['TESTLIB_score'], 76.699271272486044, places=3)
        self.assertAlmostEqual(results[1]['TESTLIB_score'],99.946416604585025, places=4)
Esempio n. 19
0
    def test_read_dataset_mixed(self):
        dataset_path = VmafConfig.test_resource_path('test_dataset_mixed.py')
        dataset = import_python_file(dataset_path)
        assets = read_dataset(dataset)

        self.assertEquals(len(assets), 4)

        self.assertEqual(assets[0].resampling_type, 'bilinear')
        self.assertEqual(assets[0].ref_yuv_type, 'yuv420p')
        self.assertEqual(assets[0].dis_yuv_type, 'yuv420p')
        self.assertEqual(assets[0].ref_width_height, (1920, 1080))
        self.assertEqual(assets[0].dis_width_height, (1920, 1080))

        self.assertEqual(assets[1].resampling_type, 'bilinear')
        self.assertEqual(assets[1].ref_yuv_type, 'yuv420p')
        self.assertEqual(assets[1].dis_yuv_type, 'notyuv')
        self.assertEqual(assets[1].ref_width_height, (1920, 1080))
        self.assertEqual(assets[1].dis_width_height, None)

        self.assertEqual(assets[2].resampling_type, 'bilinear')
        self.assertEqual(assets[2].ref_yuv_type, 'yuv420p')
        self.assertEqual(assets[2].dis_yuv_type, 'yuv420p')
        self.assertEqual(assets[2].ref_width_height, (720, 480))
        self.assertEqual(assets[2].dis_width_height, (720, 480))

        self.assertEqual(assets[3].resampling_type, 'bilinear')
        self.assertEqual(assets[3].ref_yuv_type, 'yuv420p')
        self.assertEqual(assets[3].dis_yuv_type, 'notyuv')
        self.assertEqual(assets[3].ref_width_height, (720, 480))
        self.assertEqual(assets[3].dis_width_height, None)
    def test_run_strred_fextractor_blackframes(self):
        print 'test on running STRRED feature extractor on flat frames...'
        ref_path = VmafConfig.test_resource_path("yuv", "flat_1920_1080_0.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "flat_1920_1080_10.yuv")
        asset = Asset(dataset="test", content_id=0, asset_id=0,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={'width':576, 'height':324})

        asset_original = Asset(dataset="test", content_id=0, asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=ref_path,
                      asset_dict={'width':576, 'height':324})

        from vmaf.core.result_store import FileSystemResultStore
        result_store = FileSystemResultStore(logger=None)

        self.fextractor = StrredFeatureExtractor(
            [asset, asset_original],
            None, fifo_mode=True,
            result_store=result_store
        )

        print '    running for the first time with fresh calculation...'
        self.fextractor.run(parallelize=True)

        result0, result1 = self.fextractor.results
        import os
        self.assertTrue(os.path.exists(result_store._get_result_file_path(result0)))
        self.assertTrue(os.path.exists(result_store._get_result_file_path(result1)))

        print '    running for the second time with stored results...'
        self.fextractor.run(parallelize=True)
        results = self.fextractor.results

        # ignore NaN
        for result in results:
            result.set_score_aggregate_method(ListStats.nonemean)

        self.assertAlmostEqual(results[0]['STRRED_feature_srred_score'], 1220.5679849999999, places=4)
        self.assertAlmostEqual(results[0]['STRRED_feature_trred_score'], 50983.3097155, places=4)
        self.assertAlmostEqual(results[0]['STRRED_feature_strred_score'], 62228595.6081, places=4)
        self.assertAlmostEqual(results[1]['STRRED_feature_srred_score'], 0.0, places=4)
        self.assertAlmostEqual(results[1]['STRRED_feature_trred_score'], 0.0, places=4)
        self.assertAlmostEqual(results[1]['STRRED_feature_strred_score'], 0.0, places=4)
Esempio n. 21
0
    def test_feature_assembler_selected_atom_feature(self):
        print 'test on feature assembler with selected atom features...'
        ref_path = VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test", content_id=0, asset_id=0,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={'width':576, 'height':324})

        asset_original = Asset(dataset="test", content_id=0, asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=ref_path,
                      asset_dict={'width':576, 'height':324})

        self.fassembler = FeatureAssembler(
            feature_dict={'VMAF_feature':['vif', 'motion']},
            feature_option_dict=None,
            assets=[asset, asset_original],
            logger=None,
            fifo_mode=True,
            delete_workdir=True,
            result_store=None,
            optional_dict=None,
            optional_dict2=None,
            parallelize=True,
        )

        self.fassembler.run()

        results = self.fassembler.results

        self.assertAlmostEqual(results[0]['VMAF_feature_vif_score'], 0.44609306249999997, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_motion_score'], 4.0498253541666669, places=4)

        self.assertAlmostEqual(results[1]['VMAF_feature_vif_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_motion_score'], 4.0498253541666669, places=4)

        with self.assertRaises(KeyError):
            results[0]['VMAF_feature_ansnr_scores']
        with self.assertRaises(KeyError):
            results[0]['VMAF_feature_ansnr_score']
        with self.assertRaises(KeyError):
            results[0]['VMAF_feature_adm_scores']
        with self.assertRaises(KeyError):
            results[0]['VMAF_feature_adm_score']
Esempio n. 22
0
 def test_with(self):
     with YuvReader(
         filepath=VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv"),
         width=576,
         height=324,
         yuv_type='yuv420p'
     ) as yuv_reader:
         self.assertEquals(yuv_reader.file.__class__, file)
Esempio n. 23
0
 def test_kflk_metrics_performance(self):
     mat_filepath = VmafConfig.test_resource_path('data_Toyama.mat')
     mat_dict = scipy.io.loadmat(mat_filepath)
     results = KflkPerfMetric._metrics_performance(mat_dict['objScoDif'], mat_dict['signif'])
     self.assertAlmostEqual(np.mean(results['AUC_DS']), 0.69767003960902052, places=6)
     self.assertAlmostEqual(np.mean(results['AUC_BW']), 0.94454700301894534, places=6)
     self.assertAlmostEqual(np.mean(results['CC_0']), 0.88105386206276415, places=6)
     self.assertAlmostEqual(np.mean(results['THR']), 6.2392849606450556, places=6)
Esempio n. 24
0
    def test_read_dataset_crop_and_pad(self):
        train_dataset_path = VmafConfig.test_resource_path('example_dataset_crop_pad.py')
        train_dataset = import_python_file(train_dataset_path)
        train_assets = read_dataset(train_dataset)

        self.assertEquals(len(train_assets), 3)
        self.assertEquals(str(train_assets[0]), "example_0_1_src01_hrc00_576x324_576x324_vs_src01_hrc01_576x324_576x324_q_576x324_crop288:162:144:81")
        self.assertEquals(str(train_assets[1]), "example_0_2_src01_hrc00_576x324_576x324_vs_src01_hrc01_576x324_576x324_q_576x324_padiw+100:ih+100:50:50")
        self.assertEquals(str(train_assets[2]), "example_0_3_src01_hrc00_576x324_576x324_vs_src01_hrc01_576x324_576x324_q_576x324_crop288:162:144:81_padiw+288:ih+162:144:81")
Esempio n. 25
0
    def test_read_image_dataset_notyuv(self):
        dataset_path = VmafConfig.test_resource_path('test_image_dataset_notyuv.py')
        dataset = import_python_file(dataset_path)
        assets = read_dataset(dataset)

        self.assertEquals(len(assets), 4)
        self.assertTrue(assets[0].ref_width_height is None)
        self.assertTrue(assets[0].dis_width_height is None)
        self.assertEquals(assets[0].quality_width_height, (1920, 1080))
Esempio n. 26
0
    def test_explain_train_test_model(self):

        model_class = SklearnRandomForestTrainTestModel

        train_dataset_path = VmafConfig.test_resource_path('test_image_dataset_diffdim.py')
        train_dataset = import_python_file(train_dataset_path)
        train_assets = read_dataset(train_dataset)

        fextractor = MomentNorefFeatureExtractor(
            train_assets,
            None,
            fifo_mode=True,
            delete_workdir=True,
            result_store=None,
            optional_dict=None,
            optional_dict2=None,
        )
        fextractor.run(parallelize=True)
        self.features = fextractor.results

        xys = model_class.get_xys_from_results(self.features[:7])
        model = model_class({'norm_type':'normalize', 'random_state':0}, None)
        model.train(xys)

        np.random.seed(0)

        xs = model_class.get_xs_from_results(self.features[7:])
        explainer = LocalExplainer(neighbor_samples=1000)
        exps = explainer.explain(model, xs)

        self.assertAlmostEqual(exps['feature_weights'][0, 0], -0.12416, places=4)
        self.assertAlmostEqual(exps['feature_weights'][1, 0], 0.00076, places=4)
        self.assertAlmostEqual(exps['feature_weights'][0, 1], -0.20931, places=4)
        self.assertAlmostEqual(exps['feature_weights'][1, 1], -0.01245, places=4)
        self.assertAlmostEqual(exps['feature_weights'][0, 2], 0.02322, places=4)
        self.assertAlmostEqual(exps['feature_weights'][1, 2], 0.03673, places=4)

        self.assertAlmostEqual(exps['features'][0, 0], 107.73501, places=4)
        self.assertAlmostEqual(exps['features'][1, 0], 35.81638, places=4)
        self.assertAlmostEqual(exps['features'][0, 1], 13691.23881, places=4)
        self.assertAlmostEqual(exps['features'][1, 1], 1611.56764, places=4)
        self.assertAlmostEqual(exps['features'][0, 2], 2084.40542, places=4)
        self.assertAlmostEqual(exps['features'][1, 2], 328.75389, places=4)

        self.assertAlmostEqual(exps['features_normalized'][0, 0], -0.65527, places=4)
        self.assertAlmostEqual(exps['features_normalized'][1, 0], -3.74922, places=4)
        self.assertAlmostEqual(exps['features_normalized'][0, 1], -0.68872, places=4)
        self.assertAlmostEqual(exps['features_normalized'][1, 1], -2.79586, places=4)
        self.assertAlmostEqual(exps['features_normalized'][0, 2], 0.08524, places=4)
        self.assertAlmostEqual(exps['features_normalized'][1, 2], -1.32625, places=4)

        self.assertEqual(exps['feature_names'],
                         ['Moment_noref_feature_1st_score',
                          'Moment_noref_feature_2nd_score',
                          'Moment_noref_feature_var_score']
                         )
Esempio n. 27
0
 def test_yuv_reader(self):
     yuv_reader = YuvReader(
         filepath=VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv422p10le.yuv"),
         width=576,
         height=324,
         yuv_type='yuv422p10le'
     )
     self.assertEquals(yuv_reader.num_bytes, 35831808)
     self.assertEquals(yuv_reader.num_frms, 48)
     self.assertEquals(yuv_reader._get_uv_width_height_multiplier(), (0.5, 1.0))
    def test_run_vmaf_fextractor_with_cropping_and_padding_to_original_wh(self):
        # crop_cmd: 288:162:144:81 - crop to the center 288x162 image
        # pad_cmd: iw+288:ih+162:144:81 - pad back to the original size

        ref_path = VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test", content_id=0, asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={'width':576, 'height':324,
                                  'crop_cmd':'288:162:144:81',
                                  'pad_cmd': 'iw+288:ih+162:144:81',
                                  'quality_width':576, 'quality_height':324,
                                  })

        asset_original = Asset(dataset="test", content_id=0, asset_id=2,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=ref_path,
                      asset_dict={'width':576, 'height':324,
                                  'crop_cmd':'288:162:144:81',
                                  'pad_cmd': 'iw+288:ih+162:144:81',
                                  'quality_width':576, 'quality_height':324,
                                  })

        self.fextractor = VmafFeatureExtractor(
            [asset, asset_original], None, fifo_mode=True)

        self.fextractor.run(parallelize=True)

        results = self.fextractor.results

        self.assertAlmostEqual(results[0]['VMAF_feature_vif_score'], 0.64106379166666672, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_motion_score'], 0.7203213958333331, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_adm2_score'],0.94700196017089999, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_ansnr_score'], 32.78451041666667, places=4)

        self.assertAlmostEqual(results[1]['VMAF_feature_vif_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_motion_score'], 0.7203213958333331, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_adm2_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_ansnr_score'], 40.280504208333333, places=4)
Esempio n. 29
0
    def test_feature_assembler_whole_feature(self):
        print 'test on feature assembler with whole feature...'
        ref_path = VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test", content_id=0, asset_id=0,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={'width':576, 'height':324})

        asset_original = Asset(dataset="test", content_id=0, asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=ref_path,
                      asset_dict={'width':576, 'height':324})

        self.fassembler = FeatureAssembler(
            feature_dict={'VMAF_feature':'all'},
            feature_option_dict=None,
            assets=[asset, asset_original],
            logger=None,
            fifo_mode=True,
            delete_workdir=True,
            result_store=None,
            optional_dict=None,
            optional_dict2=None,
            parallelize=True,
        )

        self.fassembler.run()

        results = self.fassembler.results

        self.assertAlmostEqual(results[0]['VMAF_feature_vif_score'], 0.44609306249999997, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_motion_score'], 4.0498253541666669, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_adm2_score'], 0.93458780728708746, places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_ansnr_score'], 23.509571520833333, places=4)

        self.assertAlmostEqual(results[1]['VMAF_feature_vif_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_motion_score'], 4.0498253541666669, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_adm2_score'], 1.0, places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_ansnr_score'], 31.271439270833337, places=4)
Esempio n. 30
0
    def test_run_parallel_dis_y_fextractor(self):
        print 'test on running dis YUV raw video extractor in parallel (disabled)...'
        ref_path = VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv", "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test", content_id=0, asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={'width':576, 'height':324})

        asset_original = Asset(dataset="test", content_id=0, asset_id=2,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=ref_path,
                      asset_dict={'width':576, 'height':324})

        h5py_file = DisYUVRawVideoExtractor.open_h5py_file(self.h5py_filepath)
        optional_dict2 = {'h5py_file': h5py_file}

        fextractor = DisYUVRawVideoExtractor(
            [asset, asset_original],
            None,
            fifo_mode=True,
            delete_workdir=True,
            result_store=None,
            optional_dict={'channels': 'yu'},
            optional_dict2=optional_dict2
        )
        self.fextractors = [fextractor]
        fextractor.run(parallelize=False) # Can't run parallel: can't pickle FileID objects
        results = fextractor.results

        self.assertAlmostEqual(np.mean(results[0]['dis_y']), 61.332006579182384, places=4)
        self.assertAlmostEquals(np.mean(results[1]['dis_y']), 59.788567297525148, places=4)
        self.assertAlmostEqual(np.mean(results[0]['dis_u']), 115.23227407335962, places=4)
        self.assertAlmostEquals(np.mean(results[1]['dis_u']), 114.49701717535437, places=4)

        with self.assertRaises(KeyError):
            np.mean(results[0]['dis_v'])

        DisYUVRawVideoExtractor.close_h5py_file(h5py_file)
Esempio n. 31
0
    def setUp(self):
        train_dataset_path = VmafConfig.test_resource_path(
            "test_image_dataset_diffdim2.py")
        train_dataset = import_python_file(train_dataset_path)
        train_assets = read_dataset(train_dataset)

        self.h5py_filepath = VmafConfig.workdir_path('test.hdf5')
        self.h5py_file = DisYUVRawVideoExtractor.open_h5py_file(
            self.h5py_filepath)
        optional_dict2 = {'h5py_file': self.h5py_file}

        fextractor = DisYUVRawVideoExtractor(
            train_assets,
            None,
            fifo_mode=True,
            delete_workdir=True,
            result_store=None,
            optional_dict=None,
            optional_dict2=optional_dict2,
        )
        fextractor.run(parallelize=False
                       )  # CAN ONLY USE SERIAL MODE FOR DisYRawVideoExtractor
        self.features = fextractor.results
Esempio n. 32
0
    def test_next_y_u_v_gray(self):

        with YuvReader(filepath=VmafConfig.test_resource_path(
                "yuv", "src01_hrc00_576x324.yuv"),
                       width=576,
                       height=324,
                       yuv_type='gray') as yuv_reader:

            y, u, v = yuv_reader.next()
            y = y.astype(np.double)

            self.assertEqual(y[0][0], 87)
            self.assertTrue(u is None)
            self.assertTrue(v is None)

            self.assertAlmostEqual(y.mean(), 61.928749785665296, places=4)

            y, u, v = yuv_reader.next()
            y = y.astype(np.double)

            self.assertEqual(y[0][0], 92)
            self.assertTrue(u is None)
            self.assertTrue(v is None)
Esempio n. 33
0
    def test_iteration(self):

        y_1stmoments = []
        y_2ndmoments = []

        with YuvReader(filepath=VmafConfig.test_resource_path(
                "yuv", "src01_hrc01_576x324.yuv"),
                       width=576,
                       height=324,
                       yuv_type='yuv420p') as yuv_reader:

            for y, u, v in yuv_reader:
                y_1stmoments.append(y.mean())
                y_2ndmoments.append(y.var() + y.mean() * y.mean())

        self.assertEqual(len(y_1stmoments), 48)
        self.assertEqual(len(y_2ndmoments), 48)
        self.assertAlmostEqual(np.mean(y_1stmoments),
                               61.332006624999984,
                               places=4)
        self.assertAlmostEqual(np.mean(y_2ndmoments),
                               4798.659574041666,
                               places=4)
Esempio n. 34
0
    def test_test_on_dataset_mle(self):
        from vmaf.routine import run_test_on_dataset
        test_dataset = import_python_file(
            VmafConfig.test_resource_path('raw_dataset_sample.py'))
        test_assets, results = run_test_on_dataset(test_dataset,
                                                   VmafQualityRunner,
                                                   None,
                                                   None,
                                                   None,
                                                   parallelize=True,
                                                   aggregate_method=None,
                                                   subj_model_class=MosModel)

        self.assertAlmostEqual(results[0]['VMAF_score'],
                               99.142659046424384,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_score'],
                               35.066157497128764,
                               places=4)
        self.assertAlmostEqual(results[2]['VMAF_score'],
                               97.428042675471147,
                               places=4)
        self.assertAlmostEqual(results[3]['VMAF_score'],
                               97.427927701008869,
                               places=4)
        self.assertAlmostEqual(test_assets[0].groundtruth, 100, places=4)
        self.assertAlmostEqual(test_assets[1].groundtruth, 50, places=4)
        self.assertAlmostEqual(test_assets[2].groundtruth, 90, places=4)
        self.assertAlmostEqual(test_assets[3].groundtruth, 80, places=4)
        self.assertAlmostEqual(test_assets[0].groundtruth_std, 0.0, places=4)
        self.assertAlmostEqual(test_assets[1].groundtruth_std,
                               3.5355339059327373,
                               places=4)
        self.assertAlmostEqual(test_assets[2].groundtruth_std, 0.0, places=4)
        self.assertAlmostEqual(test_assets[3].groundtruth_std,
                               3.5355339059327373,
                               places=4)
Esempio n. 35
0
    def test_test_on_dataset_plot_per_content(self):
        from vmaf.routine import run_test_on_dataset
        test_dataset = import_python_file(
            VmafConfig.test_resource_path('dataset_sample.py'))
        import matplotlib.pyplot as plt
        fig, ax = plt.subplots(1, 1, figsize=[20, 20])
        run_test_on_dataset(test_dataset, VmafQualityRunner, ax,
                            None, VmafConfig.model_path("vmaf_float_v0.6.1.json"),
                            parallelize=False,
                            fifo_mode=False,
                            aggregate_method=None,
                            point_label='asset_id',
                            do_plot=['aggregate',  # plots all contents in one figure
                                     'per_content'  # plots a separate figure per content
                                     ],
                            plot_linear_fit=True  # adds linear fit line to each plot
                            )

        output_dir = VmafConfig.workspace_path("output", "test_output")
        DisplayConfig.show(write_to_dir=output_dir)
        self.assertEqual(len(glob.glob(os.path.join(output_dir, '*.png'))), 3)

        if os.path.exists(output_dir):
            shutil.rmtree(output_dir)
Esempio n. 36
0
    def test_run_vmafossexec_runner_with_ci_and_custom_model(self):
        print 'test on running VMAFOSSEXEC runner with conf interval and custom model...'
        ref_path, dis_path, asset, asset_original = set_default_576_324_videos_for_testing()

        self.runner = VmafossExecQualityRunner(
            [asset, asset_original],
            None, fifo_mode=True,
            delete_workdir=True,
            result_store=None,
            optional_dict={
                'model_filepath': VmafConfig.test_resource_path('model', 'vmafplus_v0.5.2boot_test.pkl'),
                'ci': True
            },
        )
        self.runner.run()

        results = self.runner.results

        self.assertAlmostEqual(results[0]['VMAFOSSEXEC_score'], 75.443043750000001, places=3)
        self.assertAlmostEqual(results[1]['VMAFOSSEXEC_score'], 99.958047916666672, places=4)
        self.assertAlmostEqual(results[0]['VMAFOSSEXEC_bagging_score'], 75.13012623785923, places=3)
        self.assertAlmostEqual(results[1]['VMAFOSSEXEC_bagging_score'], 99.96504855577571, places=4)
        self.assertAlmostEqual(results[0]['VMAFOSSEXEC_stddev_score'], 0.6812993325967104, places=3)
        self.assertAlmostEqual(results[1]['VMAFOSSEXEC_stddev_score'], 0.03947607207290399, places=4)
Esempio n. 37
0
    def test_read_dataset_crop_and_pad(self):
        train_dataset_path = VmafConfig.test_resource_path(
            'example_dataset_crop_pad.py')
        train_dataset = import_python_file(train_dataset_path)
        train_assets = read_dataset(train_dataset)

        train_assets[0].asset_dict['ref_crop_cmd'] = '288:162:144:81'
        train_assets[1].asset_dict['ref_pad_cmd'] = 'iw+100:ih+100:50:50'
        train_assets[2].asset_dict['ref_crop_cmd'] = '288:162:144:81'
        train_assets[2].asset_dict['ref_pad_cmd'] = 'iw+288:ih+162:144:81'

        self.assertEqual(len(train_assets), 3)
        self.assertEqual(
            str(train_assets[0]),
            "example_0_1_src01_hrc00_576x324_576x324_crop288:162:144:81_vs_src01_hrc01_576x324_576x324_crop288:162:144:81_q_576x324"
        )
        self.assertEqual(
            str(train_assets[1]),
            "example_0_2_src01_hrc00_576x324_576x324_padiw+100:ih+100:50:50_vs_src01_hrc01_576x324_576x324_padiw+100:ih+100:50:50_q_576x324"
        )
        self.assertEqual(
            str(train_assets[2]),
            "example_0_3_src01_hrc00_576x324_576x324_crop288:162:144:81_padiw+288:ih+162:144:81_vs_src01_hrc01_576x324_576x324_crop288:162:144:81_padiw+288:ih+162:144:81_q_576x324"
        )
    def test_run_vmaf_fextractor_with_resampling(self):
        ref_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test",
                      content_id=0,
                      asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={
                          'width': 576,
                          'height': 324,
                          'quality_width': 160,
                          'quality_height': 90
                      })

        asset_original = Asset(dataset="test",
                               content_id=0,
                               asset_id=2,
                               workdir_root=VmafConfig.workdir_path(),
                               ref_path=ref_path,
                               dis_path=ref_path,
                               asset_dict={
                                   'width': 576,
                                   'height': 324,
                                   'quality_width': 160,
                                   'quality_height': 90
                               })

        self.fextractor = VmafFeatureExtractor([asset, asset_original],
                                               None,
                                               fifo_mode=False)

        self.fextractor.run(parallelize=False)

        results = self.fextractor.results

        self.assertAlmostEqual(results[0]['VMAF_feature_vif_score'],
                               0.74165043750000004,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_motion_score'],
                               1.4066421666666666,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_adm_score'],
                               0.9808006041666667,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_ansnr_score'],
                               27.319241250000001,
                               places=4)

        self.assertAlmostEqual(results[1]['VMAF_feature_vif_score'],
                               1.0,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_motion_score'],
                               1.4066421666666666,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_adm_score'],
                               1.0,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_ansnr_score'],
                               30.682829895833333,
                               places=4)
Esempio n. 39
0
    def test_flat_value10(self):

        LOCAL_LOG_FILENAME = self.LOG_FILENAME + '_flat_value10'
        ref_yuv = VmafConfig.test_resource_path("yuv", "flat_1920_1080_0.yuv")
        dis_yuv = VmafConfig.test_resource_path("yuv", "flat_1920_1080_10.yuv")
        yuv_fmt = "yuv420p"
        yuv_width = 1920
        yuv_height = 1080
        cmd = self.CMD_TEMPLATE.format(vmaf=required(
            ExternalProgram.vmaf_feature),
                                       fmt=yuv_fmt,
                                       ref=ref_yuv,
                                       dis=dis_yuv,
                                       w=yuv_width,
                                       h=yuv_height,
                                       log=LOCAL_LOG_FILENAME)
        run_process(cmd, shell=True)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "adm")[0],
                               1.0,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "ansnr")[0],
                               21.899511,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "motion")[0],
                               0.0,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "motion2")[0],
                               0.0,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "vif")[0],
                               1.0,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "adm_num")[0],
                               149.780313,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "adm_den")[0],
                               149.780392,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "vif_num")[0],
                               2753999.99219,
                               places=1)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "vif_den")[0],
                               2754000.0,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "anpsnr")[0],
                               29.045954,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "vif_num_scale0")[0],
                               2073600.0,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "vif_den_scale0")[0],
                               2073600.0,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "vif_num_scale3")[0],
                               32400.0,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "vif_den_scale3")[0],
                               32400.0,
                               places=4)

        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "adm_num_scale0")[0],
                               65.573967,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "adm_den_scale0")[0],
                               65.573967,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "adm_num_scale3")[0],
                               16.667711,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "adm_den_scale3")[0],
                               16.667747,
                               places=3)
Esempio n. 40
0
    def test_checkerboard_opposite(self):

        LOCAL_LOG_FILENAME = self.LOG_FILENAME + '_checkerboard_opposite'
        ref_yuv = VmafConfig.test_resource_path(
            "yuv", "checkerboard_1920_1080_10_3_0_0.yuv")
        dis_yuv = VmafConfig.test_resource_path(
            "yuv", "checkerboard_1920_1080_10_3_10_0.yuv")
        yuv_fmt = "yuv420p"
        yuv_width = 1920
        yuv_height = 1080
        cmd = self.CMD_TEMPLATE.format(vmaf=required(
            ExternalProgram.vmaf_feature),
                                       fmt=yuv_fmt,
                                       ref=ref_yuv,
                                       dis=dis_yuv,
                                       w=yuv_width,
                                       h=yuv_height,
                                       log=LOCAL_LOG_FILENAME)
        run_process(cmd, shell=True)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "adm")[0],
                               0.053996333333333334,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "ansnr")[0],
                               -5.758091333333334,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "motion")[0],
                               12.554836666666667,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "motion2")[0],
                               12.554836666666667,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "vif")[0],
                               0.0,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "adm_num")[0],
                               149.780313,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "adm_den")[0],
                               2773.891225,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "vif_num")[0],
                               6.66666666667,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "vif_den")[0],
                               33021387.0625,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "anpsnr")[0],
                               2.984752,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "vif_num_scale0")[0],
                               6.66666666667,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "vif_den_scale0")[0],
                               25757473.3333,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "vif_num_scale3")[0],
                               0.0,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "vif_den_scale3")[0],
                               259774.9375,
                               places=3)

        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "adm_num_scale0")[0],
                               65.573967,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "adm_den_scale0")[0],
                               277.120382,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "adm_num_scale3")[0],
                               16.667711,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "adm_den_scale3")[0],
                               924.193766,
                               places=3)
Esempio n. 41
0
dataset_name = 'example_image'

yuv_fmt = 'notyuv'
quality_width = 1920
quality_height = 1080

from vmaf.config import VmafConfig

ref_videos = [
    {'content_id': 0, 'path': VmafConfig.test_resource_path('icpf', 'frame00000001.icpf')},

    {'content_id': 1, 'path': VmafConfig.test_resource_path('icpf', 'frame00000002.icpf')},
]

dis_videos = [
    {'content_id': 0, 'asset_id': 0, 'dmos': 100, 'path': VmafConfig.test_resource_path('icpf', 'frame00000000.icpf')}, # ref
    {'content_id': 0, 'asset_id': 1, 'dmos': 50,  'path': VmafConfig.test_resource_path('icpf', 'frame00000001.icpf')},

    {'content_id': 1, 'asset_id': 2, 'dmos': 100,  'path': VmafConfig.test_resource_path('icpf', 'frame00000002.icpf')}, # ref
    {'content_id': 1, 'asset_id': 3, 'dmos': 80,  'path': VmafConfig.test_resource_path('icpf', 'frame00000003.icpf')},
]


Esempio n. 42
0
    def test_feature_assembler_selected_atom_feature(self):
        print 'test on feature assembler with selected atom features...'
        ref_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test",
                      content_id=0,
                      asset_id=0,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={
                          'width': 576,
                          'height': 324
                      })

        asset_original = Asset(dataset="test",
                               content_id=0,
                               asset_id=1,
                               workdir_root=VmafConfig.workdir_path(),
                               ref_path=ref_path,
                               dis_path=ref_path,
                               asset_dict={
                                   'width': 576,
                                   'height': 324
                               })

        self.fassembler = FeatureAssembler(
            feature_dict={'VMAF_feature': ['vif', 'motion']},
            feature_option_dict=None,
            assets=[asset, asset_original],
            logger=None,
            fifo_mode=True,
            delete_workdir=True,
            result_store=None,
            optional_dict=None,
            optional_dict2=None,
            parallelize=True,
        )

        self.fassembler.run()

        results = self.fassembler.results

        self.assertAlmostEqual(results[0]['VMAF_feature_vif_score'],
                               0.44609306249999997,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_motion_score'],
                               4.0498253541666669,
                               places=4)

        self.assertAlmostEqual(results[1]['VMAF_feature_vif_score'],
                               1.0,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_motion_score'],
                               4.0498253541666669,
                               places=4)

        with self.assertRaises(KeyError):
            results[0]['VMAF_feature_ansnr_scores']
        with self.assertRaises(KeyError):
            results[0]['VMAF_feature_ansnr_score']
        with self.assertRaises(KeyError):
            results[0]['VMAF_feature_adm_scores']
        with self.assertRaises(KeyError):
            results[0]['VMAF_feature_adm_score']
Esempio n. 43
0
    def test_explain_train_test_model(self):

        model_class = SklearnRandomForestTrainTestModel

        train_dataset_path = VmafConfig.test_resource_path(
            'test_image_dataset_diffdim2.py')
        train_dataset = import_python_file(train_dataset_path)
        train_assets = read_dataset(train_dataset)

        fextractor = MomentNorefFeatureExtractor(
            train_assets,
            None,
            fifo_mode=True,
            delete_workdir=True,
            result_store=None,
            optional_dict=None,
            optional_dict2=None,
        )
        fextractor.run(parallelize=True)
        self.features = fextractor.results

        xys = model_class.get_xys_from_results(self.features[:7])
        model = model_class(
            {
                'norm_type': 'normalize',
                'n_estimators': 10,
                'random_state': 0
            }, None)
        model.train(xys)

        np.random.seed(0)

        xs = model_class.get_xs_from_results(self.features[7:])
        explainer = LocalExplainer(neighbor_samples=1000)
        exps = explainer.explain(model, xs)

        self.assertAlmostEqual(exps['feature_weights'][0, 0],
                               -0.12416,
                               places=4)
        self.assertAlmostEqual(exps['feature_weights'][1, 0],
                               0.00076,
                               places=4)
        self.assertAlmostEqual(exps['feature_weights'][0, 1],
                               -0.20931,
                               places=4)
        self.assertAlmostEqual(exps['feature_weights'][1, 1],
                               -0.01245,
                               places=4)
        self.assertAlmostEqual(exps['feature_weights'][0, 2],
                               0.02322,
                               places=4)
        self.assertAlmostEqual(exps['feature_weights'][1, 2],
                               0.03673,
                               places=4)

        self.assertAlmostEqual(exps['features'][0, 0], 107.73501, places=4)
        self.assertAlmostEqual(exps['features'][1, 0], 35.81638, places=4)
        self.assertAlmostEqual(exps['features'][0, 1], 13691.23881, places=4)
        self.assertAlmostEqual(exps['features'][1, 1], 1611.56764, places=4)
        self.assertAlmostEqual(exps['features'][0, 2], 2084.40542, places=4)
        self.assertAlmostEqual(exps['features'][1, 2], 328.75389, places=4)

        self.assertAlmostEqual(exps['features_normalized'][0, 0],
                               -0.65527,
                               places=4)
        self.assertAlmostEqual(exps['features_normalized'][1, 0],
                               -3.74922,
                               places=4)
        self.assertAlmostEqual(exps['features_normalized'][0, 1],
                               -0.68872,
                               places=4)
        self.assertAlmostEqual(exps['features_normalized'][1, 1],
                               -2.79586,
                               places=4)
        self.assertAlmostEqual(exps['features_normalized'][0, 2],
                               0.08524,
                               places=4)
        self.assertAlmostEqual(exps['features_normalized'][1, 2],
                               -1.32625,
                               places=4)

        self.assertEqual(exps['feature_names'], [
            'Moment_noref_feature_1st_score', 'Moment_noref_feature_2nd_score',
            'Moment_noref_feature_var_score'
        ])
Esempio n. 44
0
 def setUp(self) -> None:
     for i in range(4):
         VmafConfig.test_resource_path('tiff', 'src01_hrc00_576x324%05d.tiff' % (i+1))
         VmafConfig.test_resource_path('tiff', 'src01_hrc01_576x324%05d.tiff' % (i+1))
Esempio n. 45
0
 def setUp(self):
     self.dataset_filename = VmafConfig.test_resource_path('example_dataset.py')
     self.raw_dataset_filename = VmafConfig.test_resource_path('example_raw_dataset.py')
     self.out_model_filepath = VmafConfig.workdir_path('tmp.json')
     self.param_filename = VmafConfig.test_resource_path('vmaf_v4.py')
     self.batch_filename = VmafConfig.workdir_path('test_batch_input')
Esempio n. 46
0
    def test_run_vmaf_fextractor_with_cropping_and_padding_to_original_wh(
            self):
        # crop_cmd: 288:162:144:81 - crop to the center 288x162 image
        # pad_cmd: iw+288:ih+162:144:81 - pad back to the original size

        ref_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test",
                      content_id=0,
                      asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={
                          'width': 576,
                          'height': 324,
                          'crop_cmd': '288:162:144:81',
                          'pad_cmd': 'iw+288:ih+162:144:81',
                          'quality_width': 576,
                          'quality_height': 324,
                      })

        asset_original = Asset(dataset="test",
                               content_id=0,
                               asset_id=2,
                               workdir_root=VmafConfig.workdir_path(),
                               ref_path=ref_path,
                               dis_path=ref_path,
                               asset_dict={
                                   'width': 576,
                                   'height': 324,
                                   'crop_cmd': '288:162:144:81',
                                   'pad_cmd': 'iw+288:ih+162:144:81',
                                   'quality_width': 576,
                                   'quality_height': 324,
                               })

        self.fextractor = VmafFeatureExtractor([asset, asset_original],
                                               None,
                                               fifo_mode=True)

        self.fextractor.run(parallelize=True)

        results = self.fextractor.results

        self.assertAlmostEqual(results[0]['VMAF_feature_vif_score'],
                               0.64106379166666672,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_motion_score'],
                               0.7203213958333331,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_adm2_score'],
                               0.94700196017089999,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_ansnr_score'],
                               32.78451041666667,
                               places=4)

        self.assertAlmostEqual(results[1]['VMAF_feature_vif_score'],
                               1.0,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_motion_score'],
                               0.7203213958333331,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_adm2_score'],
                               1.0,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_ansnr_score'],
                               40.280504208333333,
                               places=4)
Esempio n. 47
0
    def test_run_strred_fextractor_blackframes(self):
        print 'test on running STRRED feature extractor on flat frames...'
        ref_path = VmafConfig.test_resource_path("yuv", "flat_1920_1080_0.yuv")
        dis_path = VmafConfig.test_resource_path("yuv",
                                                 "flat_1920_1080_10.yuv")
        asset = Asset(dataset="test",
                      content_id=0,
                      asset_id=0,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={
                          'width': 576,
                          'height': 324
                      })

        asset_original = Asset(dataset="test",
                               content_id=0,
                               asset_id=1,
                               workdir_root=VmafConfig.workdir_path(),
                               ref_path=ref_path,
                               dis_path=ref_path,
                               asset_dict={
                                   'width': 576,
                                   'height': 324
                               })

        from vmaf.core.result_store import FileSystemResultStore
        result_store = FileSystemResultStore(logger=None)

        self.fextractor = StrredFeatureExtractor([asset, asset_original],
                                                 None,
                                                 fifo_mode=True,
                                                 result_store=result_store)

        print '    running for the first time with fresh calculation...'
        self.fextractor.run(parallelize=True)

        result0, result1 = self.fextractor.results
        import os
        self.assertTrue(
            os.path.exists(result_store._get_result_file_path(result0)))
        self.assertTrue(
            os.path.exists(result_store._get_result_file_path(result1)))

        print '    running for the second time with stored results...'
        self.fextractor.run(parallelize=True)
        results = self.fextractor.results

        # ignore NaN
        for result in results:
            result.set_score_aggregate_method(ListStats.nonemean)

        self.assertAlmostEqual(results[0]['STRRED_feature_srred_score'],
                               1220.5679849999999,
                               places=4)
        self.assertAlmostEqual(results[0]['STRRED_feature_trred_score'],
                               50983.3097155,
                               places=4)
        self.assertAlmostEqual(results[0]['STRRED_feature_strred_score'],
                               62228595.6081,
                               places=4)
        self.assertAlmostEqual(results[1]['STRRED_feature_srred_score'],
                               0.0,
                               places=4)
        self.assertAlmostEqual(results[1]['STRRED_feature_trred_score'],
                               0.0,
                               places=4)
        self.assertAlmostEqual(results[1]['STRRED_feature_strred_score'],
                               0.0,
                               places=4)
Esempio n. 48
0
    def test_run_vmaf_fextractor_with_resampling(self):
        ref_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test",
                      content_id=0,
                      asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={
                          'width': 576,
                          'height': 324,
                          'quality_width': 160,
                          'quality_height': 90
                      })

        asset_original = Asset(dataset="test",
                               content_id=0,
                               asset_id=2,
                               workdir_root=VmafConfig.workdir_path(),
                               ref_path=ref_path,
                               dis_path=ref_path,
                               asset_dict={
                                   'width': 576,
                                   'height': 324,
                                   'quality_width': 160,
                                   'quality_height': 90
                               })

        self.fextractor = VmafFeatureExtractor([asset, asset_original],
                                               None,
                                               fifo_mode=False)

        self.fextractor.run(parallelize=False)

        results = self.fextractor.results

        self.assertAlmostEqual(results[0]['VMAF_feature_vif_score'],
                               0.782546520833,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_motion_score'],
                               1.3216766875,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_adm_score'],
                               0.98229347916666665,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_ansnr_score'],
                               28.0085990417,
                               places=4)

        self.assertAlmostEqual(results[1]['VMAF_feature_vif_score'],
                               1.0,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_motion_score'],
                               1.3216766875,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_adm_score'],
                               1.0,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_ansnr_score'],
                               31.811350125,
                               places=4)
Esempio n. 49
0
    def test_run_vmaf_fextractor_with_padding(self):
        # pad_cmd: iw+100:ih+100:50:50 - pad to (iw+100)x(ih+100), where iw is
        # input width, ih is input height, and starting point is (-50, -50)

        ref_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test",
                      content_id=0,
                      asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={
                          'width': 576,
                          'height': 324,
                          'pad_cmd': 'iw+100:ih+100:50:50',
                          'quality_width': 676,
                          'quality_height': 424,
                      })

        asset_original = Asset(dataset="test",
                               content_id=0,
                               asset_id=2,
                               workdir_root=VmafConfig.workdir_path(),
                               ref_path=ref_path,
                               dis_path=ref_path,
                               asset_dict={
                                   'width': 576,
                                   'height': 324,
                                   'pad_cmd': 'iw+100:ih+100:50:50',
                                   'quality_width': 676,
                                   'quality_height': 424,
                               })

        self.fextractor = VmafFeatureExtractor([asset, asset_original],
                                               None,
                                               fifo_mode=True)

        self.fextractor.run(parallelize=False)

        results = self.fextractor.results

        self.assertAlmostEqual(results[0]['VMAF_feature_vif_score'],
                               0.51023564583333325,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_motion_score'],
                               2.6397702083333332,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_adm2_score'],
                               0.94112949409549829,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_ansnr_score'],
                               26.893242291666667,
                               places=4)

        self.assertAlmostEqual(results[1]['VMAF_feature_vif_score'],
                               1.0,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_motion_score'],
                               2.6397702083333332,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_adm2_score'],
                               1.0,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_ansnr_score'],
                               34.306043416666668,
                               places=4)
Esempio n. 50
0
    def test_read_dataset_fps_bad_rebuf_indices(self):
        train_dataset_path = VmafConfig.test_resource_path('test_dataset_fps_bad_rebufinds.py')
        train_dataset = import_python_file(train_dataset_path)

        with self.assertRaises(AssertionError):
            train_assets = read_dataset(train_dataset)
Esempio n. 51
0
from vmaf.config import VmafConfig

dataset_name = 'test_image'
yuv_fmt = 'yuv444p'

dataset_dir = VmafConfig.test_resource_path('test_image_yuv')

ref_videos = [
    {
        'content_id': 0,
        'content_name': '100007',
        'height': 321,
        'path': dataset_dir + '/100007.yuv',
        'width': 481
    },
    {
        'content_id': 1,
        'content_name': '100039',
        'height': 321,
        'path': dataset_dir + '/100039.yuv',
        'width': 481
    },
    {
        'content_id': 2,
        'content_name': '100075',
        'height': 321,
        'path': dataset_dir + '/100075.yuv',
        'width': 481
    },
    {
        'content_id': 4,
Esempio n. 52
0
    def test_run_vmaf_fextractor_with_gaussian_blurring(self):

        ref_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test",
                      content_id=0,
                      asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={
                          'width': 576,
                          'height': 324,
                          'crop_cmd': '288:162:144:81',
                          'dis_gblur_cmd': 'sigma=0.01:steps=1',
                          'quality_width': 288,
                          'quality_height': 162,
                      })

        asset_original = Asset(dataset="test",
                               content_id=0,
                               asset_id=2,
                               workdir_root=VmafConfig.workdir_path(),
                               ref_path=ref_path,
                               dis_path=ref_path,
                               asset_dict={
                                   'width': 576,
                                   'height': 324,
                                   'crop_cmd': '288:162:144:81',
                                   'dis_gblur_cmd': 'sigma=0.01:steps=2',
                                   'quality_width': 288,
                                   'quality_height': 162,
                               })

        self.fextractor = VmafFeatureExtractor([asset, asset_original],
                                               None,
                                               fifo_mode=True)

        self.fextractor.run(parallelize=True)

        results = self.fextractor.results

        self.assertAlmostEqual(results[0]['VMAF_feature_vif_score'],
                               0.45136466666666664,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_motion_score'],
                               2.8779373333333331,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_adm2_score'],
                               0.9362876630569382,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_ansnr_score'],
                               24.110899416666665,
                               places=4)

        self.assertAlmostEqual(results[1]['VMAF_feature_vif_score'],
                               0.9789283541666666,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_motion_score'],
                               2.8779373333333331,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_adm2_score'],
                               0.9958889086049826,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_ansnr_score'],
                               31.128021979166665,
                               places=4)
Esempio n. 53
0
    def test_load_result_with_none(self):

        result = FileSystemResultStore.load_result(VmafConfig.test_resource_path('result_with_none.txt'))
        result.set_score_aggregate_method(ListStats.nonemean)
        self.assertAlmostEqual(result['STRRED_feature_srred_score'], 5829.2644469999996, places=4)
Esempio n. 54
0
class FeatureTest(unittest.TestCase):

    LOG_FILENAME = VmafConfig.workdir_path("logFeatureTest")
    REF_YUV = VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv")
    DIS_YUV = VmafConfig.test_resource_path("yuv", "src01_hrc01_576x324.yuv")
    YUV_FMT = "yuv420p"
    YUV_WIDTH = 576
    YUV_HEIGHT = 324

    def setUp(self):
        if os.path.exists(self.LOG_FILENAME):
            os.remove(self.LOG_FILENAME)

    def tearDown(self):
        if os.path.exists(self.LOG_FILENAME):
            os.remove(self.LOG_FILENAME)

        if REMOVE_LOG:
            (logPath, logFilePrefix) = os.path.split(self.LOG_FILENAME)
            filenames = [
                filename for filename in os.listdir(logPath)
                if filename.startswith(logFilePrefix)
            ]
            for filename in filenames:
                os.remove(os.path.join(logPath, filename))

    def test_adm(self):
        ADM_LOG = self.LOG_FILENAME + '_adm'

        cmd = "{vmaf} adm {fmt} {ref} {dis} {w} {h} > {log}".format(
            vmaf=required(ExternalProgram.vmaf_feature),
            fmt=self.YUV_FMT,
            ref=self.REF_YUV,
            dis=self.DIS_YUV,
            w=self.YUV_WIDTH,
            h=self.YUV_HEIGHT,
            log=ADM_LOG)
        run_process(cmd, shell=True)
        score, scores = read_log(ADM_LOG, "adm")
        self.assertAlmostEqual(score, 0.9345877708333336, places=4)
        score, scores = read_log(ADM_LOG, "adm_num")
        self.assertAlmostEqual(score, 371.8354140624999, places=4)
        score, scores = read_log(ADM_LOG, "adm_den")
        self.assertAlmostEqual(score, 397.8337897291667, places=4)
        score, scores = read_log(ADM_LOG, "adm_num_scale0")
        self.assertAlmostEqual(score, 45.5277493125, places=4)

        score, scores = read_log(ADM_LOG, "adm_den_scale0")
        self.assertAlmostEqual(score, 50.143851375000004, places=4)
        score, scores = read_log(ADM_LOG, "adm_num_scale1")
        self.assertAlmostEqual(score, 66.58064533333334, places=4)
        score, scores = read_log(ADM_LOG, "adm_den_scale1")
        self.assertAlmostEqual(score, 74.47438285416666, places=4)
        score, scores = read_log(ADM_LOG, "adm_num_scale2")
        self.assertAlmostEqual(score, 105.56477879166668, places=4)
        score, scores = read_log(ADM_LOG, "adm_den_scale2")
        self.assertAlmostEqual(score, 113.49725852083333, places=4)
        score, scores = read_log(ADM_LOG, "adm_num_scale3")
        self.assertAlmostEqual(score, 154.16224066666666, places=4)
        score, scores = read_log(ADM_LOG, "adm_den_scale3")
        self.assertAlmostEqual(score, 159.71829710416668, places=4)

    def test_ansnr(self):
        ANSNR_LOG = self.LOG_FILENAME + '_ansnr'

        cmd = "{vmaf} ansnr {fmt} {ref} {dis} {w} {h} > {log}".format(
            vmaf=required(ExternalProgram.vmaf_feature),
            fmt=self.YUV_FMT,
            ref=self.REF_YUV,
            dis=self.DIS_YUV,
            w=self.YUV_WIDTH,
            h=self.YUV_HEIGHT,
            log=ANSNR_LOG)
        run_process(cmd, shell=True)
        score, scores = read_log(ANSNR_LOG, "ansnr")
        self.assertAlmostEqual(score, 23.5095715208, places=4)
        score, scores = read_log(ANSNR_LOG, "anpsnr")
        self.assertAlmostEqual(score, 34.164776875, places=4)

    def test_motion(self):
        MOTION_LOG = self.LOG_FILENAME + '_motion'

        cmd = "{vmaf} motion {fmt} {ref} {dis} {w} {h} > {log}".format(
            vmaf=required(ExternalProgram.vmaf_feature),
            fmt=self.YUV_FMT,
            ref=self.REF_YUV,
            dis=self.DIS_YUV,
            w=self.YUV_WIDTH,
            h=self.YUV_HEIGHT,
            log=MOTION_LOG)
        run_process(cmd, shell=True)
        score, scores = read_log(MOTION_LOG, "motion")
        self.assertAlmostEqual(score, 4.04982535417, places=4)

    def test_motion2(self):
        MOTION_LOG = self.LOG_FILENAME + '_motion2'

        cmd = "{vmaf} motion {fmt} {ref} {dis} {w} {h} > {log}".format(
            vmaf=required(ExternalProgram.vmaf_feature),
            fmt=self.YUV_FMT,
            ref=self.REF_YUV,
            dis=self.DIS_YUV,
            w=self.YUV_WIDTH,
            h=self.YUV_HEIGHT,
            log=MOTION_LOG)
        run_process(cmd, shell=True)
        score, scores = read_log(MOTION_LOG, "motion2")
        self.assertAlmostEqual(score, 3.8953518541666665, places=4)

    def test_vif(self):
        VIF_LOG = self.LOG_FILENAME + '_vif'

        cmd = "{vmaf} vif {fmt} {ref} {dis} {w} {h} > {log}".format(
            vmaf=required(ExternalProgram.vmaf_feature),
            fmt=self.YUV_FMT,
            ref=self.REF_YUV,
            dis=self.DIS_YUV,
            w=self.YUV_WIDTH,
            h=self.YUV_HEIGHT,
            log=VIF_LOG)
        run_process(cmd, shell=True)
        score, scores = read_log(VIF_LOG, "vif")
        self.assertAlmostEqual(score, 0.4460930625000001, places=4)
        self.assertAlmostEqual(scores[0], 0.580304, places=4)
        self.assertAlmostEqual(scores[1], 0.492477, places=4)
        score, scores = read_log(VIF_LOG, "vif_num")
        self.assertAlmostEqual(score, 712650.023478, places=0)
        score, scores = read_log(VIF_LOG, "vif_den")
        self.assertAlmostEqual(score, 1597314.95249, places=0)
        score, scores = read_log(VIF_LOG, "vif_num_scale0")
        self.assertAlmostEqual(score, 468101.509766, places=0)
        score, scores = read_log(VIF_LOG, "vif_num_scale1")
        self.assertAlmostEqual(score, 184971.572266, places=1)
        score, scores = read_log(VIF_LOG, "vif_num_scale2")
        self.assertAlmostEqual(score, 47588.8323567, places=0)
        score, scores = read_log(VIF_LOG, "vif_num_scale3")
        self.assertAlmostEqual(score, 11988.1090902, places=1)
        score, scores = read_log(VIF_LOG, "vif_den_scale0")
        self.assertAlmostEqual(score, 1287822.80208, places=0)
        score, scores = read_log(VIF_LOG, "vif_den_scale1")
        self.assertAlmostEqual(score, 241255.067708, places=1)
        score, scores = read_log(VIF_LOG, "vif_den_scale2")
        self.assertAlmostEqual(score, 55149.8169759, places=2)
        score, scores = read_log(VIF_LOG, "vif_den_scale3")
        self.assertAlmostEqual(score, 13087.2657267, places=2)

    def test_all(self):
        ALL_LOG = self.LOG_FILENAME + "_all"

        cmd = "{vmaf} all {fmt} {ref} {dis} {w} {h} > {log}".format(
            vmaf=required(ExternalProgram.vmaf_feature),
            fmt=self.YUV_FMT,
            ref=self.REF_YUV,
            dis=self.DIS_YUV,
            w=self.YUV_WIDTH,
            h=self.YUV_HEIGHT,
            log=ALL_LOG)
        run_process(cmd, shell=True)
        score, scores = read_log(ALL_LOG, "vif")
        self.assertAlmostEqual(score, 0.4460930625, places=4)
        score, scores = read_log(ALL_LOG, "motion")
        self.assertAlmostEqual(score, 4.04982535417, places=4)
        score, scores = read_log(ALL_LOG, "motion2")
        self.assertAlmostEqual(score, 3.8953518541666665, places=4)
        score, scores = read_log(ALL_LOG, "ansnr")
        self.assertAlmostEqual(score, 23.509571520833337, places=4)
        score, scores = read_log(ALL_LOG, "adm")
        self.assertAlmostEqual(score, 0.9345877708333336, places=4)
        score, scores = read_log(ALL_LOG, "adm_num")
        self.assertAlmostEqual(score, 371.8354140624999, places=4)
        score, scores = read_log(ALL_LOG, "adm_den")
        self.assertAlmostEqual(score, 397.8337897291667, places=4)
        score, scores = read_log(ALL_LOG, "vif_num")
        self.assertAlmostEqual(score, 712650.023478, places=0)
        score, scores = read_log(ALL_LOG, "vif_den")
        self.assertAlmostEqual(score, 1597314.95249, places=0)
        score, scores = read_log(ALL_LOG, "anpsnr")
        self.assertAlmostEqual(score, 34.164776874999994, places=4)
        score, scores = read_log(ALL_LOG, "vif_num_scale0")
        self.assertAlmostEqual(score, 468101.509766, places=0)
        score, scores = read_log(ALL_LOG, "vif_num_scale1")
        self.assertAlmostEqual(score, 184971.572266, places=1)
        score, scores = read_log(ALL_LOG, "vif_num_scale2")
        self.assertAlmostEqual(score, 47588.8323567, places=0)
        score, scores = read_log(ALL_LOG, "vif_num_scale3")
        self.assertAlmostEqual(score, 11988.1090902, places=1)
        score, scores = read_log(ALL_LOG, "vif_den_scale0")
        self.assertAlmostEqual(score, 1287822.80208, places=0)
        score, scores = read_log(ALL_LOG, "vif_den_scale1")
        self.assertAlmostEqual(score, 241255.067708, places=1)
        score, scores = read_log(ALL_LOG, "vif_den_scale2")
        self.assertAlmostEqual(score, 55149.8169759, places=2)
        score, scores = read_log(ALL_LOG, "vif_den_scale3")
        self.assertAlmostEqual(score, 13087.2657267, places=2)
        score, scores = read_log(ALL_LOG, "adm_den_scale0")
        self.assertAlmostEqual(score, 50.143851375000004, places=4)
        score, scores = read_log(ALL_LOG, "adm_num_scale1")
        self.assertAlmostEqual(score, 66.58064533333334, places=4)
        score, scores = read_log(ALL_LOG, "adm_den_scale1")
        self.assertAlmostEqual(score, 74.47438285416666, places=4)
        score, scores = read_log(ALL_LOG, "adm_num_scale2")
        self.assertAlmostEqual(score, 105.56477879166668, places=4)
        score, scores = read_log(ALL_LOG, "adm_den_scale2")
        self.assertAlmostEqual(score, 113.49725852083333, places=4)
        score, scores = read_log(ALL_LOG, "adm_num_scale3")
        self.assertAlmostEqual(score, 154.16224066666666, places=4)
        score, scores = read_log(ALL_LOG, "adm_den_scale3")
        self.assertAlmostEqual(score, 159.71829710416668, places=4)
Esempio n. 55
0
    def test_explain_vmaf_results(self):
        ref_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test",
                      content_id=0,
                      asset_id=0,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={
                          'width': 576,
                          'height': 324
                      })

        asset_original = Asset(dataset="test",
                               content_id=0,
                               asset_id=1,
                               workdir_root=VmafConfig.workdir_path(),
                               ref_path=ref_path,
                               dis_path=ref_path,
                               asset_dict={
                                   'width': 576,
                                   'height': 324
                               })

        self.runner = VmafQualityRunnerWithLocalExplainer(
            [asset, asset_original],
            None,
            fifo_mode=True,
            delete_workdir=True,
            result_store=None,
            optional_dict2={'explainer': LocalExplainer(neighbor_samples=100)})

        np.random.seed(0)

        self.runner.run()
        results = self.runner.results

        self.assertAlmostEqual(results[0]['VMAF_score'],
                               76.68425574067017,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_score'],
                               99.946416604585025,
                               places=4)

        expected_feature_names = [
            'VMAF_feature_adm2_score', 'VMAF_feature_motion2_score',
            'VMAF_feature_vif_scale0_score', 'VMAF_feature_vif_scale1_score',
            'VMAF_feature_vif_scale2_score', 'VMAF_feature_vif_scale3_score'
        ]

        weights = np.mean(results[0]['VMAF_scores_exps']['feature_weights'],
                          axis=0)
        self.assertAlmostEqual(weights[0], 0.66021689480916868, places=4)
        self.assertAlmostEqual(weights[1], 0.14691682562211777, places=4)
        self.assertAlmostEqual(weights[2], -0.023682744847036086, places=4)
        self.assertAlmostEqual(weights[3], -0.029779341850172818, places=4)
        self.assertAlmostEqual(weights[4], 0.19149485210137338, places=4)
        self.assertAlmostEqual(weights[5], 0.31890978778344126, places=4)

        self.assertEqual(results[0]['VMAF_scores_exps']['feature_names'],
                         expected_feature_names)

        weights = np.mean(results[1]['VMAF_scores_exps']['feature_weights'],
                          axis=0)
        self.assertAlmostEqual(weights[0], 0.69597961598838509, places=4)
        self.assertAlmostEqual(weights[1], 0.18256016705513464, places=4)
        self.assertAlmostEqual(weights[2], 0.0090048099912423147, places=4)
        self.assertAlmostEqual(weights[3], 0.028671810808880094, places=4)
        self.assertAlmostEqual(weights[4], 0.21935602577417926, places=4)
        self.assertAlmostEqual(weights[5], 0.34190431429767715, places=4)

        self.assertEqual(results[1]['VMAF_scores_exps']['feature_names'],
                         expected_feature_names)
Esempio n. 56
0
    def test_checkerboard_identical(self):

        LOCAL_LOG_FILENAME = self.LOG_FILENAME + '_checkerboardIdentical'
        ref_yuv = VmafConfig.test_resource_path(
            "yuv", "checkerboard_1920_1080_10_3_0_0.yuv")
        dis_yuv = VmafConfig.test_resource_path(
            "yuv", "checkerboard_1920_1080_10_3_0_0.yuv")
        yuv_fmt = "yuv420p"
        yuv_width = 1920
        yuv_height = 1080
        cmd = self.CMD_TEMPLATE.format(vmaf=required(
            ExternalProgram.vmaf_feature),
                                       fmt=yuv_fmt,
                                       ref=ref_yuv,
                                       dis=dis_yuv,
                                       w=yuv_width,
                                       h=yuv_height,
                                       log=LOCAL_LOG_FILENAME)
        run_process(cmd, shell=True)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "adm")[0],
                               1.0,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "ansnr")[0],
                               21.1138813333,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "motion")[0],
                               12.554836666666667,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "motion2")[0],
                               12.554836666666667,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "vif")[0],
                               1.0,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "adm_num")[0],
                               2773.891225,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "adm_den")[0],
                               2773.891225,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "vif_num")[0],
                               33021350.5,
                               places=-3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "vif_den")[0],
                               33021387.0625,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "anpsnr")[0],
                               29.8567246667,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "vif_num_scale0")[0],
                               25757432.0,
                               places=-3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "vif_den_scale0")[0],
                               25757473.3333,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "vif_num_scale3")[0],
                               259774.958333,
                               places=1)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "vif_den_scale3")[0],
                               259774.9375,
                               places=3)

        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "adm_num_scale0")[0],
                               277.120382,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "adm_den_scale0")[0],
                               277.120382,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "adm_num_scale3")[0],
                               924.193766,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "adm_den_scale3")[0],
                               924.193766,
                               places=3)
Esempio n. 57
0
    def test_feature_assembler_whole_feature(self):
        print 'test on feature assembler with whole feature...'
        ref_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test",
                      content_id=0,
                      asset_id=0,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={
                          'width': 576,
                          'height': 324
                      })

        asset_original = Asset(dataset="test",
                               content_id=0,
                               asset_id=1,
                               workdir_root=VmafConfig.workdir_path(),
                               ref_path=ref_path,
                               dis_path=ref_path,
                               asset_dict={
                                   'width': 576,
                                   'height': 324
                               })

        self.fassembler = FeatureAssembler(
            feature_dict={'VMAF_feature': 'all'},
            feature_option_dict=None,
            assets=[asset, asset_original],
            logger=None,
            fifo_mode=True,
            delete_workdir=True,
            result_store=None,
            optional_dict=None,
            optional_dict2=None,
            parallelize=True,
        )

        self.fassembler.run()

        results = self.fassembler.results

        self.assertAlmostEqual(results[0]['VMAF_feature_vif_score'],
                               0.44609306249999997,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_motion_score'],
                               4.0498253541666669,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_adm2_score'],
                               0.93458780728708746,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_ansnr_score'],
                               23.509571520833333,
                               places=4)

        self.assertAlmostEqual(results[1]['VMAF_feature_vif_score'],
                               1.0,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_motion_score'],
                               4.0498253541666669,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_adm2_score'],
                               1.0,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_ansnr_score'],
                               31.271439270833337,
                               places=4)
Esempio n. 58
0
    def test_checkerboard_shifted_by_1(self):

        LOCAL_LOG_FILENAME = self.LOG_FILENAME + '_checkerboard_shifted_by_1'
        ref_yuv = VmafConfig.test_resource_path(
            "yuv", "checkerboard_1920_1080_10_3_0_0.yuv")
        dis_yuv = VmafConfig.test_resource_path(
            "yuv", "checkerboard_1920_1080_10_3_1_0.yuv")
        yuv_fmt = "yuv420p"
        yuv_width = 1920
        yuv_height = 1080
        cmd = self.CMD_TEMPLATE.format(vmaf=required(
            ExternalProgram.vmaf_feature),
                                       fmt=yuv_fmt,
                                       ref=ref_yuv,
                                       dis=dis_yuv,
                                       w=yuv_width,
                                       h=yuv_height,
                                       log=LOCAL_LOG_FILENAME)
        run_process(cmd, shell=True)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "adm")[0],
                               0.7853383333333334,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "ansnr")[0],
                               7.92623066667,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "motion")[0],
                               12.5548366667,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "motion2")[0],
                               12.5548366667,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "vif")[0],
                               0.156834666667,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "adm_num")[0],
                               2178.5352886666665,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "adm_den")[0],
                               2773.891225,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "vif_num")[0],
                               5178894.51562,
                               places=-1)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "vif_den")[0],
                               33021387.0625,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME, "anpsnr")[0],
                               16.669074,
                               places=4)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "vif_num_scale0")[0],
                               2908829.0,
                               places=-1)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "vif_den_scale0")[0],
                               25757473.3333,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "vif_num_scale3")[0],
                               128957.796875,
                               places=-2)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "vif_den_scale3")[0],
                               259774.9375,
                               places=3)

        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "adm_num_scale0")[0],
                               201.15329999999997,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "adm_den_scale0")[0],
                               277.120382,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "adm_num_scale3")[0],
                               765.1562903333333,
                               places=3)
        self.assertAlmostEqual(read_log(LOCAL_LOG_FILENAME,
                                        "adm_den_scale3")[0],
                               924.193766,
                               places=3)
Esempio n. 59
0
    def test_run_vmaf_fextractor_with_cropping(self):
        # crop_cmd: 288:162:144:81 - crop to 288x162 with upper-left pixel
        # starting at coordinate (144, 81)

        ref_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc00_576x324.yuv")
        dis_path = VmafConfig.test_resource_path("yuv",
                                                 "src01_hrc01_576x324.yuv")
        asset = Asset(dataset="test",
                      content_id=0,
                      asset_id=1,
                      workdir_root=VmafConfig.workdir_path(),
                      ref_path=ref_path,
                      dis_path=dis_path,
                      asset_dict={
                          'width': 576,
                          'height': 324,
                          'crop_cmd': '288:162:144:81',
                          'quality_width': 288,
                          'quality_height': 162,
                      })

        asset_original = Asset(dataset="test",
                               content_id=0,
                               asset_id=2,
                               workdir_root=VmafConfig.workdir_path(),
                               ref_path=ref_path,
                               dis_path=ref_path,
                               asset_dict={
                                   'width': 576,
                                   'height': 324,
                                   'crop_cmd': '288:162:144:81',
                                   'quality_width': 288,
                                   'quality_height': 162,
                               })

        self.fextractor = VmafFeatureExtractor([asset, asset_original],
                                               None,
                                               fifo_mode=False)

        self.fextractor.run(parallelize=False)

        results = self.fextractor.results

        self.assertAlmostEqual(results[0]['VMAF_feature_vif_score'],
                               0.45365762500000012,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_motion_score'],
                               2.8779373333333331,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_adm2_score'],
                               0.93894987889874548,
                               places=4)
        self.assertAlmostEqual(results[0]['VMAF_feature_ansnr_score'],
                               23.942050354166668,
                               places=4)

        self.assertAlmostEqual(results[1]['VMAF_feature_vif_score'],
                               1.0,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_motion_score'],
                               2.8779373333333331,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_adm2_score'],
                               1.0,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_feature_ansnr_score'],
                               31.71648420833333,
                               places=4)
Esempio n. 60
0
class FeatureTestYuv422p10le(unittest.TestCase):

    LOG_FILENAME = VmafConfig.workdir_path("logFeatureTestYuv422p10le")
    REF_YUV = VmafConfig.test_resource_path("yuv", "src01_hrc00_576x324.yuv422p10le.yuv")
    DIS_YUV = VmafConfig.test_resource_path("yuv", "src01_hrc01_576x324.yuv422p10le.yuv")
    YUV_FMT = "yuv422p10le"
    YUV_WIDTH = 576
    YUV_HEIGHT = 324

    def setUp(self):
        if os.path.exists(self.LOG_FILENAME):
            os.remove(self.LOG_FILENAME)

    def tearDown(self):
        if os.path.exists(self.LOG_FILENAME):
            os.remove(self.LOG_FILENAME)

        if (REMOVE_LOG):
            (logPath, logFilePrefix) = os.path.split(self.LOG_FILENAME)
            filenames = [filename for filename in os.listdir(logPath) if filename.startswith(logFilePrefix)]
            for filename in filenames:
                os.remove(os.path.join(logPath, filename))

    def test_adm(self):
        ADM_LOG = self.LOG_FILENAME + '_adm'
        print 'test adm on yuv422p10le...'
        cmd = "{vmaf} adm {fmt} {ref} {dis} {w} {h} > {log}".format(
            vmaf=required(ExternalProgram.vmaf), fmt=self.YUV_FMT, ref=self.REF_YUV, dis=self.DIS_YUV,
            w=self.YUV_WIDTH, h=self.YUV_HEIGHT, log=ADM_LOG
        )
        run_process(cmd, shell=True)
        score, scores = read_log(ADM_LOG, "adm")
        self.assertAlmostEquals(score, 0.9345877708333336, places=4)
        score, scores = read_log(ADM_LOG, "adm_num")
        self.assertAlmostEquals(score, 371.8354140624999, places=4)
        score, scores = read_log(ADM_LOG, "adm_den")
        self.assertAlmostEquals(score, 397.8337897291667, places=4)

        score, scores = read_log(ADM_LOG, "adm_den_scale0")
        self.assertAlmostEquals(score, 50.143851375000004, places=4)
        score, scores = read_log(ADM_LOG, "adm_num_scale1")
        self.assertAlmostEquals(score, 66.58064533333334, places=4)
        score, scores = read_log(ADM_LOG, "adm_den_scale1")
        self.assertAlmostEquals(score, 74.47438285416666, places=4)
        score, scores = read_log(ADM_LOG, "adm_num_scale2")
        self.assertAlmostEquals(score, 105.56477879166668, places=4)
        score, scores = read_log(ADM_LOG, "adm_den_scale2")
        self.assertAlmostEquals(score, 113.49725852083333, places=4)
        score, scores = read_log(ADM_LOG, "adm_num_scale3")
        self.assertAlmostEquals(score, 154.16224066666666, places=4)
        score, scores = read_log(ADM_LOG, "adm_den_scale3")
        self.assertAlmostEquals(score, 159.71829710416668, places=4)

    def test_ansnr(self):
        ANSNR_LOG = self. LOG_FILENAME + '_ansnr'
        print 'test ansnr on yuv422p10le...'
        cmd = "{vmaf} ansnr {fmt} {ref} {dis} {w} {h} > {log}".format(
            vmaf=required(ExternalProgram.vmaf), fmt=self.YUV_FMT, ref=self.REF_YUV, dis=self.DIS_YUV,
            w=self.YUV_WIDTH, h=self.YUV_HEIGHT, log=ANSNR_LOG
        )
        run_process(cmd, shell=True)
        score, scores = read_log(ANSNR_LOG, "ansnr")
        self.assertAlmostEquals(score, 23.5095715208, places=4)
        score, scores = read_log(ANSNR_LOG, "anpsnr")
        self.assertAlmostEquals(score, 34.1902860625, places=4)

    def test_motion(self):
        MOTION_LOG = self.LOG_FILENAME + '_motion'
        print 'test motion on yuv422p10le...'
        cmd = "{vmaf} motion {fmt} {ref} {dis} {w} {h} > {log}".format(
            vmaf=required(ExternalProgram.vmaf), fmt=self.YUV_FMT, ref=self.REF_YUV, dis=self.DIS_YUV,
            w=self.YUV_WIDTH, h=self.YUV_HEIGHT, log=MOTION_LOG
        )
        run_process(cmd, shell=True)
        score, scores = read_log(MOTION_LOG, "motion")
        self.assertAlmostEquals(score, 4.04982535417, places=4)

    def test_vif(self):
        VIF_LOG = self.LOG_FILENAME + '_vif'
        print 'test vif on yuv422p10le...'
        cmd = "{vmaf} vif {fmt} {ref} {dis} {w} {h} > {log}".format(
            vmaf=required(ExternalProgram.vmaf), fmt=self.YUV_FMT, ref=self.REF_YUV, dis=self.DIS_YUV,
            w=self.YUV_WIDTH, h=self.YUV_HEIGHT, log=VIF_LOG
        )
        run_process(cmd, shell=True)
        score, scores = read_log(VIF_LOG, "vif")
        self.assertAlmostEquals(score, 0.4460930625, places=4)
        self.assertAlmostEquals(scores[0], 0.580304, places=4)
        self.assertAlmostEquals(scores[1], 0.492477, places=4)
        score, scores = read_log(VIF_LOG, "vif_num")
        self.assertAlmostEquals(score, 712650.023478, places=0)
        score, scores = read_log(VIF_LOG, "vif_den")
        self.assertAlmostEquals(score, 1597314.95249, places=0)
        score, scores = read_log(VIF_LOG, "vif_num_scale0")
        self.assertAlmostEquals(score, 468101.509766, places=0)
        score, scores = read_log(VIF_LOG, "vif_num_scale1")
        self.assertAlmostEquals(score, 184971.572266, places=1)
        score, scores = read_log(VIF_LOG, "vif_num_scale2")
        self.assertAlmostEquals(score, 47588.8323567, places=0)
        score, scores = read_log(VIF_LOG, "vif_num_scale3")
        self.assertAlmostEquals(score, 11988.1090902, places=1)
        score, scores = read_log(VIF_LOG, "vif_den_scale0")
        self.assertAlmostEquals(score, 1287822.80208, places=0)
        score, scores = read_log(VIF_LOG, "vif_den_scale1")
        self.assertAlmostEquals(score, 241255.067708, places=1)
        score, scores = read_log(VIF_LOG, "vif_den_scale2")
        self.assertAlmostEquals(score, 55149.8169759, places=2)
        score, scores = read_log(VIF_LOG, "vif_den_scale3")
        self.assertAlmostEquals(score, 13087.2657267, places=2)

    def test_all(self):
        ALL_LOG = self.LOG_FILENAME + "_all"
        print 'test all on yuv422p10le...'
        cmd = "{vmaf} all {fmt} {ref} {dis} {w} {h} > {log}".format(
            vmaf=required(ExternalProgram.vmaf), fmt=self.YUV_FMT, ref=self.REF_YUV, dis=self.DIS_YUV,
            w=self.YUV_WIDTH, h=self.YUV_HEIGHT, log=ALL_LOG
        )
        run_process(cmd, shell=True)
        score, scores = read_log(ALL_LOG, "vif")
        self.assertAlmostEquals(score, 0.4460930625, places=4)
        score, scores = read_log(ALL_LOG, "motion")
        self.assertAlmostEquals(score, 4.04982535417, places=4)
        score, scores = read_log(ALL_LOG, "ansnr")
        self.assertAlmostEquals(score, 23.5095715208, places=4)
        score, scores = read_log(ALL_LOG, "adm")
        self.assertAlmostEquals(score, 0.9345877708333336, places=4)
        score, scores = read_log(ALL_LOG, "adm_num")
        self.assertAlmostEquals(score, 371.8354140624999, places=4)
        score, scores = read_log(ALL_LOG, "adm_den")
        self.assertAlmostEquals(score, 397.8337897291667, places=4)
        score, scores = read_log(ALL_LOG, "vif_num")
        self.assertAlmostEquals(score, 712650.023478, places=0)
        score, scores = read_log(ALL_LOG, "vif_den")
        self.assertAlmostEquals(score, 1597314.95249, places=0)
        score, scores = read_log(ALL_LOG, "anpsnr")
        self.assertAlmostEquals(score, 34.1902860625, places=4)
        score, scores = read_log(ALL_LOG, "vif_num_scale0")
        self.assertAlmostEquals(score, 468101.509766, places=0)
        score, scores = read_log(ALL_LOG, "vif_num_scale1")
        self.assertAlmostEquals(score, 184971.572266, places=1)
        score, scores = read_log(ALL_LOG, "vif_num_scale2")
        self.assertAlmostEquals(score, 47588.8323567, places=0)
        score, scores = read_log(ALL_LOG, "vif_num_scale3")
        self.assertAlmostEquals(score, 11988.1090902, places=1)
        score, scores = read_log(ALL_LOG, "vif_den_scale0")
        self.assertAlmostEquals(score, 1287822.80208, places=0)
        score, scores = read_log(ALL_LOG, "vif_den_scale1")
        self.assertAlmostEquals(score, 241255.067708, places=1)
        score, scores = read_log(ALL_LOG, "vif_den_scale2")
        self.assertAlmostEquals(score, 55149.8169759, places=2)
        score, scores = read_log(ALL_LOG, "vif_den_scale3")
        self.assertAlmostEquals(score, 13087.2657267, places=2)
        score, scores = read_log(ALL_LOG, "adm_den_scale0")
        self.assertAlmostEquals(score, 50.143851375000004, places=4)
        score, scores = read_log(ALL_LOG, "adm_num_scale1")
        self.assertAlmostEquals(score, 66.58064533333334, places=4)
        score, scores = read_log(ALL_LOG, "adm_den_scale1")
        self.assertAlmostEquals(score, 74.47438285416666, places=4)
        score, scores = read_log(ALL_LOG, "adm_num_scale2")
        self.assertAlmostEquals(score, 105.56477879166668, places=4)
        score, scores = read_log(ALL_LOG, "adm_den_scale2")
        self.assertAlmostEquals(score, 113.49725852083333, places=4)
        score, scores = read_log(ALL_LOG, "adm_num_scale3")
        self.assertAlmostEquals(score, 154.16224066666666, places=4)
        score, scores = read_log(ALL_LOG, "adm_den_scale3")
        self.assertAlmostEquals(score, 159.71829710416668, places=4)

    def test_psnr(self):
        PSNR_LOG = self.LOG_FILENAME + '_psnr'
        print 'test psnr on yuv422p10le...'
        cmd = "{psnr} {fmt} {ref} {dis} {w} {h} > {log}".format(
            psnr=required(ExternalProgram.psnr), fmt=self.YUV_FMT, ref=self.REF_YUV, dis=self.DIS_YUV,
            w=self.YUV_WIDTH, h=self.YUV_HEIGHT, log=PSNR_LOG
        )
        run_process(cmd, shell=True)
        score, scores = read_log(PSNR_LOG, "psnr")
        self.assertAlmostEquals(score, 30.7805732917, places=4)
        self.assertAlmostEquals(scores[0], 34.786288, places=4)
        self.assertAlmostEquals(scores[1], 31.908737, places=4)

    def test_ssim(self):
        SSIM_LOG = self.LOG_FILENAME + '_ssim'
        print 'test ssim on yuv422p10le...'
        cmd = "{ssim} {fmt} {ref} {dis} {w} {h} > {log}".format(
            ssim=required(ExternalProgram.ssim), fmt=self.YUV_FMT, ref=self.REF_YUV, dis=self.DIS_YUV,
            w=self.YUV_WIDTH, h=self.YUV_HEIGHT, log=SSIM_LOG
        )
        run_process(cmd, shell=True)
        score, scores = read_log(SSIM_LOG, "ssim")
        self.assertAlmostEquals(score, 0.863226541666667, places=4)
        self.assertAlmostEquals(scores[0], 0.925023, places=4)
        self.assertAlmostEquals(scores[1], 0.891992, places=4)
        score, scores = read_log(SSIM_LOG, "ssim_l")
        self.assertAlmostEquals(score,0.998147458333333, places=4)
        self.assertAlmostEquals(scores[0], 0.999524, places=4)
        self.assertAlmostEquals(scores[1], 0.998983, places=4)
        score, scores = read_log(SSIM_LOG, "ssim_c")
        self.assertAlmostEquals(score, 0.9612679375000001, places=4)
        self.assertAlmostEquals(scores[0], 0.979614, places=4)
        self.assertAlmostEquals(scores[1], 0.96981, places=4)
        score, scores = read_log(SSIM_LOG, "ssim_s")
        self.assertAlmostEquals(score, 0.8977363333333335, places=4)
        self.assertAlmostEquals(scores[0], 0.943966, places=4)
        self.assertAlmostEquals(scores[1], 0.919507, places=4)

    def test_ms_ssim(self):
        MS_SSIM_LOG = self.LOG_FILENAME + '_msssim'
        print 'test ms_ssim on yuv422p10le...'
        cmd = "{ms_ssim} {fmt} {ref} {dis} {w} {h} > {log}".format(
            ms_ssim=required(ExternalProgram.ms_ssim), fmt=self.YUV_FMT, ref=self.REF_YUV, dis=self.DIS_YUV,
            w=self.YUV_WIDTH, h=self.YUV_HEIGHT, log=MS_SSIM_LOG
        )
        run_process(cmd, shell=True)
        score, scores = read_log(MS_SSIM_LOG, "ms_ssim")
        self.assertAlmostEquals(score, 0.9632498125, places=4)
        self.assertAlmostEquals(scores[0], 0.981968, places=4)
        self.assertAlmostEquals(scores[1], 0.973366, places=4)
        score, scores = read_log(MS_SSIM_LOG, "ms_ssim_l_scale0")
        self.assertAlmostEquals(score, 0.998147458333333, places=4)
        score, scores = read_log(MS_SSIM_LOG, "ms_ssim_c_scale0")
        self.assertAlmostEquals(score, 0.9612679375000001, places=4)
        score, scores = read_log(MS_SSIM_LOG, "ms_ssim_s_scale0")
        self.assertAlmostEquals(score, 0.8977363333333335, places=4)
        score, scores = read_log(MS_SSIM_LOG, "ms_ssim_l_scale1")
        self.assertAlmostEquals(score, 0.9989961250000002, places=4)
        score, scores = read_log(MS_SSIM_LOG, "ms_ssim_c_scale1")
        self.assertAlmostEquals(score, 0.9857694375, places=4)
        score, scores = read_log(MS_SSIM_LOG, "ms_ssim_s_scale1")
        self.assertAlmostEquals(score, 0.941185875, places=4)
        score, scores = read_log(MS_SSIM_LOG, "ms_ssim_l_scale2")
        self.assertAlmostEquals(score, 0.9992356458333332, places=4)
        score, scores = read_log(MS_SSIM_LOG, "ms_ssim_c_scale2")
        self.assertAlmostEquals(score, 0.997034020833, places=4)
        score, scores = read_log(MS_SSIM_LOG, "ms_ssim_s_scale2")
        self.assertAlmostEquals(score, 0.977992145833, places=4)
        score, scores = read_log(MS_SSIM_LOG, "ms_ssim_l_scale3")
        self.assertAlmostEquals(score, 0.9992921041666665, places=4)
        score, scores = read_log(MS_SSIM_LOG, "ms_ssim_c_scale3")
        self.assertAlmostEquals(score, 0.9995884375000003, places=4)
        score, scores = read_log(MS_SSIM_LOG, "ms_ssim_s_scale3")
        self.assertAlmostEquals(score, 0.9938712499999998, places=4)
        score, scores = read_log(MS_SSIM_LOG, "ms_ssim_l_scale4")
        self.assertAlmostEquals(score, 0.9994035625000003, places=4)
        score, scores = read_log(MS_SSIM_LOG, "ms_ssim_c_scale4")
        self.assertAlmostEquals(score, 0.999907625, places=4)
        score, scores = read_log(MS_SSIM_LOG, "ms_ssim_s_scale4")
        self.assertAlmostEquals(score,0.998222583333, places=4)