def test_run_vmaf_fextractor(self): ref_path, dis_path, asset, asset_original = set_default_576_324_videos_for_testing() self.fextractor = VmafFeatureExtractor( [asset, asset_original], None, fifo_mode=True, result_store=None ) self.fextractor.run() results = self.fextractor.results self.assertAlmostEqual(results[0]['VMAF_feature_vif_score'], 0.4460930625, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_motion_score'], 4.04982535417, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_motion2_score'], 3.8953518541666665, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_adm_score'], 0.9345148541666667, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_adm2_score'], 0.9345148541666667, places=4) # at version 0.2.4b (ioannis adm fix), adm and adm2 are now identical self.assertAlmostEqual(results[0]['VMAF_feature_ansnr_score'], 23.5095715208, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_vif_num_score'], 712650.023478, places=0) self.assertAlmostEqual(results[0]['VMAF_feature_vif_den_score'], 1597314.95249, places=0) self.assertAlmostEqual(results[0]['VMAF_feature_adm_num_score'], 371.80645372916666, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_adm_den_score'], 397.83378972916671, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_anpsnr_score'], 34.164776875, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_vif_scale0_score'], 0.363420489439, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_vif_scale1_score'], 0.766647542135, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_vif_scale2_score'], 0.862854666902, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_vif_scale3_score'], 0.915971778036, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_adm_scale0_score'], 0.90791933424090698, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_adm_scale1_score'], 0.8938705209242691, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_adm_scale2_score'], 0.9300123587874962, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_adm_scale3_score'], 0.9649663148179196, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_vif2_score'], 0.72722361912801026, places=4) self.assertAlmostEqual(results[0]['VMAF_feature_adm3_score'], 0.9241841443734412, places=4) self.assertAlmostEqual(results[1]['VMAF_feature_vif_score'], 1.0, places=4) self.assertAlmostEqual(results[1]['VMAF_feature_motion_score'], 4.04982535417, places=4) self.assertAlmostEqual(results[1]['VMAF_feature_motion2_score'], 3.8953518541666665, 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_ansnr_score'], 31.2714392708, places=4) self.assertAlmostEqual(results[1]['VMAF_feature_vif_num_score'], 1597314.86733, places=0) self.assertAlmostEqual(results[1]['VMAF_feature_vif_den_score'], 1597314.95249, places=0) self.assertAlmostEqual(results[1]['VMAF_feature_adm_num_score'], 397.83378972916671, places=4) self.assertAlmostEqual(results[1]['VMAF_feature_adm_den_score'], 397.83378972916671, places=4) self.assertAlmostEqual(results[1]['VMAF_feature_anpsnr_score'], 41.9266444375, places=4) self.assertAlmostEqual(results[1]['VMAF_feature_vif_scale0_score'], 1.0, places=4) self.assertAlmostEqual(results[1]['VMAF_feature_vif_scale1_score'], 1.0, places=4) self.assertAlmostEqual(results[1]['VMAF_feature_vif_scale2_score'], 1.0, places=4) self.assertAlmostEqual(results[1]['VMAF_feature_vif_scale3_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_vif2_score'], 1.0, places=4) self.assertAlmostEqual(results[1]['VMAF_feature_adm3_score'], 1.0, places=4)
def test_run_vmaf_integer_fextractor(self): ref_path, dis_path, asset, asset_original = set_default_576_324_videos_for_testing() self.fextractor = VmafIntegerFeatureExtractor( [asset, asset_original], None, fifo_mode=False, result_store=None ) self.fextractor.run(parallelize=True) results = self.fextractor.results try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_vif_score'], 0.44642331250000006, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_motion_score'], 4.04982535417, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_motion2_score'], 3.8953518541666665, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_adm_score'], 0.9345148541666667, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_adm2_score'], 0.9345148541666667, places=4) # at version 0.2.4b (ioannis adm fix), adm and adm2 are now identical except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_ansnr_score'], 23.5095715208, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_vif_num_score'], 713111.410502125, places=0) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_vif_den_score'], 1597165.5464884583, places=0) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_adm_num_score'], 371.8243668541666, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_adm_den_score'], 397.8567857291667, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_anpsnr_score'], 34.164776875, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_vif_scale0_score'], 0.3636620710647402, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_vif_scale1_score'], 0.7674952820232231, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_vif_scale2_score'], 0.8631077727416296, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_vif_scale3_score'], 0.9157200890843669, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_adm_scale0_score'], 0.90791933424090698, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_adm_scale1_score'], 0.8938705209242691, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_adm_scale2_score'], 0.9300123587874962, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_adm_scale3_score'], 0.9649663148179196, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_vif2_score'], 0.72749630372849, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[0]['VMAF_integer_feature_adm3_score'], 0.9241841443734412, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_vif_score'], 1.0, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_motion_score'], 4.04982535417, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_motion2_score'], 3.8953518541666665, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_adm_score'], 1.0, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_adm2_score'], 1.0, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_ansnr_score'], 31.2714392708, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_vif_num_score'], 1597165.34910075, places=0) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_vif_den_score'], 1597165.5464884583, places=0) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_adm_num_score'], 397.8576817708333, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_adm_den_score'], 397.8567857291667, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_anpsnr_score'], 41.9266444375, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_vif_scale0_score'], 1.0, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_vif_scale1_score'], 1.0, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_vif_scale2_score'], 1.0, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_vif_scale3_score'], 1.0, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_adm_scale0_score'], 1.0, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_adm_scale1_score'], 1.0, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_adm_scale2_score'], 1.0, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_adm_scale3_score'], 1.0, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_vif2_score'], 1.0, places=4) except AssertionError as e: self.verificationErrors.append(str(e)) try: self.assertAlmostEqual(results[1]['VMAF_integer_feature_adm3_score'], 1.0, places=4) except AssertionError as e: self.verificationErrors.append(str(e))
def test_run_vmafrc_compare_directly_with_ossexec_420_8bit(self): ref_path, dis_path, asset, asset_original = set_default_576_324_videos_for_testing( ) self.runner = VmafrcQualityRunner( [asset, asset_original], None, fifo_mode=True, delete_workdir=True, result_store=None, optional_dict={ 'float_psnr': True, 'float_ssim': True, 'float_ms_ssim': True, 'psnr': True, 'ssim': True, 'ms_ssim': False, }) self.runner.run(parallelize=True) results_rc = self.runner.results self.runner = VmafossExecQualityRunner( [asset, asset_original], None, fifo_mode=True, delete_workdir=True, result_store=None, ) self.runner.run(parallelize=True) results = self.runner.results self.assertAlmostEqual(results_rc[0]['VMAFRC_vif_scale0_score'], results[0]['VMAFOSSEXEC_vif_scale0_score'], places=5) self.assertAlmostEqual(results_rc[0]['VMAFRC_vif_scale1_score'], results[0]['VMAFOSSEXEC_vif_scale1_score'], places=5) self.assertAlmostEqual(results_rc[0]['VMAFRC_vif_scale2_score'], results[0]['VMAFOSSEXEC_vif_scale2_score'], places=5) self.assertAlmostEqual(results_rc[0]['VMAFRC_vif_scale3_score'], results[0]['VMAFOSSEXEC_vif_scale3_score'], places=5) self.assertAlmostEqual(results_rc[0]['VMAFRC_motion2_score'], results[0]['VMAFOSSEXEC_motion2_score'], places=5) self.assertAlmostEqual(results_rc[0]['VMAFRC_adm2_score'], results[0]['VMAFOSSEXEC_adm2_score'], places=5) self.assertAlmostEqual(results_rc[0]['VMAFRC_float_psnr_score'], results[0]['VMAFOSSEXEC_psnr_score'], places=4) self.assertAlmostEqual(results_rc[0]['VMAFRC_float_ssim_score'], results[0]['VMAFOSSEXEC_ssim_score'], places=5) self.assertAlmostEqual(results_rc[0]['VMAFRC_float_ms_ssim_score'], results[0]['VMAFOSSEXEC_ms_ssim_score'], places=5) self.assertAlmostEqual(results_rc[0]['VMAFRC_psnr_y_score'], results[0]['VMAFOSSEXEC_psnr_score'], places=4) self.assertAlmostEqual(results_rc[0]['VMAFRC_psnr_cb_score'], 38.4494410625, places=4) self.assertAlmostEqual(results_rc[0]['VMAFRC_psnr_cr_score'], 40.99191027083334, places=4) self.assertAlmostEqual(results_rc[0]['VMAFRC_ssim_score'], 0.8613860416666667, places=5) self.assertAlmostEqual(results_rc[1]['VMAFRC_vif_scale0_score'], results[1]['VMAFOSSEXEC_vif_scale0_score'], places=5) self.assertAlmostEqual(results_rc[1]['VMAFRC_vif_scale1_score'], results[1]['VMAFOSSEXEC_vif_scale1_score'], places=5) self.assertAlmostEqual(results_rc[1]['VMAFRC_vif_scale2_score'], results[1]['VMAFOSSEXEC_vif_scale2_score'], places=5) self.assertAlmostEqual(results_rc[1]['VMAFRC_vif_scale3_score'], results[1]['VMAFOSSEXEC_vif_scale3_score'], places=5) self.assertAlmostEqual(results_rc[1]['VMAFRC_motion2_score'], results[1]['VMAFOSSEXEC_motion2_score'], places=5) self.assertAlmostEqual(results_rc[1]['VMAFRC_adm2_score'], results[1]['VMAFOSSEXEC_adm2_score'], places=5) self.assertAlmostEqual(results_rc[1]['VMAFRC_float_psnr_score'], results[1]['VMAFOSSEXEC_psnr_score'], places=4) self.assertAlmostEqual(results_rc[1]['VMAFRC_float_ssim_score'], results[1]['VMAFOSSEXEC_ssim_score'], places=5) self.assertAlmostEqual(results_rc[1]['VMAFRC_float_ms_ssim_score'], results[1]['VMAFOSSEXEC_ms_ssim_score'], places=5) self.assertAlmostEqual(results_rc[1]['VMAFRC_psnr_y_score'], results[1]['VMAFOSSEXEC_psnr_score'], places=4) self.assertAlmostEqual(results_rc[1]['VMAFRC_psnr_cb_score'], 60.0, places=4) self.assertAlmostEqual(results_rc[1]['VMAFRC_psnr_cr_score'], 60.0, places=4) self.assertAlmostEqual(results_rc[1]['VMAFRC_ssim_score'], 1.0, places=5) self.assertAlmostEqual(results_rc[0]['VMAFRC_score'], results[0]['VMAFOSSEXEC_score'], places=4) self.assertAlmostEqual(results_rc[1]['VMAFRC_score'], results[1]['VMAFOSSEXEC_score'], places=4)
def test_run_vmafrc_runner_matched_to_vmafossexec(self): ref_path, dis_path, asset, asset_original = set_default_576_324_videos_for_testing( ) self.runner = VmafrcQualityRunner([asset, asset_original], None, fifo_mode=True, delete_workdir=True, result_store=None, optional_dict={ 'float_psnr': True, 'float_ssim': True, 'float_ms_ssim': True, }) self.runner.run(parallelize=True) results = self.runner.results self.assertAlmostEqual(results[0]['VMAFRC_vif_scale0_score'], 0.3634208125, places=4) self.assertAlmostEqual(results[0]['VMAFRC_vif_scale1_score'], 0.7666474166666667, places=4) self.assertAlmostEqual(results[0]['VMAFRC_vif_scale2_score'], 0.8628533333333334, places=4) self.assertAlmostEqual(results[0]['VMAFRC_vif_scale3_score'], 0.9159719583333334, places=4) self.assertAlmostEqual(results[0]['VMAFRC_motion2_score'], 3.895352291666667, places=4) self.assertAlmostEqual(results[0]['VMAFRC_adm2_score'], 0.9345877291666667, places=4) self.assertAlmostEqual(results[0]['VMAFRC_float_psnr_score'], 30.7550666667, places=4) self.assertAlmostEqual(results[0]['VMAFRC_float_ssim_score'], 0.86322654166666657, places=4) self.assertAlmostEqual(results[0]['VMAFRC_float_ms_ssim_score'], 0.9632406874999999, places=4) self.assertAlmostEqual(results[1]['VMAFRC_vif_scale0_score'], 1.0, places=4) self.assertAlmostEqual(results[1]['VMAFRC_vif_scale1_score'], 0.9999998541666666, places=4) self.assertAlmostEqual(results[1]['VMAFRC_vif_scale2_score'], 0.9999996041666667, places=4) self.assertAlmostEqual(results[1]['VMAFRC_vif_scale3_score'], 0.9999991458333334, places=4) self.assertAlmostEqual(results[1]['VMAFRC_motion2_score'], 3.895352291666667, places=4) self.assertAlmostEqual(results[1]['VMAFRC_adm2_score'], 1.0, places=4) self.assertAlmostEqual(results[1]['VMAFRC_float_psnr_score'], 60.0, places=4) self.assertAlmostEqual(results[1]['VMAFRC_float_ssim_score'], 1.0, places=4) self.assertAlmostEqual(results[1]['VMAFRC_float_ms_ssim_score'], 1.0, places=4) self.assertAlmostEqual(results[0]['VMAFRC_score'], 76.69926875, places=4) self.assertAlmostEqual(results[1]['VMAFRC_score'], 99.94641666666666, places=4)
def test_run_vmafrc_runner_n_threads(self): ref_path, dis_path, asset, asset_original = set_default_576_324_videos_for_testing( ) self.runner = VmafrcQualityRunner( [asset, asset_original], None, fifo_mode=True, delete_workdir=True, result_store=None, optional_dict={ 'float_psnr': True, 'float_ssim': True, 'float_ms_ssim': True, 'psnr': True, 'ssim': True, 'ms_ssim': False, # TODO: enable fixed_ms_ssim 'n_threads': 4, }) self.runner.run(parallelize=True) results = self.runner.results self.assertAlmostEqual(results[0]['VMAFRC_vif_scale0_score'], 0.3634208125, places=4) self.assertAlmostEqual(results[0]['VMAFRC_vif_scale1_score'], 0.7666474166666667, places=4) self.assertAlmostEqual(results[0]['VMAFRC_vif_scale2_score'], 0.8628533333333334, places=4) self.assertAlmostEqual(results[0]['VMAFRC_vif_scale3_score'], 0.9159719583333334, places=4) self.assertAlmostEqual(results[0]['VMAFRC_motion2_score'], 3.895352291666667, places=4) self.assertAlmostEqual(results[0]['VMAFRC_adm2_score'], 0.9345877291666667, places=4) self.assertAlmostEqual(results[0]['VMAFRC_float_psnr_score'], 30.7550666667, places=4) self.assertAlmostEqual(results[0]['VMAFRC_float_ssim_score'], 0.86322654166666657, places=4) self.assertAlmostEqual(results[0]['VMAFRC_float_ms_ssim_score'], 0.9632406874999999, places=4) self.assertAlmostEqual(results[0]['VMAFRC_psnr_y_score'], 30.755063979166668, places=4) self.assertAlmostEqual(results[0]['VMAFRC_psnr_cb_score'], 38.4494410625, places=4) self.assertAlmostEqual(results[0]['VMAFRC_psnr_cr_score'], 40.99191027083334, places=4) self.assertAlmostEqual(results[0]['VMAFRC_ssim_score'], 0.8613860416666667, places=4) self.assertAlmostEqual(results[1]['VMAFRC_vif_scale0_score'], 1.0, places=4) self.assertAlmostEqual(results[1]['VMAFRC_vif_scale1_score'], 0.9999998541666666, places=4) self.assertAlmostEqual(results[1]['VMAFRC_vif_scale2_score'], 0.9999996041666667, places=4) self.assertAlmostEqual(results[1]['VMAFRC_vif_scale3_score'], 0.9999991458333334, places=4) self.assertAlmostEqual(results[1]['VMAFRC_motion2_score'], 3.895352291666667, places=4) self.assertAlmostEqual(results[1]['VMAFRC_adm2_score'], 1.0, places=4) self.assertAlmostEqual(results[1]['VMAFRC_float_psnr_score'], 60.0, places=4) self.assertAlmostEqual(results[1]['VMAFRC_float_ssim_score'], 1.0, places=4) self.assertAlmostEqual(results[1]['VMAFRC_float_ms_ssim_score'], 1.0, places=4) self.assertAlmostEqual(results[1]['VMAFRC_psnr_y_score'], 60.0, places=4) self.assertAlmostEqual(results[1]['VMAFRC_psnr_cb_score'], 60.0, places=4) self.assertAlmostEqual(results[1]['VMAFRC_psnr_cr_score'], 60.0, places=4) self.assertAlmostEqual(results[1]['VMAFRC_ssim_score'], 1.0, places=4) self.assertAlmostEqual(results[0]['VMAFRC_score'], 76.69926875, places=4) self.assertAlmostEqual(results[1]['VMAFRC_score'], 99.94641666666666, places=4)
def setUp(self): super().setUp() ref_path, dis_path, asset, asset_original = set_default_576_324_videos_for_testing( ) self.data = ([30.755063979166664, PsnrQualityRunner, asset, None], )