-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcreate_shot_boundaries.py
60 lines (49 loc) · 1.84 KB
/
create_shot_boundaries.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
from Segmentation import Segment
import numpy as np
from matplotlib import pyplot as plt
import scipy.cluster.hierarchy as hcluster
def run(path_to_frames_directory):
segment1 = Segment.Segment(path_to_frames_directory=path_to_frames_directory,
sampling_rate=25)
forward_dict = segment1.get_shots_forward()
segment2 = Segment.Segment(path_to_frames_directory=path_to_frames_directory,
sampling_rate=25)
backward_dict = segment2.get_shots_backward()
data = []
for frame in forward_dict:
x = frame.get_frame_no()
y = frame.get_correlation_val()
coordinate = [x, y]
data.append(coordinate)
for frame in forward_dict:
x = frame.get_frame_no()
y = frame.get_correlation_val()
coordinate = [x, y]
data.append(coordinate)
data_array = np.array(data)
x = data_array[:, :1]
y = data_array[:, 1:2]
thresh = 25
clusters = hcluster.fclusterdata(data_array, thresh, criterion="distance")
plt.scatter(*np.transpose(data_array), c=clusters)
plt.show()
cluster_dict = {}
for i in range(clusters.max()):
cluster_dict[str(i + 1)] = []
for i, val in enumerate(clusters):
print(str(val))
temp_list = cluster_dict[str(val)]
temp_list.append(i)
cluster_dict[str(val)] = temp_list
shot_boundaries = []
for key in cluster_dict.keys():
minimum_frame_index = data_array[cluster_dict[key][0]][0]
minimum_cor_value = data_array[cluster_dict[key][0]][1]
for val in cluster_dict[key]:
if minimum_cor_value > data_array[val][1]:
minimum_frame_index = data_array[val][0]
shot_boundaries.append(minimum_frame_index)
shot_boundaries.sort()
return shot_boundaries
if __name__ == "__main__":
run()