Kanompung commited on
Commit
d7cf350
·
verified ·
1 Parent(s): 164ac4b

Upload 14 files

Browse files
.env ADDED
@@ -0,0 +1 @@
 
 
1
+ API_KEY=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
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ .env
.gradio/certificate.pem ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
3
+ TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
4
+ cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
5
+ WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
6
+ ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
7
+ MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
8
+ h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
9
+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
10
+ A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
11
+ T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
12
+ B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
13
+ B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
14
+ KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
15
+ OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
16
+ jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
17
+ qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
18
+ rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
19
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
20
+ hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
21
+ ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
22
+ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
23
+ NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
24
+ ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
25
+ TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
26
+ jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
27
+ oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
28
+ 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
29
+ mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
30
+ emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
31
+ -----END CERTIFICATE-----
README.md CHANGED
@@ -1,12 +1,2 @@
1
- ---
2
- title: Unicorm
3
- emoji: 🌍
4
- colorFrom: red
5
- colorTo: blue
6
- sdk: gradio
7
- sdk_version: 5.34.2
8
- app_file: app.py
9
- pinned: false
10
- ---
11
-
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
+ # EXP-Unicorn-Hack7
2
+ เราจะไปตั้งหัวแถวใหม่กันครับ
 
 
 
 
 
 
 
 
 
 
__pycache__/console.cpython-312.pyc ADDED
Binary file (3.75 kB). View file
 
backend/__pycache__/app.cpython-313.pyc ADDED
Binary file (25.5 kB). View file
 
backend/app.py ADDED
@@ -0,0 +1,402 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import cv2
3
+ import numpy as np
4
+ import torch
5
+ from torch.utils.data import Dataset
6
+ from transformers import AutoImageProcessor, TimesformerForVideoClassification
7
+ import os
8
+ import logging
9
+ from fastapi import FastAPI, File, UploadFile, HTTPException, BackgroundTasks
10
+ from pydantic import BaseModel
11
+ from typing import List, Dict
12
+ import joblib
13
+ import torch.nn as nn
14
+ import tempfile
15
+ from datetime import datetime
16
+ import torch.optim as optim
17
+ from torch.cuda.amp import autocast
18
+ import hashlib
19
+
20
+ # Set up logging
21
+ logging.basicConfig(level=logging.INFO)
22
+ logger = logging.getLogger(__name__)
23
+
24
+ # Configuration
25
+ CONFIG = {
26
+ 'img_height': 224,
27
+ 'img_width': 224,
28
+ 'num_frames': 4, # Reduced from 8 to 4
29
+ 'window_seconds': 3.0,
30
+ 'cache_dir': './preprocessed_cache',
31
+ 'feedback_dir': './feedback_videos',
32
+ 'feedback_csv': 'feedback.csv',
33
+ }
34
+
35
+ # Action columns
36
+ ACTION_COLS = ['Advancing', 'Retreating', 'Enclosing', 'Spreading', 'Rising',
37
+ 'Descending', 'Directing', 'Indirecting', 'Increasing Pressure',
38
+ 'Decreasing Pressure', 'Acceleration', 'Decelerating']
39
+
40
+ # Action pairs for constraint enforcement
41
+ action_pairs = [
42
+ ('Advancing', 'Retreating'),
43
+ ('Enclosing', 'Spreading'),
44
+ ('Rising', 'Descending'),
45
+ ('Directing', 'Indirecting'),
46
+ ('Increasing Pressure', 'Decreasing Pressure'),
47
+ ('Acceleration', 'Decelerating')
48
+ ]
49
+
50
+ # Model definition
51
+ class TwoStreamTimeSformer(nn.Module):
52
+ def __init__(self, num_labels):
53
+ super(TwoStreamTimeSformer, self).__init__()
54
+ self.rgb_model = TimesformerForVideoClassification.from_pretrained(
55
+ "facebook/timesformer-base-finetuned-k400", num_labels=num_labels, ignore_mismatched_sizes=True
56
+ )
57
+ self.flow_model = TimesformerForVideoClassification.from_pretrained(
58
+ "facebook/timesformer-base-finetuned-k400", num_labels=num_labels, ignore_mismatched_sizes=True
59
+ )
60
+ self.fusion = nn.Linear(num_labels * 2, num_labels)
61
+
62
+ def forward(self, rgb_inputs, flow_inputs):
63
+ rgb_logits = self.rgb_model(rgb_inputs).logits
64
+ flow_logits = self.flow_model(flow_inputs).logits
65
+ fused = torch.cat([rgb_logits, flow_logits], dim=-1)
66
+ return self.fusion(fused)
67
+
68
+ def parse_timestamp(time_str):
69
+ try:
70
+ time_str = time_str.strip()
71
+ if len(time_str) < 4:
72
+ time_str = '0' * (4 - len(time_str)) + time_str
73
+ minutes = int(time_str[:-2])
74
+ seconds = int(time_str[-2:])
75
+ return minutes * 60 + seconds
76
+ except ValueError as e:
77
+ logger.error(f"Invalid timestamp format: {time_str}")
78
+ raise ValueError(f"Invalid timestamp format: {time_str}")
79
+
80
+ def get_video_hash(video_bytes):
81
+ return hashlib.md5(video_bytes).hexdigest()
82
+
83
+ def preprocess_video(video_bytes, timestamp_seconds, image_processor, num_frames=CONFIG['num_frames'], window_seconds=CONFIG['window_seconds']):
84
+ # Save video bytes to a temporary file
85
+ with tempfile.NamedTemporaryFile(delete=False, suffix='.mp4') as tmp:
86
+ tmp.write(video_bytes)
87
+ video_path = tmp.name
88
+
89
+ try:
90
+ cap = cv2.VideoCapture(video_path)
91
+ if not cap.isOpened():
92
+ logger.error(f"Failed to open video at {video_path}")
93
+ raise ValueError("Cannot open video file")
94
+
95
+ fps = cap.get(cv2.CAP_PROP_FPS)
96
+ frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
97
+ duration = frame_count / fps if fps > 0 else 0
98
+ if timestamp_seconds < 0 or timestamp_seconds > duration:
99
+ logger.warning(f"Timestamp {timestamp_seconds}s out of range for video duration {duration}s")
100
+ raise ValueError(f"Timestamp {timestamp_seconds}s out of range (duration: {duration}s)")
101
+
102
+ center_frame = int(timestamp_seconds * fps)
103
+ window_frames = int(window_seconds * fps)
104
+ start_frame = max(0, center_frame - window_frames // 2)
105
+ end_frame = min(frame_count - 1, center_frame + window_frames // 2)
106
+ frames_rgb = []
107
+ frames_flow = []
108
+ target_frames = np.linspace(start_frame, end_frame, num_frames, dtype=int).tolist()
109
+
110
+ prev_gray = None
111
+ all_flows = []
112
+ for idx in target_frames:
113
+ cap.set(cv2.CAP_PROP_POS_FRAMES, idx)
114
+ ret, frame = cap.read()
115
+ if ret:
116
+ frame = cv2.resize(frame, (CONFIG['img_width'], CONFIG['img_height']))
117
+ frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
118
+ frames_rgb.append(frame_rgb)
119
+ gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
120
+ if prev_gray is not None:
121
+ flow = cv2.calcOpticalFlowFarneback(prev_gray, gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
122
+ flow = cv2.normalize(flow, None, 0, 255, cv2.NORM_MINMAX).astype(np.float32) / 255.0
123
+ all_flows.append(flow)
124
+ prev_gray = gray
125
+ else:
126
+ logger.warning(f"Failed to read frame {idx}")
127
+
128
+ # Pad if necessary
129
+ if len(frames_rgb) < num_frames:
130
+ frames_rgb.extend([frames_rgb[-1].copy() if frames_rgb else np.zeros((CONFIG['img_height'], CONFIG['img_width'], 3), dtype=np.uint8)] * (num_frames - len(frames_rgb)))
131
+ all_flows.extend([np.zeros((CONFIG['img_height'], CONFIG['img_width'], 2), dtype=np.float32)] * (num_frames - len(all_flows)))
132
+
133
+ frames_rgb = frames_rgb[:num_frames]
134
+ frames_flow = np.stack(all_flows, axis=0) if all_flows else np.zeros((num_frames, CONFIG['img_height'], CONFIG['img_width'], 2), dtype=np.float32)
135
+ if len(frames_flow) < num_frames:
136
+ frames_flow = np.pad(frames_flow, ((0, num_frames - len(frames_flow)), (0, 0), (0, 0), (0, 0)), mode='edge')
137
+ frames_flow = frames_flow[:num_frames]
138
+
139
+ inputs_rgb = image_processor(frames_rgb, return_tensors="pt")['pixel_values'].squeeze(0)
140
+
141
+ flow_magnitude = np.linalg.norm(frames_flow, axis=3)
142
+ flow_angle = np.arctan2(frames_flow[:, :, :, 1], frames_flow[:, :, :, 0])
143
+ frames_flow = np.stack([flow_magnitude, flow_angle, np.zeros_like(flow_magnitude)], axis=1)
144
+ frames_flow = np.clip(frames_flow, 0, 1) * 255.0
145
+ frames_flow = frames_flow.astype(np.uint8)
146
+
147
+ flow_images = [frames_flow[i].transpose(1, 2, 0) for i in range(frames_flow.shape[0])]
148
+ inputs_flow = image_processor(flow_images, return_tensors="pt")['pixel_values'].squeeze(0)
149
+
150
+ return inputs_rgb, inputs_flow
151
+
152
+ finally:
153
+ cap.release()
154
+ os.unlink(video_path)
155
+
156
+ async def preprocess_video_async(video_bytes, timestamp_seconds, image_processor, cache_key):
157
+ cache_path = os.path.join(CONFIG['cache_dir'], f"{cache_key}.pkl")
158
+ os.makedirs(CONFIG['cache_dir'], exist_ok=True)
159
+
160
+ if os.path.exists(cache_path):
161
+ logger.info(f"Loading cached inputs from {cache_path}")
162
+ return joblib.load(cache_path)
163
+
164
+ inputs_rgb, inputs_flow = preprocess_video(video_bytes, timestamp_seconds, image_processor)
165
+ joblib.dump((inputs_rgb, inputs_flow), cache_path)
166
+ logger.info(f"Saved preprocessed inputs to {cache_path}")
167
+ return inputs_rgb, inputs_flow
168
+
169
+ def check_label_constraints(preds, action_pairs, action_cols):
170
+ violations = []
171
+ for action1, action2 in action_pairs:
172
+ idx1 = action_cols.index(action1)
173
+ idx2 = action_cols.index(action2)
174
+ val1 = preds[idx1]
175
+ val2 = preds[idx2]
176
+ if val1 == 1 and val2 == 1:
177
+ violations.append((action1, action2, val1, val2))
178
+ return violations
179
+
180
+ def enforce_constraints(preds, probs, action_pairs, action_cols):
181
+ adjusted_preds = preds.copy()
182
+ violations = check_label_constraints(preds, action_pairs, action_cols)
183
+ for action1, action2, _, _ in violations:
184
+ idx1 = action_cols.index(action1)
185
+ idx2 = action_cols.index(action2)
186
+ prob1 = probs[idx1]
187
+ prob2 = probs[idx2]
188
+ if prob1 >= prob2:
189
+ adjusted_preds[idx2] = 0
190
+ else:
191
+ adjusted_preds[idx1] = 0
192
+ return adjusted_preds
193
+
194
+ def validate_feedback_actions(actions: Dict[str, int], action_pairs, action_cols):
195
+ violations = []
196
+ for action1, action2 in action_pairs:
197
+ idx1 = action_cols.index(action1)
198
+ idx2 = action_cols.index(action2)
199
+ val1 = actions.get(action1, 0)
200
+ val2 = actions.get(action2, 0)
201
+ if val1 == 1 and val2 == 1:
202
+ violations.append(f"Invalid: Both {action1} and {action2} are 1")
203
+ return violations
204
+
205
+ def save_feedback(timestamp: str, actions: Dict[str, int], probabilities: List[float], video_bytes: bytes):
206
+ os.makedirs(CONFIG['feedback_dir'], exist_ok=True)
207
+ video_filename = f"feedback_{timestamp}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.mp4"
208
+ video_path = os.path.join(CONFIG['feedback_dir'], video_filename)
209
+ with open(video_path, 'wb') as f:
210
+ f.write(video_bytes)
211
+
212
+ feedback_data = {
213
+ 'timestamp': timestamp,
214
+ 'video_path': video_path,
215
+ **{f"action_{k}": v for k, v in actions.items()},
216
+ **{f"prob_{k}": p for k, p in zip(ACTION_COLS, probabilities)}
217
+ }
218
+
219
+ df = pd.DataFrame([feedback_data])
220
+ if os.path.exists(CONFIG['feedback_csv']):
221
+ df.to_csv(CONFIG['feedback_csv'], mode='a', header=False, index=False)
222
+ else:
223
+ df.to_csv(CONFIG['feedback_csv'], mode='w', header=True, index=False)
224
+
225
+ logger.info(f"Saved feedback for timestamp {timestamp} to {CONFIG['feedback_csv']} and video to {video_path}")
226
+
227
+ class FeedbackDataset(Dataset):
228
+ def __init__(self, feedback_csv, image_processor):
229
+ self.feedback_df = pd.read_csv(feedback_csv)
230
+ self.image_processor = image_processor
231
+ self.action_cols = [f"action_{col}" for col in ACTION_COLS]
232
+
233
+ def __len__(self):
234
+ return len(self.feedback_df)
235
+
236
+ def __getitem__(self, idx):
237
+ row = self.feedback_df.iloc[idx]
238
+ video_path = row['video_path']
239
+ timestamp = parse_timestamp(row['timestamp'])
240
+ labels = row[self.action_cols].values.astype(np.float32)
241
+
242
+ with open(video_path, 'rb') as f:
243
+ video_bytes = f.read()
244
+
245
+ rgb_inputs, flow_inputs = preprocess_video(video_bytes, timestamp, self.image_processor)
246
+
247
+ return {
248
+ 'rgb_inputs': rgb_inputs,
249
+ 'flow_inputs': flow_inputs,
250
+ 'labels': torch.tensor(labels, dtype=torch.float32)
251
+ }
252
+
253
+ def retrain_model(model, feedback_csv, original_train_csv, device, num_epochs=1, batch_size=4):
254
+ image_processor = AutoImageProcessor.from_pretrained("facebook/timesformer-base-finetuned-k400")
255
+ feedback_dataset = FeedbackDataset(feedback_csv, image_processor)
256
+ feedback_loader = torch.utils.data.DataLoader(feedback_dataset, batch_size=batch_size, shuffle=True)
257
+
258
+ original_dataset = FeedbackDataset(original_train_csv, image_processor)
259
+ original_loader = torch.utils.data.DataLoader(original_dataset, batch_size=batch_size, shuffle=True)
260
+
261
+ optimizer = optim.Adam(model.parameters(), lr=1e-5)
262
+ criterion = nn.BCEWithLogitsLoss()
263
+
264
+ model.train()
265
+ for epoch in range(num_epochs):
266
+ total_loss = 0
267
+ for loader in [feedback_loader, original_loader]:
268
+ for batch in loader:
269
+ rgb_inputs = batch['rgb_inputs'].to(device)
270
+ flow_inputs = batch['flow_inputs'].to(device)
271
+ labels = batch['labels'].to(device)
272
+
273
+ optimizer.zero_grad()
274
+ with autocast():
275
+ outputs = model(rgb_inputs, flow_inputs)
276
+ loss = criterion(outputs, labels)
277
+ loss.backward()
278
+ optimizer.step()
279
+
280
+ total_loss += loss.item()
281
+
282
+ avg_loss = total_loss / (len(feedback_loader) + len(original_loader))
283
+ logger.info(f"Epoch {epoch+1}/{num_epochs}, Average Loss: {avg_loss:.4f}")
284
+
285
+ torch.save(model.state_dict(), "models/final_two_stream_timesformer_updated.pth")
286
+ logger.info("Saved updated model weights to final_two_stream_timesformer_updated.pth")
287
+
288
+ # Initialize FastAPI app
289
+ app = FastAPI(title="Action Recognition API")
290
+
291
+ # Load model and metadata
292
+ device = 'cuda' if torch.cuda.is_available() else 'cpu'
293
+ model = TwoStreamTimeSformer(num_labels=len(ACTION_COLS))
294
+ model.load_state_dict(torch.load("models/final_two_stream_timesformer.pth", map_location=device))
295
+ model.to(device)
296
+ model.eval()
297
+
298
+ metadata = joblib.load("models/model_metadata.pkl")
299
+ image_processor = AutoImageProcessor.from_pretrained("facebook/timesformer-base-finetuned-k400")
300
+
301
+ # Request and response models
302
+ class PredictionRequest(BaseModel):
303
+ timestamp: str
304
+
305
+ class PredictionResponse(BaseModel):
306
+ timestamp: str
307
+ actions: Dict[str, int]
308
+ probabilities: List[float]
309
+
310
+ class FeedbackRequest(BaseModel):
311
+ timestamp: str
312
+ actions: Dict[str, int]
313
+ probabilities: List[float]
314
+
315
+ class FeedbackResponse(BaseModel):
316
+ status: str
317
+ message: str
318
+
319
+ @app.post("/predict", response_model=PredictionResponse)
320
+ async def predict(background_tasks: BackgroundTasks, file: UploadFile = File(...), timestamp: str = "0000"):
321
+ if not file.filename.endswith(('.mp4', '.avi', '.mov')):
322
+ raise HTTPException(status_code=400, detail="Invalid file format. Only .mp4, .avi, .mov are supported.")
323
+
324
+ try:
325
+ video_bytes = await file.read()
326
+ timestamp_seconds = parse_timestamp(timestamp)
327
+ cache_key = f"{get_video_hash(video_bytes)}_{timestamp}"
328
+
329
+ rgb_inputs, flow_inputs = await preprocess_video_async(video_bytes, timestamp_seconds, image_processor, cache_key)
330
+
331
+ with torch.no_grad():
332
+ rgb_inputs = rgb_inputs.unsqueeze(0).to(device, non_blocking=True)
333
+ flow_inputs = flow_inputs.unsqueeze(0).to(device, non_blocking=True)
334
+ with autocast():
335
+ outputs = model(rgb_inputs, flow_inputs)
336
+ probs = torch.sigmoid(outputs).cpu().numpy()[0]
337
+ preds = (probs > 0.7).astype(np.int32)
338
+ logger.info(f"Initial predictions (threshold 0.7): {dict(zip(ACTION_COLS, preds))}")
339
+ logger.info(f"Probabilities: {dict(zip(ACTION_COLS, probs))}")
340
+
341
+ adjusted_preds = enforce_constraints(preds, probs, action_pairs, ACTION_COLS)
342
+ logger.info(f"Adjusted predictions (after constraints): {dict(zip(ACTION_COLS, adjusted_preds))}")
343
+
344
+ actions_dict = {action: int(adjusted_preds[i]) for i, action in enumerate(ACTION_COLS)}
345
+ probabilities = probs.tolist()
346
+
347
+ return PredictionResponse(
348
+ timestamp=timestamp,
349
+ actions=actions_dict,
350
+ probabilities=probabilities
351
+ )
352
+
353
+ except ValueError as e:
354
+ raise HTTPException(status_code=400, detail=str(e))
355
+ except Exception as e:
356
+ logger.error(f"Unexpected error: {str(e)}")
357
+ raise HTTPException(status_code=500, detail="Internal server error")
358
+
359
+ @app.post("/feedback", response_model=FeedbackResponse)
360
+ async def feedback(feedback: FeedbackRequest, file: UploadFile = File(...)):
361
+ if not file.filename.endswith(('.mp4', '.avi', '.mov')):
362
+ raise HTTPException(status_code=400, detail="Invalid file format. Only .mp4, .avi, .mov are supported.")
363
+
364
+ try:
365
+ violations = validate_feedback_actions(feedback.actions, action_pairs, ACTION_COLS)
366
+ if violations:
367
+ raise ValueError(f"Invalid feedback actions: {'; '.join(violations)}")
368
+
369
+ video_bytes = await file.read()
370
+ save_feedback(feedback.timestamp, feedback.actions, feedback.probabilities, video_bytes)
371
+
372
+ return FeedbackResponse(
373
+ status="success",
374
+ message="Feedback submitted successfully"
375
+ )
376
+
377
+ except ValueError as ve:
378
+ raise HTTPException(status_code=400, detail=str(ve))
379
+ except Exception as e:
380
+ logger.error(f"Unexpected error in feedback: {str(e)}")
381
+ raise HTTPException(status_code=500, detail="Internal server error")
382
+
383
+ @app.get("/health")
384
+ async def health_check():
385
+ return {"status": "healthy"}
386
+
387
+ @app.post("/retrain")
388
+ async def retrain():
389
+ try:
390
+ if not os.path.exists(CONFIG['feedback_csv']):
391
+ raise HTTPException(status_code=404, detail="No feedback data available for retraining")
392
+
393
+ retrain_model(model, CONFIG['feedback_csv'], "train.csv", device, num_epochs=1)
394
+ return {"status": "success", "message": "Model retraining completed"}
395
+
396
+ except HTTPException as he:
397
+ raise he
398
+ except ValueError as ve:
399
+ raise HTTPException(status_code=400, detail=str(ve))
400
+ except Exception as e:
401
+ logger.error(f"Unexpected error in retraining: {str(e)}")
402
+ raise HTTPException(status_code=500, detail="Internal server error")
backend/models/model_metadata.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:124fb9d4226d36d5abbd666615bc08000d4518bdf523b8e70c5c87b4972bd381
3
+ size 874
backend/models/timesformer_best_submission.csv ADDED
@@ -0,0 +1,281 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ id,Filename,Time,Advancing,Retreating,Enclosing,Spreading,Rising,Descending,Directing,Indirecting,Increasing Pressure,Decreasing Pressure,Acceleration,Decelerating
2
+ cdd7e8f4-825f-4e6a-a0ba-a12a4ecf8676,s06_smiley,t0440,0,1,1,0,0,0,1,1,1,0,1,1
3
+ aebb87da-7d6e-487d-be99-e93c8502f72a,s06_smiley,t0442,0,0,0,0,0,0,0,0,0,0,0,0
4
+ 42aea8ef-38d9-4bfe-9dc3-2a890d43ab16,s06_smiley,t0459,0,0,0,0,0,0,0,0,0,0,0,0
5
+ 68abb24e-54e3-40a9-ab6d-ca4d5ddff1f5,s06_smiley,t0528,0,0,0,0,0,0,0,0,0,0,0,0
6
+ d2ee103d-4fd8-4440-91ca-41b08ff1be51,s06_smiley,t0530,0,1,1,0,0,0,0,1,1,0,0,1
7
+ de4c7e33-d34e-4ef5-9176-f19aacf5294d,s06_smiley,t0553,0,0,0,0,0,0,0,0,0,0,0,0
8
+ c44413ff-0442-4bb2-8a96-1114195fa93e,s06_smiley,t0559,0,0,0,0,0,0,0,0,0,0,0,0
9
+ c555c8e3-56b6-47ef-aee3-36629dc35c95,s06_smiley,t0601,0,0,0,0,0,0,0,0,0,0,0,0
10
+ f3ab8fcf-2e64-4c56-bb26-93bbbc126e37,s06_smiley,t0605,0,1,1,0,0,0,0,0,1,0,1,1
11
+ 885e31fd-e0d8-49db-a15e-74d85da911ce,s06_smiley,t0610,0,0,0,0,0,0,0,0,0,0,0,0
12
+ a8df1c71-5256-4afa-8ef2-5e56b0546622,s06_smiley,t0624,0,0,0,0,0,0,0,0,0,0,0,0
13
+ fd5664b7-50c0-4c35-bd25-8c7f6b58e40b,s06_smiley,t0636,0,0,0,0,0,0,0,0,0,0,0,0
14
+ df799287-c324-495d-a13d-0ea7abd25495,s06_smiley,t0659,0,1,1,1,0,0,0,0,1,1,0,1
15
+ 501cc79f-68a3-44cd-b3a2-986fcab63e3b,s06_smiley,t0700,0,0,0,0,0,0,0,0,0,0,0,0
16
+ afed361f-6cd6-4dfd-8914-6a795d4e5d28,s06_smiley,t0702,0,0,0,0,0,0,0,0,0,0,0,0
17
+ b84bbfe5-1022-455c-80f7-4424b12abb43,s06_smiley,t0708,0,0,0,0,0,0,0,0,0,0,0,0
18
+ 44528175-0e15-4239-8bc7-b50c10abec7c,s06_smiley,t0710,0,0,1,0,0,1,1,1,1,0,1,0
19
+ b5aa12be-4391-4888-a57d-2ac53d25496b,s06_smiley,t0714,0,0,0,0,0,0,0,0,0,0,0,0
20
+ ce1c0070-6063-4edd-b921-4e821749b06c,s06_smiley,t0724,0,0,0,0,0,0,0,0,0,0,0,0
21
+ 734c0b71-e30c-487b-b983-b4a83738e104,s06_smiley,t0727,0,0,0,0,0,0,0,0,0,0,0,0
22
+ f5a9165f-88c8-4dbd-b59d-4e748792c3b5,s06_smiley,t0749,0,1,1,0,1,0,0,0,1,1,0,1
23
+ 05699cf9-1f00-4343-b5de-021ff4a65b87,s06_smiley,t0804,0,0,0,0,0,0,0,0,0,0,0,0
24
+ 3a53246c-fce3-4723-9e81-977602b8ec47,s06_smiley,t0810,0,0,0,0,0,0,0,0,0,0,0,0
25
+ 7d04ff5b-9712-4b15-bda9-a084b1149f03,s06_smiley,t0812,0,0,0,0,0,0,0,0,0,0,0,0
26
+ 8b79e88d-4653-46d2-b607-c5b9637a4128,s06_smiley,t0819,0,1,1,0,0,0,0,1,1,1,0,1
27
+ 05497423-074a-4482-9533-138eddbf8f8b,s06_smiley,t0821,0,0,0,0,0,0,0,0,0,0,0,0
28
+ cfa511d2-d6ff-44fa-bc97-32151d5dd1d9,s06_smiley,t0829,0,0,0,0,0,0,0,0,0,0,0,0
29
+ 2c505cc8-4146-454d-ac37-0c8fe6cbd243,s06_smiley,t0849,0,0,0,0,0,0,0,0,0,0,0,0
30
+ 81994918-0067-4504-a65c-56e0834fe85c,s06_smiley,t0852,0,0,1,0,0,0,1,0,1,0,1,0
31
+ 340a1f45-9e42-4f0a-bc6f-c317228737d2,s06_smiley,t0855,0,0,0,0,0,0,0,0,0,0,0,0
32
+ 7186afa5-6e26-47f0-b730-9f291b7997b8,s06_smiley,t0859,0,0,0,0,0,0,0,0,0,0,0,0
33
+ 83053350-b2c8-498c-92f3-df988f763ac9,s06_smiley,t0915,0,0,0,0,0,0,0,0,0,0,0,0
34
+ 09fdaf02-7f6b-481a-8c63-ec92317ffe26,s06_smiley,t0935,0,0,1,0,0,0,1,0,1,0,1,0
35
+ 3f2db3d8-650c-4e17-98d4-a4f1b14835d0,s06_smiley,t1001,0,0,0,0,0,0,0,0,0,0,0,0
36
+ 52ebefbc-7689-4b2f-830f-d4b4aeb25e9e,s06_smiley,t1003,0,0,0,0,0,0,0,0,0,0,0,0
37
+ 8312d458-0fa4-4e5a-a500-0a97a3b14f85,s06_smiley,t1021,0,0,0,0,0,0,0,0,0,0,0,0
38
+ f99ce7eb-44c9-493e-9a51-54aa04b3f07e,s06_smiley,t1050,0,1,1,0,0,0,1,0,1,0,1,0
39
+ 264a63e4-f6db-42a2-8b73-a283f10ff7aa,s06_smiley,t1054,0,0,0,0,0,0,0,0,0,0,0,0
40
+ 7d2e89d5-dd5c-4b82-a5e8-e849bbbbaf86,s06_smiley,t1115,0,0,0,0,0,0,0,0,0,0,0,0
41
+ 3c2e31b7-3a3a-49b2-8bbb-088ecc997868,s06_smiley,t1128,0,0,0,0,0,0,0,0,0,0,0,0
42
+ 0bb638f3-1896-401c-8c58-80de78c26565,s06_smiley,t1149,0,1,1,0,0,1,1,1,1,0,1,1
43
+ e1754f43-1bfc-4434-9ddb-e1d2146bb958,s06_smiley,t1155,0,0,0,0,0,0,0,0,0,0,0,0
44
+ 8e92341d-92da-4e56-98e6-4e90f481a1a4,s06_smiley,t1216,0,0,0,0,0,0,0,0,0,0,0,0
45
+ c3e7239e-f779-427e-b220-7f4496b98fbf,s06_smiley,t1231,0,0,0,0,0,0,0,0,0,0,0,0
46
+ daee596a-1225-4b03-a0fa-70c41f75546c,s06_smiley,t1243,0,1,1,0,0,0,1,1,1,0,1,0
47
+ 8c55beae-1783-4f8f-acd4-a4610a8f897a,s06_smiley,t1253,0,0,0,0,0,0,0,0,0,0,0,0
48
+ dbf57355-09df-48a2-b7b1-486b357c2b89,s06_smiley,t1256,0,0,0,0,0,0,0,0,0,0,0,0
49
+ 13f24aef-08db-4f27-bbd9-9f5702cd5a70,s06_smiley,t1323,0,0,0,0,0,0,0,0,0,0,0,0
50
+ ec0e43ee-2c04-4459-b01f-f7454ccc1baf,s06_smiley,t1344,0,0,1,1,0,0,1,0,1,0,1,0
51
+ 55f9f847-8e65-42a7-837b-9d8b96c8705e,s06_smiley,t1345,0,0,0,0,0,0,0,0,0,0,0,0
52
+ 10eabd75-e225-4e79-af1b-f6087930bf12,s06_smiley,t1347,0,0,0,0,0,0,0,0,0,0,0,0
53
+ b1d96305-a8db-4c9b-8465-e6a88f9c082f,s06_smiley,t1350,0,0,0,0,0,0,0,0,0,0,0,0
54
+ 886cc349-caba-4f03-87e2-3d2c5cf1cf72,s06_smiley,t1417,0,0,1,0,0,0,1,0,1,1,1,0
55
+ 27b90750-68f2-42ef-9b94-4be7f98ffe8e,s06_smiley,t1420,0,0,0,0,0,0,0,0,0,0,0,0
56
+ 9462b9c4-cc07-4a0e-bb7d-7f1c685943f2,s06_smiley,t1425,0,0,0,0,0,0,0,0,0,0,0,0
57
+ f6353bb6-5a0d-429e-946d-c5f16ed67986,s06_smiley,t1448,0,0,0,0,0,0,0,0,0,0,0,0
58
+ 81acd6c4-53aa-4d30-b252-79d51aa68287,s06_smiley,t1450,1,0,1,1,0,0,1,0,1,1,1,0
59
+ e91db751-20c6-45cc-85ac-9c09c3b694a1,s06_smiley,t1452,0,0,0,0,0,0,0,0,0,0,0,0
60
+ ca3cc898-1c98-4e5e-9e4d-513401a51082,s06_smiley,t1458,0,0,0,0,0,0,0,0,0,0,0,0
61
+ c886c4c2-e769-4cf1-98b7-a2c3d02d064b,s06_smiley,t1502,0,0,0,0,0,0,0,0,0,0,0,0
62
+ f206955a-ad13-4a19-bd74-325a7641f52a,s06_smiley,t1503,0,0,1,0,0,0,1,0,1,0,1,0
63
+ 5b34a0e7-1568-4fa2-861d-bc485fe34365,s06_smiley,t1530,0,0,0,0,0,0,0,0,0,0,0,0
64
+ a006b3fc-2741-4eba-bcb8-030881beff69,s06_smiley,t1536,0,0,0,0,0,0,0,0,0,0,0,0
65
+ 6a25466e-4da4-4533-a095-47903bf6c164,s06_smiley,t1537,0,0,0,0,0,0,0,0,0,0,0,0
66
+ 87269f83-e054-463c-bc48-6f711dea8ee5,s06_smiley,t1540,0,0,1,1,0,0,1,0,1,0,1,0
67
+ 3f6a2083-5c53-46be-a553-7e69e1392592,s06_smiley,t1543,0,0,0,0,0,0,0,0,0,0,0,0
68
+ 45763844-ae67-4c7c-9d07-a0d71e7d1aa1,s06_smiley,t1548,0,0,0,0,0,0,0,0,0,0,0,0
69
+ 71101afa-19b2-4685-9bde-4338fbb6922b,s06_smiley,t1549,0,0,0,0,0,0,0,0,0,0,0,0
70
+ e105374f-b660-413f-8b45-57db3b11323e,s06_smiley,t1552,0,0,1,1,0,0,1,0,1,0,1,0
71
+ 67ef7758-3bd5-4372-a3db-ccbd9a8fd055,s06_smiley,t1553,0,0,0,0,0,0,0,0,0,0,0,0
72
+ e01755f8-43f5-4973-ac38-a8304b74fe64,s06_smiley,t1558,0,0,0,0,0,0,0,0,0,0,0,0
73
+ 46f5a432-29c5-43af-b269-8acf849be553,s06_smiley,t1607,0,0,0,0,0,0,0,0,0,0,0,0
74
+ 9c1aef92-e6ee-4d0f-b077-4d63ba97244f,s06_smiley,t1611,0,1,1,0,0,0,1,1,1,0,1,0
75
+ ca068fb9-4b46-4a4f-ad53-4a005880ee78,s06_smiley,t1622,0,0,0,0,0,0,0,0,0,0,0,0
76
+ c3dc5cdc-73fe-4468-997a-2fdffd28ffca,s06_smiley,t1625,0,0,0,0,0,0,0,0,0,0,0,0
77
+ e345839e-4319-4074-8ba0-006a6cdb7611,s06_smiley,t1629,0,0,0,0,0,0,0,0,0,0,0,0
78
+ d5758058-439f-4fe6-a5ce-ef0f1293fef4,s06_smiley,t1639,0,0,1,0,0,0,1,0,1,0,1,0
79
+ 142820cf-9593-4243-83b2-d0f2b40d4111,s06_smiley,t1654,0,0,0,0,0,0,0,0,0,0,0,0
80
+ 8ea86e9b-acc5-46c2-af47-118d329cdaf8,s06_smiley,t1659,0,0,0,0,0,0,0,0,0,0,0,0
81
+ d8ef3835-48c5-498f-b57f-17785bfdd66f,s06_smiley,t1709,0,0,0,0,0,0,0,0,0,0,0,0
82
+ 3aae222a-0af5-4fc4-b79a-53a9a260f384,s06_smiley,t1713,0,0,1,0,0,0,1,0,1,1,1,1
83
+ dcbcff19-6382-4780-8d9d-6291187ed89b,s06_smiley,t1720,0,0,0,0,0,0,0,0,0,0,0,0
84
+ edb440db-5e7b-446c-806b-50f20906ef60,s06_smiley,t1725,0,0,0,0,0,0,0,0,0,0,0,0
85
+ 22ebbd3e-ddc0-458c-b381-e12ef4c44a8b,s06_smiley,t1727,0,0,0,0,0,0,0,0,0,0,0,0
86
+ a82d7eb6-2a4f-42f7-9897-a35a0e9667a2,s06_smiley,t1728,0,0,1,0,0,0,1,1,1,0,1,0
87
+ f81ccaa6-f71e-43a9-b1f5-a963ba01c720,s06_smiley,t1734,0,0,0,0,0,0,0,0,0,0,0,0
88
+ 5f18b188-acf6-4c51-91bf-46e2a093faf5,s06_smiley,t1737,0,0,0,0,0,0,0,0,0,0,0,0
89
+ 91d3c488-13ab-43eb-8aaf-94ff346a7054,s06_smiley,t1738,0,0,0,0,0,0,0,0,0,0,0,0
90
+ c66dec23-ba4e-46e5-98ea-90e407a5f640,s06_smiley,t1740,0,0,1,1,0,0,1,0,1,0,1,0
91
+ 3b006345-6bdd-4b83-9527-8f7133ec78d4,s06_smiley,t1743,0,0,0,0,0,0,0,0,0,0,0,0
92
+ 056c8c42-15f2-4127-b034-1add46e1153c,s06_smiley,t1810,0,0,0,0,0,0,0,0,0,0,0,0
93
+ 0c9b41d5-6fff-4b05-8236-993334d450cf,s06_smiley,t1816,0,0,0,0,0,0,0,0,0,0,0,0
94
+ c6c82a05-00a1-4c16-9423-bc3a8f67380e,s06_smiley,t1818,1,1,1,0,0,0,1,1,1,1,1,1
95
+ 62bc7775-55d3-45ef-823b-fc6ecfb2cfb2,s06_smiley,t1826,0,0,0,0,0,0,0,0,0,0,0,0
96
+ 88867cb0-340a-40e3-a386-e4442c2c6737,s06_smiley,t1832,0,0,0,0,0,0,0,0,0,0,0,0
97
+ e64958da-ddde-4786-ac28-416990e89412,s06_smiley,t1843,0,0,0,0,0,0,0,0,0,0,0,0
98
+ 8bda57d4-d954-4dee-ad7d-593585edb1ea,s06_smiley,t1844,0,0,1,1,0,0,1,0,1,1,1,0
99
+ 06f635aa-ac8f-49eb-a019-f65822189812,s06_smiley,t1858,0,0,0,0,0,0,0,0,0,0,0,0
100
+ ea64bfba-563b-45f0-8db2-aa46babac615,s06_smiley,t1907,0,0,0,0,0,0,0,0,0,0,0,0
101
+ 43efbc76-9e21-4e19-8b7a-12117c97d53d,s06_smiley,t1915,0,0,0,0,0,0,0,0,0,0,0,0
102
+ 1ccaa2ec-d7cf-4ea9-b429-dda916d46020,s06_smiley,t1920,0,0,1,1,0,0,1,0,1,1,1,0
103
+ aa6e1bcd-27ea-433d-8efd-d7a9bc0d78b3,s06_smiley,t1937,0,0,0,0,0,0,0,0,0,0,0,0
104
+ 9f07df5b-db25-41ea-a135-2b74454ed84d,s06_smiley,t1944,0,0,0,0,0,0,0,0,0,0,0,0
105
+ 2a5e9435-c23e-4321-98c6-940c23d9aaf3,s06_smiley,t2016,0,0,0,0,0,0,0,0,0,0,0,0
106
+ 694dac4b-4d79-4e67-ae0a-605574f263a1,s06_smiley,t2018,0,0,1,0,0,1,1,1,1,0,1,0
107
+ 7fd86008-9de5-44dc-a34e-f4eecae18a5c,s06_smiley,t2022,0,0,0,0,0,0,0,0,0,0,0,0
108
+ 87717547-8e29-43eb-ad45-f7ad7223e7b5,s06_smiley,t2037,0,0,0,0,0,0,0,0,0,0,0,0
109
+ 80e26e90-4daa-4a12-b62d-161f6acbf170,s06_smiley,t2120,0,0,0,0,0,0,0,0,0,0,0,0
110
+ 6742334a-8ff9-4201-8cde-b5dbc7d7ef24,s06_smiley,t2123,0,0,1,0,0,0,1,0,1,0,1,0
111
+ b40a6a39-af84-4dd3-a5fe-f3f1dc2e9a38,s06_smiley,t2126,0,0,0,0,0,0,0,0,0,0,0,0
112
+ 78d6b4a6-f356-47fd-ab71-5599a6c9f7fd,s06_smiley,t2142,0,0,0,0,0,0,0,0,0,0,0,0
113
+ 120f577c-0e3f-468c-8cc7-46015b08a6af,s06_smiley,t2200,0,0,0,0,0,0,0,0,0,0,0,0
114
+ 0d5fdbe5-436f-449d-871f-de1a8116e093,s06_smiley,t2217,1,1,1,1,1,0,1,0,1,1,1,1
115
+ 0fcc483c-97c6-4fdb-be76-81f35dd54696,s06_smiley,t2220,0,0,0,0,0,0,0,0,0,0,0,0
116
+ 7f37b601-9575-4413-b5da-0f807bebaf26,s06_smiley,t2230,0,0,0,0,0,0,0,0,0,0,0,0
117
+ 9bd1dc4d-e292-4400-b45e-5b1118adf8e4,s06_smiley,t2237,0,0,0,0,0,0,0,0,0,0,0,0
118
+ c2b1bb91-826f-4f88-a364-0eda52036e2c,s06_smiley,t2239,1,1,1,0,0,1,1,1,1,1,1,1
119
+ 2d71aae7-ff54-4fa0-8cc0-316cb8855a85,s06_smiley,t2240,0,0,0,0,0,0,0,0,0,0,0,0
120
+ 01d53813-8815-4df7-b4ec-50905c0a1578,s06_smiley,t2241,0,0,0,0,0,0,0,0,0,0,0,0
121
+ 74a1c0ea-e2fd-47e9-93a5-d4b2338dcf3f,s06_smiley,t2242,0,0,0,0,0,0,0,0,0,0,0,0
122
+ a4b6828d-4570-4710-9a0f-26e904b11ddc,s06_smiley,t2243,0,0,1,0,0,0,1,1,1,0,1,1
123
+ 7f63ffc1-e89a-4829-8f0a-df66ba72e66f,s06_smiley,t2244,0,0,0,0,0,0,0,0,0,0,0,0
124
+ 70847aa4-ed4e-45b6-94b9-af6ae952dbe3,s06_smiley,t2245,0,0,0,0,0,0,0,0,0,0,0,0
125
+ d2f048d7-6c46-47b6-901a-0f8ffb7ffe2d,s06_smiley,t2247,0,0,0,0,0,0,0,0,0,0,0,0
126
+ b9b2de40-6dfa-45b2-bc0c-c33f52dcafc1,s06_smiley,t2250,0,1,1,0,0,1,1,1,1,0,1,1
127
+ f6252063-8a7c-4f33-83f6-6bbf08798645,s06_smiley,t2304,0,0,0,0,0,0,0,0,0,0,0,0
128
+ e74dc403-b455-425e-b49e-96c60a9d3219,s06_smiley,t2305,0,0,0,0,0,0,0,0,0,0,0,0
129
+ 416e76d1-7937-42d9-806c-198e13845a30,s06_smiley,t2324,0,0,0,0,0,0,0,0,0,0,0,0
130
+ 070ab96e-e789-467a-a48e-57ee1c0902a1,s06_smiley,t2346,0,1,1,0,0,0,1,1,1,0,1,1
131
+ 2f3c1d32-dd8d-4f17-b581-50e36aa0fa75,s06_smiley,t2348,0,0,0,0,0,0,0,0,0,0,0,0
132
+ 1a3c3eda-4de0-4cda-811a-79ae8e605c80,s06_smiley,t2353,0,0,0,0,0,0,0,0,0,0,0,0
133
+ 8e0dec2f-cae4-43bc-8ee5-b7b7ebf36cc4,s06_smiley,t2357,0,0,0,0,0,0,0,0,0,0,0,0
134
+ 55990d27-8595-48d2-92d9-7f18afe981d2,s06_smiley,t2406,1,1,1,0,0,0,0,0,1,1,1,1
135
+ 93443ce9-2931-4f5a-b3ad-e132155c31d6,s06_smiley,t2425,0,0,0,0,0,0,0,0,0,0,0,0
136
+ c05fc96d-2650-49a7-a62c-7348b983645c,s06_smiley,t2432,0,0,0,0,0,0,0,0,0,0,0,0
137
+ 983ca0bc-373f-4430-b6f0-abb58a54e2f1,s06_smiley,t2435,0,0,0,0,0,0,0,0,0,0,0,0
138
+ f8bac049-0581-4f11-acc7-a4fc4d421924,s06_smiley,t2457,0,0,1,0,0,0,1,0,1,1,1,0
139
+ 9dd7afdd-c3f1-4b13-9639-b1201b4f0dc8,s06_smiley,t2458,0,0,0,0,0,0,0,0,0,0,0,0
140
+ e4731855-c6be-439b-a706-c353619c98a2,s06_smiley,t2518,0,0,0,0,0,0,0,0,0,0,0,0
141
+ 3b666255-4f33-4ce9-abde-34febce230eb,s06_smiley,t2532,0,0,0,0,0,0,0,0,0,0,0,0
142
+ 60876a77-1b6e-4dd9-ba6d-3713b65ac5e1,s06_smiley,t2558,0,0,1,0,0,0,1,0,1,0,1,0
143
+ 005be279-2cb0-442c-a9cc-ee76dbe3ef21,s06_smiley,t2618,0,0,0,0,0,0,0,0,0,0,0,0
144
+ 7a53064b-762e-4822-aa60-fa1d76045fb4,s06_smiley,t2619,0,0,0,0,0,0,0,0,0,0,0,0
145
+ e478d355-1780-4032-a067-2da1f305b277,s06_smiley,t2624,0,0,0,0,0,0,0,0,0,0,0,0
146
+ 6774e56f-275a-43a6-9ddd-78c4e6c21ee5,s06_smiley,t2633,1,1,1,0,0,0,0,1,1,1,0,1
147
+ a39f8a77-0186-4e0e-a1df-ae646d4e893f,s06_smiley,t2641,0,0,0,0,0,0,0,0,0,0,0,0
148
+ c5e7f2bf-a93c-4caa-9c91-4da4696956e0,s06_smiley,t2659,0,0,0,0,0,0,0,0,0,0,0,0
149
+ d63355ce-351f-4b08-b427-de5c7eb21096,s06_smiley,t2706,0,0,0,0,0,0,0,0,0,0,0,0
150
+ 8f20eb87-f4ff-47cd-a593-90ed0ed3a0d9,s06_smiley,t2711,1,1,1,0,0,0,0,0,1,1,1,1
151
+ 7357752e-1fe9-42f3-b0f1-d0f16a15bb94,s06_smiley,t2718,0,0,0,0,0,0,0,0,0,0,0,0
152
+ 3b4db9c4-54fd-444f-95a9-1b21a2307022,s06_smiley,t2725,0,0,0,0,0,0,0,0,0,0,0,0
153
+ 8bff2195-eb29-43e9-9031-7e2baca39282,s06_smiley,t2727,0,0,0,0,0,0,0,0,0,0,0,0
154
+ db9a214d-e92a-4c9c-8ac1-696026372bbd,s06_smiley,t2731,1,0,1,1,0,0,1,0,1,1,1,0
155
+ d88c0e9a-7941-4208-a2c8-07bc7cbf361c,s06_smiley,t2735,0,0,0,0,0,0,0,0,0,0,0,0
156
+ b87678b2-e91f-436e-b1ba-76cd9b7463e0,s06_smiley,t2742,0,0,0,0,0,0,0,0,0,0,0,0
157
+ 9e791905-1904-4347-bc6b-a2bc75f03e13,s06_smiley,t2751,0,0,0,0,0,0,0,0,0,0,0,0
158
+ 9cec366e-d4dc-41ab-904b-ebd38acac232,s06_smiley,t2756,0,1,1,0,0,0,1,0,1,0,1,1
159
+ cb61b990-604c-4b12-bbd7-9e11115faa51,s06_smiley,t2807,0,0,0,0,0,0,0,0,0,0,0,0
160
+ 1b805d00-e2c7-4d71-bf37-0f437571e325,s06_smiley,t2815,0,0,0,0,0,0,0,0,0,0,0,0
161
+ d81aee33-09e8-42e3-b8eb-06bf8ff962ed,s06_smiley,t2836,0,0,0,0,0,0,0,0,0,0,0,0
162
+ ef934ede-a198-430b-ab89-c440996fc74a,s06_smiley,t2840,0,1,1,0,0,0,0,0,1,1,0,1
163
+ bcf909e8-80ab-44b0-b1e5-2b73c0df5659,s06_smiley,t2845,0,0,0,0,0,0,0,0,0,0,0,0
164
+ 7950fa47-5070-40d6-8e41-fd3cf248c521,s06_smiley,t2906,0,0,0,0,0,0,0,0,0,0,0,0
165
+ 73782c5d-fd37-4e4b-badc-6505563ffee2,s06_smiley,t2909,0,0,0,0,0,0,0,0,0,0,0,0
166
+ 5c498007-da0c-4c46-af57-da9f00cddf49,s06_smiley,t2945,0,0,1,1,0,0,1,0,1,1,1,1
167
+ 82c9f4f0-5013-4957-b247-14eb06047d98,s06_smiley,t2948,0,0,0,0,0,0,0,0,0,0,0,0
168
+ 5392494d-6781-4362-8f41-1a635b236d83,s06_smiley,t2958,0,0,0,0,0,0,0,0,0,0,0,0
169
+ f00a9fd8-174f-4777-ad7b-e17998240151,s06_smiley,t3000,0,0,0,0,0,0,0,0,0,0,0,0
170
+ b266a8fc-4a1d-457a-80cc-58ec565c15ba,s06_smiley,t3014,0,1,1,1,0,0,0,1,1,1,0,1
171
+ 4ec01160-df2d-4fbd-af44-12f3db4a0948,s06_smiley,t3019,0,0,0,0,0,0,0,0,0,0,0,0
172
+ b5a3fe57-b7fe-4c2d-96b1-e1f0c51cebb4,s06_smiley,t3034,0,0,0,0,0,0,0,0,0,0,0,0
173
+ 6c02ec9c-8dd7-4fc5-975a-63e2cfa5427b,s06_smiley,t3056,0,0,0,0,0,0,0,0,0,0,0,0
174
+ b6fc0dc8-e807-4c15-b9ac-74e335c27785,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1621,0,0,1,0,0,0,1,0,1,0,1,0
175
+ 4ff9813a-77ef-4885-aba9-9d36ff3a502a,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1647,0,0,0,0,0,0,0,0,0,0,0,0
176
+ 096aaef7-703f-4ca0-90eb-14c1b3a4114b,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1650,0,0,0,0,0,0,0,0,0,0,0,0
177
+ 22252282-e185-4590-b150-2e74dc81dfc6,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1706,0,0,0,0,0,0,0,0,0,0,0,0
178
+ 4e2d9d78-6eca-4f1f-98aa-139166f70c6e,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1709,0,1,1,0,0,0,1,0,1,1,1,0
179
+ 74154d8a-3fdd-453f-912a-a5f6d4f38e39,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1722,0,0,0,0,0,0,0,0,0,0,0,0
180
+ 957cbe45-c6fd-489c-bf19-2c7ce97b7c26,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1738,0,0,0,0,0,0,0,0,0,0,0,0
181
+ bd295b7b-3e2d-4626-93ab-19886f2b920c,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1741,0,0,0,0,0,0,0,0,0,0,0,0
182
+ 1fb1622e-cfb5-4fcf-9485-cf7b313859a2,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1742,1,0,1,1,0,1,1,0,1,0,1,1
183
+ 043cb9e5-3074-4496-94b8-538ff5e32cf7,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1801,0,0,0,0,0,0,0,0,0,0,0,0
184
+ 830a3898-fc56-4a56-a6f7-3905c01c4cc2,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1806,0,0,0,0,0,0,0,0,0,0,0,0
185
+ 9899f298-1433-4d0e-a1e1-b2944ac8ba5d,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1807,0,0,0,0,0,0,0,0,0,0,0,0
186
+ 12aaa6ad-e229-4aa8-aafe-72a5c2b3042c,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1827,0,0,1,0,0,0,1,0,1,0,1,0
187
+ de34d779-ae7c-4351-a7bd-71ea20925171,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1856,0,0,0,0,0,0,0,0,0,0,0,0
188
+ 4ac65dec-ab1a-45e9-9a55-f5c62f4b16d3,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1916,0,0,0,0,0,0,0,0,0,0,0,0
189
+ 94880195-945a-4332-9312-1a433deeb941,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1918,0,0,0,0,0,0,0,0,0,0,0,0
190
+ b45aa698-e429-46e9-982b-a43469bf81fb,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1924,0,0,1,1,0,0,1,0,1,0,1,1
191
+ 556c1284-1a53-4b07-8c89-d4bf4ea3282f,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1933,0,0,0,0,0,0,0,0,0,0,0,0
192
+ d3e5838c-c335-408d-8d67-93db62c071f1,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1935,0,0,0,0,0,0,0,0,0,0,0,0
193
+ 139c6557-6525-4003-975b-4face9edcaef,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t1942,0,0,0,0,0,0,0,0,0,0,0,0
194
+ f5e912be-0dcb-4273-be91-13ef75fa497a,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2000,0,0,1,0,0,0,1,0,1,1,1,0
195
+ d56ca73e-b0f5-485c-bcd5-efc9bf75dc66,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2015,0,0,0,0,0,0,0,0,0,0,0,0
196
+ 5910a423-4804-42d7-af19-b9da7ce20da8,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2030,0,0,0,0,0,0,0,0,0,0,0,0
197
+ 8f939051-e6cc-491d-b8f3-412d4a65cef7,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2031,0,0,0,0,0,0,0,0,0,0,0,0
198
+ 69384a49-14da-4e94-a63e-9ec6de60ee0c,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2036,0,0,1,1,0,0,1,0,1,0,1,0
199
+ f123fe5b-5c9a-4c1d-a431-3abeb0f21769,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2045,0,0,0,0,0,0,0,0,0,0,0,0
200
+ 25479c24-6704-41ae-b1a3-a8ba853eb933,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2051,0,0,0,0,0,0,0,0,0,0,0,0
201
+ f7862b8a-b580-48d3-a4bc-23f86ae24977,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2056,0,0,0,0,0,0,0,0,0,0,0,0
202
+ 4022a7b4-6c7c-4ef9-9ea6-eb2869602902,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2105,0,0,1,1,0,0,1,0,1,0,1,0
203
+ 83408998-27c7-44f4-875c-d8e5e8b130ef,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2110,0,0,0,0,0,0,0,0,0,0,0,0
204
+ c9d69301-7c7b-4aea-a594-4c31957e86a3,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2124,0,0,0,0,0,0,0,0,0,0,0,0
205
+ 2c100e55-11b1-4eac-a213-3adabe78264c,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2149,0,0,0,0,0,0,0,0,0,0,0,0
206
+ dbc4e2e2-25b3-4cb1-8962-6b99c50c7973,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2150,1,0,1,0,0,1,1,0,1,1,1,1
207
+ 9dc62d4b-5d4d-4290-a79d-55eb9867330d,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2156,0,0,0,0,0,0,0,0,0,0,0,0
208
+ 725398cf-9f8b-46ff-bc9c-4dd136833da7,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2206,0,0,0,0,0,0,0,0,0,0,0,0
209
+ 309c1a38-a760-4aec-b19d-96b0b1c89c3c,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2228,0,0,0,0,0,0,0,0,0,0,0,0
210
+ 13e4c795-9e09-4403-accf-a1f662207d7c,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2240,0,0,1,1,1,0,1,0,1,0,1,1
211
+ 21dfdf8d-9630-4956-80ec-7dc630847738,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2243,0,0,0,0,0,0,0,0,0,0,0,0
212
+ f7f87bb9-045b-4bd0-9479-07545f3e0812,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2244,0,0,0,0,0,0,0,0,0,0,0,0
213
+ 85196e21-62d1-4a4d-8677-fd5f2819ead7,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2303,0,0,0,0,0,0,0,0,0,0,0,0
214
+ b7eaafed-ff6e-4ce0-a5b9-146fbbedaf79,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2324,1,0,1,0,0,0,1,0,1,1,1,1
215
+ c7214d91-0e85-465d-8901-9f3c1c50e26b,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2339,0,0,0,0,0,0,0,0,0,0,0,0
216
+ ec9fc30f-d26c-4463-82bd-be6b7edde6c8,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2342,0,0,0,0,0,0,0,0,0,0,0,0
217
+ f25001a6-c7f7-41df-a922-e7c03567ce42,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2346,0,0,0,0,0,0,0,0,0,0,0,0
218
+ a24d2327-4b86-4be8-be62-fdaac32d4d1e,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2349,0,0,1,0,0,0,1,0,1,1,1,0
219
+ 7a32f4e5-9bc8-47f3-908f-1d7cf0e4d371,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2354,0,0,0,0,0,0,0,0,0,0,0,0
220
+ 311c37d5-06ed-4d74-83ae-64e1a8c65a78,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2400,0,0,0,0,0,0,0,0,0,0,0,0
221
+ 391516dc-283f-43a6-81b0-316509d4c925,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2403,0,0,0,0,0,0,0,0,0,0,0,0
222
+ fa8d1fae-d26a-4e85-9bbf-1ad9b4e2a9aa,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2405,0,0,1,0,0,0,1,0,1,0,1,0
223
+ 865dc32c-3cf4-4122-837a-9c56bbbdd115,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2406,0,0,0,0,0,0,0,0,0,0,0,0
224
+ 8957f124-d603-4ab8-9d2b-13ed754ca1d3,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2410,0,0,0,0,0,0,0,0,0,0,0,0
225
+ 2786888d-f6c2-4467-b897-64f7f6f6f5cc,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2411,0,0,0,0,0,0,0,0,0,0,0,0
226
+ c1e760d3-d805-473b-9bec-323915cdaa1c,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2414,0,0,1,0,0,0,1,0,1,0,1,0
227
+ 767358de-3574-4624-a216-ba02f9c84174,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2419,0,0,0,0,0,0,0,0,0,0,0,0
228
+ 0b76cee3-1165-44b4-8607-8a7a8606b9ea,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2420,0,0,0,0,0,0,0,0,0,0,0,0
229
+ 85a9c26e-bcd6-4097-8677-edb1265c58d9,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2425,0,0,0,0,0,0,0,0,0,0,0,0
230
+ 106205fe-379e-4dad-9cc8-cf682e2f9543,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2427,0,0,1,1,0,0,1,0,1,0,1,0
231
+ add802cc-c6ff-4d17-a54c-4528d60b1533,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2429,0,0,0,0,0,0,0,0,0,0,0,0
232
+ 31ff63b5-e41f-41d6-a67b-a44df69dcce8,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2433,0,0,0,0,0,0,0,0,0,0,0,0
233
+ 929f9c09-cd9f-4c55-9811-f8826645d3e1,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2438,0,0,0,0,0,0,0,0,0,0,0,0
234
+ aba77f4f-cdd0-47d4-9f01-0058ea89eff3,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2439,0,0,1,1,0,0,1,0,1,0,1,0
235
+ c73b9893-1e9a-4cb3-9e93-4cd67ee9c48c,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2441,0,0,0,0,0,0,0,0,0,0,0,0
236
+ a6bf8d7e-da7e-4e84-949b-bdc6233d897b,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2446,0,0,0,0,0,0,0,0,0,0,0,0
237
+ acba25a1-fb84-4a10-86ca-8cd89cd57504,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2452,0,0,0,0,0,0,0,0,0,0,0,0
238
+ 4aa0b020-7673-4c4a-8eb6-1a607248634b,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2453,0,0,1,0,0,0,1,0,1,1,1,1
239
+ 42dc5ce8-e80f-450f-a87f-cb07f9a16f36,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2455,0,0,0,0,0,0,0,0,0,0,0,0
240
+ 050d07bb-c782-4725-ad5a-996cff3f8c2b,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2458,0,0,0,0,0,0,0,0,0,0,0,0
241
+ d5d63b38-ce63-43a1-99aa-a63f41285f43,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2500,0,0,0,0,0,0,0,0,0,0,0,0
242
+ 7a9d89d7-c87f-43d9-987c-026250e3c678,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2516,0,0,1,0,0,0,1,0,1,0,1,1
243
+ f13ca0c4-e23c-47dc-94bc-31e490302339,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2533,0,0,0,0,0,0,0,0,0,0,0,0
244
+ ee1dca32-d91d-4039-a1e4-47c1e63f3b14,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2552,0,0,0,0,0,0,0,0,0,0,0,0
245
+ 366026d0-7c0d-4647-9010-446c475eec0e,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2554,0,0,0,0,0,0,0,0,0,0,0,0
246
+ 4ed0ef3f-503f-4ad6-ab5a-e37c14a17310,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2555,0,0,0,0,0,1,1,0,1,0,1,0
247
+ 189166fa-5932-48a6-9fe0-38698d794277,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2616,0,0,0,0,0,0,0,0,0,0,0,0
248
+ 74bf3203-1590-4370-b33d-a0fdcac8cbf0,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2634,0,0,0,0,0,0,0,0,0,0,0,0
249
+ 34945154-46b9-4e20-907e-5504356393aa,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2649,0,0,0,0,0,0,0,0,0,0,0,0
250
+ 5a516f73-af4f-4941-9c7c-72e8b6f6af0d,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2703,0,0,1,1,0,0,1,0,1,0,1,0
251
+ aaeafc12-1601-4f35-ac69-e02c08106967,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2719,0,0,0,0,0,0,0,0,0,0,0,0
252
+ 68b58d7d-9a05-49d9-8a12-73a9a182adb9,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2722,0,0,0,0,0,0,0,0,0,0,0,0
253
+ b73fec87-8986-4afe-af14-25b0556dfc2a,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2724,0,0,0,0,0,0,0,0,0,0,0,0
254
+ c9fc5f87-2393-4266-839d-b29a1d5a1025,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2740,0,0,1,0,0,0,1,0,1,0,1,0
255
+ f66b4913-e9dd-4fa4-a8c7-41746fc5fa65,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2750,0,0,0,0,0,0,0,0,0,0,0,0
256
+ a430f38f-4990-4775-b8fa-fd43d13238bc,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2804,0,0,0,0,0,0,0,0,0,0,0,0
257
+ 2debc54e-e686-429c-ab57-4c59eea3ae8e,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2805,0,0,0,0,0,0,0,0,0,0,0,0
258
+ 91a388b9-b774-4032-abc4-a9dd750c03e4,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2810,0,0,1,1,0,0,1,0,1,0,1,1
259
+ 5dd262e3-60d1-4fc6-ab60-327573d51101,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2825,0,0,0,0,0,0,0,0,0,0,0,0
260
+ b3a5199a-378c-4759-88aa-e6a5bad3dcd5,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2843,0,0,0,0,0,0,0,0,0,0,0,0
261
+ 1e2edb82-c228-4339-adbf-da203ca57e7a,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2859,0,0,0,0,0,0,0,0,0,0,0,0
262
+ f67190d7-95f2-4eab-9a8b-d4ca46db5639,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2900,0,0,1,0,0,0,1,0,1,0,1,0
263
+ a7bca7b6-0936-4100-898b-bf427cec2b3b,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2903,0,0,0,0,0,0,0,0,0,0,0,0
264
+ 69205809-e661-49a9-96e0-721887eccfd0,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2905,0,0,0,0,0,0,0,0,0,0,0,0
265
+ add8c286-dab3-439f-862b-1eaaf9dc517a,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2906,0,0,0,0,0,0,0,0,0,0,0,0
266
+ ebc7c911-d0a9-46ce-b902-d8e7cdda887d,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2909,0,0,1,1,0,0,1,0,1,0,1,0
267
+ a33766ab-d75c-40e0-a8a5-97b28697d9d2,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2912,0,0,0,0,0,0,0,0,0,0,0,0
268
+ f46adcfa-bf8e-45f7-8159-89e218bea421,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2914,0,0,0,0,0,0,0,0,0,0,0,0
269
+ 59bbf562-e148-4cfd-b242-24c12b8a9668,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2918,0,0,0,0,0,0,0,0,0,0,0,0
270
+ 23e3b348-e604-4038-9c34-96f627e9400d,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2919,0,0,1,0,0,0,1,0,1,0,1,0
271
+ c7d17ae7-0613-4f40-9b25-21a1db24c573,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2921,0,0,0,0,0,0,0,0,0,0,0,0
272
+ 450652d8-9a81-4831-87e2-422f4dfbec47,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2922,0,0,0,0,0,0,0,0,0,0,0,0
273
+ d84686b1-c10d-4cf0-86a5-5c6629097010,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t2939,0,0,0,0,0,0,0,0,0,0,0,0
274
+ 5eb0f098-ac0c-4693-8763-58fc2db89322,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t3000,0,0,1,1,0,0,1,0,1,0,1,0
275
+ 517f03dd-0cdb-44bf-bcf6-0c6d60830c10,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t3005,0,0,0,0,0,0,0,0,0,0,0,0
276
+ 2cbb9fa4-4d18-48f5-9019-c003ecc03683,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t3006,0,0,0,0,0,0,0,0,0,0,0,0
277
+ a1340763-f06c-4e70-8051-3d88fa8b0100,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t3007,0,0,0,0,0,0,0,0,0,0,0,0
278
+ 5d45adfb-7ec1-4da7-9a72-fadf120d73f4,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t3008,0,0,1,0,0,0,1,0,1,0,1,0
279
+ 90ab423d-ff44-4ca6-9a2c-77a4fc01e1ee,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t3009,0,0,0,0,0,0,0,0,0,0,0,0
280
+ f22cec6b-70ea-4d9d-bf62-fd596243bcd0,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t3016,0,0,0,0,0,0,0,0,0,0,0,0
281
+ 40ca727c-0f33-4d65-886e-4eb13bdfa30c,Tom_Cruise_on_Mission_Impossible_and_a_lifetime_of_learning_from_movies_BFI_in_Conversation,t3031,0,0,0,0,0,0,0,0,0,0,0,0
backend/preprocessed_cache/81a5fb6b1b9354ad5073dd5fca4d07f8_0732.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cac5665a082f88da259b9ac7bd6c31c5ebe7efd7e10dd9394320d502be1a4528
3
+ size 4817621
backend/preprocessed_cache/81a5fb6b1b9354ad5073dd5fca4d07f8_0753.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2352d475581773c1d8e820c4dde7e369ae31830f5e6c3d3d2ceadc7f04a48237
3
+ size 4817621
my-app/README.md ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # My App
2
+
3
+ This project integrates Gradio for webcam video recording and Streamlit for action tracking. It allows users to record video clips from their webcam and manage actions with timestamps.
4
+
5
+ ## Project Structure
6
+
7
+ ```
8
+ my-app
9
+ ├── app.py
10
+ ├── requirements.txt
11
+ └── README.md
12
+ ```
13
+
14
+ ## Installation
15
+
16
+ To set up the project, you need to install the required packages. Run the following command in your terminal:
17
+
18
+ ```
19
+ pip install -r requirements.txt
20
+ ```
21
+
22
+ ## Running the Application
23
+
24
+ To run the application, execute the following command:
25
+
26
+ ```
27
+ python app.py
28
+ ```
29
+
30
+ ## Features
31
+
32
+ - Live webcam feed with 5-second rolling clip uploads.
33
+ - Action tracking with timestamps.
34
+ - User-friendly interface for managing actions.
35
+
36
+ ## Dependencies
37
+
38
+ This project requires the following Python packages:
39
+
40
+ - Gradio
41
+ - OpenCV
42
+ - Streamlit
43
+
44
+ Make sure to have these installed before running the application.
my-app/requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ gradio
2
+ opencv-python
3
+ streamlit
4
+ pandas
requirement.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ streamlit
2
+ opencv-python
3
+ requests
4
+ numpy