Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/env python3
filename = 'out.txt'
PredMode = {1:'inter', 2:'intra', 5:'skip'}
CUData = {
'addr' :int,
'depth' :int,
'f_intra' :int,
'f_inter' :int,
'f_MVD' :int,
'isLeaf' :lambda x: bool(int(x)),
'predMode':lambda x: PredMode[int(x[0])]}
# Parse data
data = []
import os
with open(os.path.join(os.path.dirname(__file__), filename)) as f:
for line in f.readlines():
tokens = line.replace(':',' ').split()
cu = {k:CUData[k](v) for k, v in zip(tokens[0::2], tokens[1::2])}
data.append(cu)
# Analyse
count = dict(zip(PredMode.values(), [0]*len(PredMode)))
errors = 0
for cu in data:
addr = cu['addr']
depth = cu['depth']
isLeaf = cu['isLeaf']
predMode = cu['predMode']
count[predMode] += 1
if isLeaf and depth > 0 and predMode != 'skip':
f_intra = cu['f_intra']
f_inter = cu['f_inter']
f_MVD = cu['f_MVD']
df_ratio = (f_intra - f_inter) / max(f_intra, f_inter)
if (predMode == 'intra' and df_ratio > 0) or (predMode == 'inter' and df_ratio < 0):
print('df_ratio: {:6.2f}\tf_MVD: {:6}\tpredMode: {}'.format(df_ratio, f_MVD, predMode))
errors += 1
print('errors: {} ({:.0f})%'.format(errors, 100*errors/(count['intra'] + count['inter'])))
print(count)