#!/usr/bin/env cached-nix-shell #!nix-shell -i python3 -p "python3.withPackages(ps: with ps; [ ps.pandas ps.numpy ps.tabulate ])" import pandas as pd import numpy as np import sys from pprint import pprint from tabulate import tabulate def process_raw_line(line): fields = line.rstrip().split(" ") fields = [field.split(":")[-1] for field in fields] fields[5] = fields[5][1:-1] fields[0] = int(fields[0]) fields[1:] = list(map(np.float, fields[1:])) return fields with open(sys.argv[1], "r") as f: data = list(map(process_raw_line, f.readlines())) df = pd.DataFrame(data) df.columns = ["frame", "Y", "U", "V", "All", "dB"] df["inv"] = [1 - value for value in df["All"]] print(f'Mean overall SSIM: {df["All"].mean()}') print(f'Median overall SSIM: {df["All"].median()}') print(f'Frame with worst SSIM: {df.idxmin()["All"]+1}') print(f'Frame with best SSIM: {df.idxmax()["All"]+1}') print( tabulate( [ (key, value * 100) for key, value in [ ["best", df["All"].max()], [50, 1 - df["inv"].quantile(0.50)], [66.6, 1 - df["inv"].quantile(0.666)], [75, 1 - df["inv"].quantile(0.75)], [80, 1 - df["inv"].quantile(0.80)], [90, 1 - df["inv"].quantile(0.90)], [95, 1 - df["inv"].quantile(0.95)], [98, 1 - df["inv"].quantile(0.98)], [99, 1 - df["inv"].quantile(0.99)], [99.9, 1 - df["inv"].quantile(0.999)], [100, df["All"].min()], ] ], headers=["% Frames", "≥ SSIM"], ) )