forked from arkajitd-hub/Crowd-Flow-Simulation
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathskip_interpolate.py
More file actions
68 lines (53 loc) · 2.46 KB
/
skip_interpolate.py
File metadata and controls
68 lines (53 loc) · 2.46 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
import os
import pandas as pd
# === Step 1: Frame Skipping ===
def skip_frames(input_folder, output_folder, skip_interval=5):
os.makedirs(output_folder, exist_ok=True)
for file_name in os.listdir(input_folder):
if file_name.endswith('.txt'):
input_path = os.path.join(input_folder, file_name)
output_path = os.path.join(output_folder, file_name.replace('.txt', '_skipped.txt'))
with open(input_path, 'r') as f_in, open(output_path, 'w') as f_out:
for line in f_in:
parts = line.strip().split(',')
if len(parts) >= 4:
frame = int(parts[0])
if frame % skip_interval == 0:
f_out.write(line)
# === Step 2: Interpolation ===
def interpolate_frames(skipped_folder, interpolated_folder, max_frame=None):
os.makedirs(interpolated_folder, exist_ok=True)
for file_name in os.listdir(skipped_folder):
if file_name.endswith('_skipped.txt'):
input_path = os.path.join(skipped_folder, file_name)
output_path = os.path.join(interpolated_folder, file_name.replace('_skipped.txt', '_interpolated.txt'))
# Read data
df = pd.read_csv(input_path, header=None)
df.columns = ['frame', 'id', 'x', 'y']
# Set multi-index
df.set_index(['id', 'frame'], inplace=True)
# Reindex: fill in missing frames
new_index = []
for obj_id in df.index.get_level_values(0).unique():
frames = df.loc[obj_id].index
if max_frame is None:
max_f = frames.max()
else:
max_f = max_frame
new_frames = list(range(0, max_f + 1))
new_index.extend([(obj_id, f) for f in new_frames])
df = df.reindex(new_index)
# Interpolate
df[['x', 'y']] = df[['x', 'y']].interpolate(method='linear')
# Drop completely NaN ids (if any)
df = df.dropna()
# Save back
df = df.reset_index()
df.to_csv(output_path, index=False, header=False)
# === Usage ===
if __name__ == "__main__":
input_folder = './annotations_with_ids'
skipped_folder = './output/skipped'
interpolated_folder = './output/interpolated'
skip_frames(input_folder, skipped_folder, skip_interval=5)
interpolate_frames(skipped_folder, interpolated_folder)