-
Notifications
You must be signed in to change notification settings - Fork 0
/
MakePairData.py
104 lines (80 loc) · 3.22 KB
/
MakePairData.py
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
import os
import numpy as np
from glob import glob
import re
import shutil
import random
import time
from CutFivesec import CutFivesec
###ペアのデータを作成する工程###
#source_dir_path: データが入っているディレクトリのパス
# (データはすでに編集されて、wide/verchが混合してるもの)
#trans_dir_data : データを移す場所
# ├ /wide : wideのデータセット
# ├ /verch : verchのデータセット
# ├ /targets : 正解ラベル
def MakePairData(source_dir_path, trans_dir_path):
start = time.time()
# ソースディレクトリ内の全ての動画のパスを読み込んで、ソート
# reの[]内は例えば"10.mp4"の"10"を抽出したいのでlen-2にしている
trans_paths = sorted(glob(source_dir_path + "/**.mp4"), key=lambda s: int(re.findall(r'\d+', s)[len(re.findall(r'\d+', s))-2]))
#print(trans_paths)
#wide(=verch)の動画数
num = len(trans_paths)//2
#print("video_num:{}*2".format(num))
wide_paths = []
verch_paths = []
#全動画のパスをwide,verchに分ける
for path in trans_paths:
#wide
if "v" not in os.path.basename(path):
wide_paths.append(path)
#verch
else:
verch_paths.append(path)
#print("wide:{}, verch:{}".format(len(wide_paths),len(verch_paths)))
# verchの操作
# 巡回置換する動画の番号リストをランダムで作成
change_list = sorted(random.sample([i for i in range(num)], num//2))
# 先頭をpopして、それを末尾にappendすれば巡回置換
tmp = change_list.pop(0)
change_list.append(tmp)
#正解ラベル
targets = []
#巡回置換しない番号を挿入
for i in range(num):
if i not in change_list:
change_list.insert(i, i)
targets.append(1)
else:
targets.append(0)
#print(change_list)
#print(targets)
#verchのパスを並び替え(一応listに直した)
verch_paths = list(np.array(verch_paths)[change_list])
#名前は長県戦_1Qなどにする
Q = os.path.basename(source_dir_path)
dir = os.path.dirname(source_dir_path)
match = os.path.basename(dir)
filename = match + "_" + Q
print(filename)
#150フレームに切ったものを保存
CutFivesec(wide_paths, trans_dir_path + "/wide", filename)
CutFivesec(verch_paths, trans_dir_path + "/verch", filename)
#一応wideとverchのパスをtxtに保存
np.savetxt(trans_dir_path + "/wide/" + filename + ".txt", np.array(wide_paths), fmt="%s")
np.savetxt(trans_dir_path + "/verch/" + filename + ".txt", np.array(verch_paths), fmt="%s")
#正解ラベルを保存
np.array(targets, dtype="uint8")
np.save(trans_dir_path + "/targets/" + filename, targets)
np.savetxt(trans_dir_path + "/targets/" + filename + ".txt", targets, fmt="%s")
end = time.time()
print("time:{}s/1video".format((end-start)/(num*2)))
if __name__ == '__main__':
# フォルダパス指定
folder_path = "D:/2018mp4/"
output_path = "D:/VE/TRANS_DATA"
folders = glob(folder_path + "**/**")
print(folders)
for folder in folders:
MakePairData(folder, output_path)