Exemplo n.º 1
0
def main():
    title = sys.argv[1]
    assets, dis_info = get_assets()
    runner = VmafQualityRunner(assets, logger=None)
    runner.run()
    fig = draw_graph(runner.results, dis_info, title)
    gpath = get_graph_path()
    fig.savefig(gpath)
    print 'Saved graph to ' + gpath
Exemplo n.º 2
0
class ResultAggregatingTest(unittest.TestCase):
    def test_from_xml_from_json_and_aggregation(self):

        ref_path, dis_path, asset, asset_original = set_default_576_324_videos_for_testing(
        )

        asset_list = [asset, asset_original]

        self.runner = VmafQualityRunner(
            asset_list,
            None,
            fifo_mode=True,
            delete_workdir=True,
            result_store=None,
            optional_dict={
                'model_filepath':
                VmafConfig.model_path("vmaf_float_v0.6.1.pkl"),
            },
            optional_dict2=None,
        )
        self.runner.run()

        results = self.runner.results

        xml_string_expected = results[0].to_xml()
        xml_string_recon = Result.from_xml(xml_string_expected).to_xml()

        json_string_expected = results[0].to_json()
        json_string_recon = Result.from_json(json_string_expected).to_json()

        assert xml_string_expected == xml_string_recon, "XML files do not match"
        assert json_string_expected == json_string_recon, "JSON files do not match"

        combined_result = Result.combine_result([results[0], results[1]])

        # check that all keys are there
        combined_result_keys = [key for key in combined_result.result_dict]
        keys_0 = [key for key in results[0].result_dict]
        keys_1 = [key for key in results[1].result_dict]
        assert set(keys_0) == set(keys_1) == set(combined_result_keys)

        # check that the dictionaries have been copied as expected
        for key in combined_result_keys:
            assert len(combined_result.result_dict[key]) == len(
                results[0].result_dict[key]) + len(results[1].result_dict[key])
            assert combined_result.result_dict[key][0] == results[
                0].result_dict[key][0]
            assert combined_result.result_dict[key][
                len(results[0].result_dict[key]) -
                1] == results[0].result_dict[key][
                    len(results[0].result_dict[key]) - 1]
            assert combined_result.result_dict[key][len(
                results[0].result_dict[key])] == results[1].result_dict[key][0]
            assert combined_result.result_dict[key][
                len(combined_result.result_dict[key]) -
                1] == results[1].result_dict[key][
                    len(results[1].result_dict[key]) - 1]
Exemplo n.º 3
0
class ScoreAggregationTest(unittest.TestCase):

    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 = VmafQualityRunner(
            [asset], None, fifo_mode=True,
            delete_workdir=True, result_store=FileSystemResultStore(),
        )
        self.runner.run()

        self.result = self.runner.results[0]

        Nframes = len(self.result.result_dict['VMAF_scores'])
        self.result.result_dict['VMAF_array_scores'] = self.result.result_dict['VMAF_scores'].reshape(Nframes, 1)
        self.result.result_dict['VMAF_two_models_array_scores'] = np.vstack((self.result.result_dict['VMAF_scores'].reshape(1, Nframes),
                                                                       self.result.result_dict['VMAF_scores'].reshape(1, Nframes)))
        self.result.result_dict['VMAF_3D_array_scores'] = np.zeros((1, 1, 1))

    def tearDown(self):
        if hasattr(self, 'runner'):
            self.runner.remove_results()

    def test_to_score_str(self):

        self.result.set_score_aggregate_method(np.mean)
        # the following should give same value
        self.assertAlmostEqual(self.result['VMAF_score'], 35.0661575902223, places=4)
        # for a 2-D array, first dimension is # models and second is # frames
        self.assertAlmostEqual(self.result['VMAF_two_models_array_score'][0], 35.0661575902223, places=4)
        self.assertAlmostEqual(self.result['VMAF_two_models_array_score'][1], 35.0661575902223, places=4)
        self.assertAlmostEqual(self.result['VMAF_array_score'][0], 22.97749190550349, places=4)
        self.assertAlmostEqual(self.result['VMAF_array_score'][1], 44.79653061901706, places=4)
        self.assertAlmostEqual(self.result['VMAF_array_score'][2], 37.424450246146364, places=4)
        # check that a 3-D array will throw assertion, score aggregation accepts only up to 2-D
        with self.assertRaises(AssertionError):
            x = self.result['VMAF_3D_array_score']
Exemplo n.º 4
0
    def test_train_test_on_dataset_with_dis1st_thr_with_feature_optional_dict_good(self):
        from vmaf.routine import train_test_vmaf_on_dataset
        train_dataset = import_python_file(
            VmafConfig.test_resource_path('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_with_optional_dict_good.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], 90.753010402770798, places=3)
        self.assertAlmostEqual(test_stats['ys_label_pred'][0], 90.753010402770798, places=3)

        runner = VmafQualityRunner(
            train_assets,
            None, fifo_mode=True,
            delete_workdir=True,
            result_store=None,
            optional_dict={'model_filepath': self.output_model_filepath}
        )
        runner.run(parallelize=True)
        results = runner.results

        self.assertAlmostEqual(results[0]['VMAF_score'], 89.55494473011981, places=4)
        self.assertAlmostEqual(results[1]['VMAF_score'], 61.01289549048653, places=4)
        self.assertAlmostEqual(results[2]['VMAF_score'], 90.75301241304798, places=4)
        self.assertAlmostEqual(results[3]['VMAF_score'], 89.27013895870179, places=4)
Exemplo n.º 5
0
class QualityRunnerTest(unittest.TestCase):
    def tearDown(self):
        if hasattr(self, 'runner'):
            self.runner.remove_results()
            pass

    def setUp(self):
        self.result_store = FileSystemResultStore()

    def test_run_psnr_runner_with_notyuv_gblur(self):

        ref_path = VmafConfig.test_resource_path("mp4",
                                                 "Seeking_10_288_375.mp4")
        dis_path = VmafConfig.test_resource_path("mp4",
                                                 "Seeking_10_288_375.mp4")
        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={
                          'yuv_type': 'notyuv',
                          'quality_width': 720,
                          'quality_height': 480,
                          'dis_gblur_cmd': 'sigma=0.01:steps=1',
                      })
        self.runner = PsnrQualityRunner([asset],
                                        None,
                                        fifo_mode=False,
                                        delete_workdir=True,
                                        result_store=None)
        self.runner.run()

        results = self.runner.results
        self.assertAlmostEqual(results[0]['PSNR_score'],
                               50.99313338666667,
                               places=4)

    def test_run_vmaf_runner_with_notyuv_gblur(self):

        ref_path = VmafConfig.test_resource_path("mp4",
                                                 "Seeking_30_480_1050.mp4")
        dis_path = VmafConfig.test_resource_path("mp4",
                                                 "Seeking_10_288_375.mp4")
        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={
                          'yuv_type': 'notyuv',
                          'quality_width': 360,
                          'quality_height': 240,
                          'dis_gblur_cmd': 'sigma=0.01:steps=1',
                      })
        self.runner = VmafQualityRunner([asset],
                                        None,
                                        fifo_mode=True,
                                        delete_workdir=True,
                                        result_store=None)
        self.runner.run()

        results = self.runner.results
        self.assertAlmostEqual(results[0]['VMAF_score'],
                               77.28938600125885,
                               places=4)

    def test_run_vmaf_runner_with_yuv_lutyuv(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,
                          'quality_width': 360,
                          'quality_height': 240,
                          'lutyuv_cmd': 'y=2*val',
                      })
        self.runner = VmafQualityRunner([asset],
                                        None,
                                        fifo_mode=False,
                                        delete_workdir=True,
                                        result_store=None)
        self.runner.run()

        results = self.runner.results
        self.assertAlmostEqual(results[0]['VMAF_score'],
                               77.18873019841408,
                               places=4)
Exemplo n.º 6
0
class QualityRunnerTest(MyTestCase):
    def tearDown(self):
        if hasattr(self, 'runner'):
            self.runner.remove_results()
        super().tearDown()

    def setUp(self):
        super().setUp()
        self.result_store = FileSystemResultStore()

    def test_run_psnr_runner_with_notyuv(self):

        ref_path = VmafConfig.test_resource_path("mp4",
                                                 "Seeking_10_288_375.mp4")
        dis_path = VmafConfig.test_resource_path("mp4",
                                                 "Seeking_10_288_375.mp4")
        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={
                          'yuv_type': 'notyuv',
                          'quality_width': 720,
                          'quality_height': 480,
                      })
        self.runner = PsnrQualityRunner([asset],
                                        None,
                                        fifo_mode=True,
                                        delete_workdir=True,
                                        result_store=None)
        self.runner.run()

        results = self.runner.results
        self.assertAlmostEqual(results[0]['PSNR_score'], 60.0, places=4)

    def test_run_vmaf_runner_with_notyuv(self):

        ref_path = VmafConfig.test_resource_path("mp4",
                                                 "Seeking_30_480_1050.mp4")
        dis_path = VmafConfig.test_resource_path("mp4",
                                                 "Seeking_10_288_375.mp4")
        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={
                          'yuv_type': 'notyuv',
                          'quality_width': 360,
                          'quality_height': 240,
                      })
        self.runner = VmafQualityRunner(
            [asset],
            None,
            fifo_mode=True,
            delete_workdir=True,
            result_store=None,
            optional_dict={
                'model_filepath':
                VmafConfig.model_path("vmaf_float_v0.6.1.json"),
            },
        )
        self.runner.run()

        results = self.runner.results
        self.assertAlmostEqual(results[0]['VMAF_score'],
                               77.61273448644646,
                               places=4)

    def test_run_vmaf_runner_with_notyuv_jpg(self):

        ref_path = VmafConfig.test_resource_path("test_images", "bikes.jpg")
        dis_path = VmafConfig.test_resource_path("test_images",
                                                 "bikes_dis.jpg")
        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={
                          'yuv_type': 'notyuv',
                          'quality_width': 512,
                          'quality_height': 384,
                          'workfile_yuv_type': 'yuv444p',
                      })
        self.runner = VmafQualityRunner(
            [asset],
            None,
            fifo_mode=True,
            delete_workdir=True,
            result_store=None,
            optional_dict={
                'model_filepath':
                VmafConfig.model_path("vmaf_float_v0.6.1.json"),
            },
        )
        self.runner.run()

        results = self.runner.results
        self.assertAlmostEqual(results[0]['VMAF_score'],
                               63.255016130209064,
                               places=4)

    def test_run_vmafossexec_runner_with_notyuv(self):

        ref_path = VmafConfig.test_resource_path("mp4",
                                                 "Seeking_30_480_1050.mp4")
        dis_path = VmafConfig.test_resource_path("mp4",
                                                 "Seeking_10_288_375.mp4")
        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={
                          'yuv_type': 'notyuv',
                          'quality_width': 360,
                          'quality_height': 240,
                      })
        self.runner = VmafossExecQualityRunner([asset],
                                               None,
                                               fifo_mode=True,
                                               delete_workdir=True,
                                               result_store=None)
        self.runner.run()

        results = self.runner.results
        self.assertAlmostEqual(results[0]['VMAFOSSEXEC_score'],
                               77.59110129333334,
                               places=3)

    def test_run_psnr_runner_with_frames(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,
                          'start_frame': 2,
                          'end_frame': 2
                      })
        asset2 = 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,
                           'ref_start_frame': 2,
                           'ref_end_frame': 2,
                           'dis_start_frame': 6,
                           'dis_end_frame': 6,
                       })
        self.runner = PsnrQualityRunner([asset, asset2],
                                        None,
                                        fifo_mode=True,
                                        delete_workdir=True,
                                        result_store=None)
        self.runner.run(parallelize=False)

        results = self.runner.results
        self.assertAlmostEqual(results[0]['PSNR_score'], 30.993823, places=4)
        self.assertAlmostEqual(results[1]['PSNR_score'], 19.393160, places=4)

    def test_run_psnr_runner_with_frames_proc(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,
                          'start_frame': 2,
                          'end_frame': 2,
                          'ref_proc_callback': 'identity',
                      })
        asset2 = 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,
                           'ref_start_frame': 2,
                           'ref_end_frame': 2,
                           'dis_start_frame': 6,
                           'dis_end_frame': 6,
                           'dis_proc_callback': 'identity',
                       })
        self.runner = PsnrQualityRunner([asset, asset2],
                                        None,
                                        fifo_mode=True,
                                        delete_workdir=True,
                                        result_store=None)
        self.runner.run(parallelize=False)

        results = self.runner.results
        self.assertAlmostEqual(results[0]['PSNR_score'], 30.993823, places=4)
        self.assertAlmostEqual(results[1]['PSNR_score'], 19.393160, places=4)

    def test_run_vmaf_runner_eq_cmd_gamma1d5(self):

        ref_path, dis_path, asset, asset_original = set_default_576_324_videos_for_testing(
        )

        asset.asset_dict['eq_cmd'] = 'gamma=1.5'
        asset_original.asset_dict['eq_cmd'] = 'gamma=1.5'

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

        results = self.runner.results

        self.assertAlmostEqual(
            results[0]['VMAF_integer_feature_vif_scale0_score'],
            0.34796083546749507,
            places=4)
        self.assertAlmostEqual(
            results[0]['VMAF_integer_feature_vif_scale1_score'],
            0.7430727630647906,
            places=4)
        self.assertAlmostEqual(
            results[0]['VMAF_integer_feature_vif_scale2_score'],
            0.8432128968501337,
            places=4)
        self.assertAlmostEqual(
            results[0]['VMAF_integer_feature_vif_scale3_score'],
            0.9003110626539442,
            places=4)
        self.assertAlmostEqual(
            results[0]['VMAF_integer_feature_motion2_score'],
            3.951617145833333,
            places=4)
        self.assertAlmostEqual(results[0]['VMAF_integer_feature_adm2_score'],
                               0.9239987660077826,
                               places=4)

        self.assertAlmostEqual(
            results[1]['VMAF_integer_feature_vif_scale0_score'],
            1.00000001415,
            places=4)
        self.assertAlmostEqual(
            results[1]['VMAF_integer_feature_vif_scale1_score'],
            0.99999972612,
            places=4)
        self.assertAlmostEqual(
            results[1]['VMAF_integer_feature_vif_scale2_score'],
            0.999999465724,
            places=4)
        self.assertAlmostEqual(
            results[1]['VMAF_integer_feature_vif_scale3_score'],
            0.999999399683,
            places=4)
        self.assertAlmostEqual(
            results[1]['VMAF_integer_feature_motion2_score'],
            3.951617145833333,
            places=4)
        self.assertAlmostEqual(results[1]['VMAF_integer_feature_adm2_score'],
                               1.0,
                               places=4)

        with self.assertRaises(KeyError):
            self.assertAlmostEqual(
                results[1]['VMAF_integer_feature_vif_score'], 1.0, places=4)

        with self.assertRaises(KeyError):
            self.assertAlmostEqual(
                results[1]['VMAF_integer_feature_ansnr_score'], 1.0, places=4)

        with self.assertRaises(KeyError):
            self.assertAlmostEqual(
                results[1]['VMAF_integer_feature_motion_score'], 1.0, places=4)

        self.assertAlmostEqual(results[0]['VMAF_score'],
                               72.90549596147889,
                               places=4)
        self.assertAlmostEqual(results[1]['VMAF_score'],
                               99.946416604585025,
                               places=4)
Exemplo n.º 7
0
class QualityRunnerTest(unittest.TestCase):
    def tearDown(self):
        if hasattr(self, 'runner'):
            self.runner.remove_results()
            pass

    def setUp(self):
        self.result_store = FileSystemResultStore()

    def test_run_psnr_runner_with_notyuv_gblur(self):

        ref_path = VmafConfig.test_resource_path("mp4",
                                                 "Seeking_10_288_375.mp4")
        dis_path = VmafConfig.test_resource_path("mp4",
                                                 "Seeking_10_288_375.mp4")
        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={
                          'yuv_type': 'notyuv',
                          'quality_width': 720,
                          'quality_height': 480,
                          'dis_gblur_cmd': 'sigma=0.01:steps=1',
                      })
        self.runner = PsnrQualityRunner([asset],
                                        None,
                                        fifo_mode=True,
                                        delete_workdir=True,
                                        result_store=None)
        self.runner.run()

        results = self.runner.results
        self.assertAlmostEqual(results[0]['PSNR_score'],
                               51.12090432666667,
                               places=4)

    def test_run_vmaf_runner_with_notyuv_gblur(self):

        ref_path = VmafConfig.test_resource_path("mp4",
                                                 "Seeking_30_480_1050.mp4")
        dis_path = VmafConfig.test_resource_path("mp4",
                                                 "Seeking_10_288_375.mp4")
        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={
                          'yuv_type': 'notyuv',
                          'quality_width': 360,
                          'quality_height': 240,
                          'dis_gblur_cmd': 'sigma=0.01:steps=1',
                      })
        self.runner = VmafQualityRunner([asset],
                                        None,
                                        fifo_mode=True,
                                        delete_workdir=True,
                                        result_store=None)
        self.runner.run()

        results = self.runner.results
        self.assertAlmostEqual(results[0]['VMAF_score'],
                               77.28044458354246,
                               places=4)