scripts/ssim-stats.py

44 lines
1.4 KiB
Python
Executable File

#!/usr/bin/env python3
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']
))