Repository navigation
Expand file tree
/
Copy pathplot_glaph.py
More file actions
executable file
·105 lines (82 loc) · 3.77 KB
/
Copy pathplot_glaph.py
File metadata and controls
executable file
·105 lines (82 loc) · 3.77 KB
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import pandas as pd
import matplotlib.pyplot as plt
from scipy import interpolate
import numpy as np
from multiprocessing import Pool
# columnsに検出の対象にする値を追加.face_id, timestamp, successは必須.
# Openfaceの出力CSVは列によって先頭に空白文字を含むことに注意.ミスが起きやすいので,定数定義で対応を取ると良い.
# 【改善案】csvcolumns.pyで全ての列名とその番号を保持,呼び出しプログラム側で引数を変えるだけでできるようにしたい.
columns = [" face_id", " timestamp", " success", " AU01_r", " AU02_r", " AU04_r", " AU05_r", " AU06_r", " AU07_r",
" AU09_r", " AU10_r", " AU12_r", " AU14_r", " AU15_r", " AU17_r", " AU20_r", " AU23_r", " AU25_r", " AU26_r", " AU45_r"]
FACE_ID = 0
TIMESTAMP = 1
SUCCESS = 2
AU01_R = 3
AU02_R = 4
AU04_R = 5
AU05_R = 6
AU06_R = 7
AU07_R = 8
AU09_R = 9
AU10_R = 10
AU12_R = 11
AU14_R = 12
AU15_R = 13
AU17_R = 14
AU20_R = 15
AU23_R = 16
AU25_R = 17
AU26_R = 18
AU45_R = 19
# colorlist = ['#ff7f7f', '#ff7fbf', '#ff7fff', '#bf7fff', '#7f7fff', '#7fbfff', '#7fffff', '#7fffbf', '#7fff7f', '#bfff7f', '#ffff7f', '#ffbf7f', '#ff0000', '#ff00ff', '#7f00ff', '#007fff', '#00ff7f']
colorlist = ['#ff0000', '#0000ff']
class NoSuccessValue(Exception):
pass
def PlotGlaph(csv: str, save_dir: str, save_name: str):
df = pd.read_csv(csv)
data = df.loc[:, columns]
target_face_id = get_mode_face_id(data) # 最も多く登場するface_idを取得する
# 最も多く登場する顔のうち,処理に成功しているものを抽出
target = []
for line in data.values:
# if line[FACE_ID] == target_face_id and line[SUCCESS] == 1:
if line[FACE_ID] == target_face_id:
target.append(line)
if len(target) == 0:
raise NoSuccessValue
df = pd.DataFrame(target, columns=columns)
# npdata[0]:timestamp, npdata[1]:AU06, npdata[2]:AU12
# npdata = df[[columns[TIMESTAMP], columns[AU01_R], columns[AU02_R], columns[AU04_R], columns[AU05_R], columns[AU06_R], columns[AU07_R], columns[AU09_R], columns[AU10_R],
# columns[AU12_R], columns[AU14_R], columns[AU15_R], columns[AU17_R], columns[AU20_R], columns[AU23_R], columns[AU25_R], columns[AU26_R], columns[AU45_R]]].values.T
npdata = df[[columns[TIMESTAMP], columns[AU06_R], columns[AU12_R]]].values.T
x_latent = np.linspace(min(npdata[0]), max(npdata[0]), 100) # 保管用のX軸データ
liners = [interpolate.interp1d(x=npdata[0], y=npdata[i + 1]) for i in range(2)] # 定数はやめたい.npdataのサイズ-1
p = Pool(1)
p.map(plot, [[x_latent, liners, save_dir, save_name]])
p.close()
def get_mode_face_id(data):
faceid_cnt = []
for _ in range(data[columns[FACE_ID]].max() + 1):
faceid_cnt.append(0)
for line in data.values:
faceid_cnt[int(line[FACE_ID])] += int(line[SUCCESS])
return faceid_cnt.index(max(faceid_cnt))
def plot(args):
x_latent, liners, save_dir, save_name = args
fig = plt.figure(figsize=[16.18, 10])
_i = 0
tmp_label = ["AU06", "AU12"]
for liner in liners:
# plt.plot(x_latent, liner(x_latent), color=colorlist[_i], label=columns[_i + 3]) # npdataの変更とラベルが対応できていない.
plt.plot(x_latent, liner(x_latent), color=colorlist[_i], label=tmp_label[_i])
_i += 1
plt.grid()
plt.legend()
# plt.show()
fig.savefig(save_dir + "/" + save_name + ".png")
if __name__ == '__main__':
# debug
csvpath = "/Volumes/GoogleDrive/マイドライブ/NU/cmc/work/210926/デモ用AIST/f01_hap_0_output/f01_hap_0/f01_hap_0.csv"
save_dir = "/Volumes/GoogleDrive/マイドライブ/NU/cmc/work/210926"
save_name = "demo"
PlotGlaph(csvpath, save_dir, save_name)