Raffael-Kultyshev commited on
Commit
c3c48e6
·
1 Parent(s): 26c9f29

Add plots step by step - simple version

Browse files
Files changed (1) hide show
  1. app.py +87 -7
app.py CHANGED
@@ -1,16 +1,96 @@
1
- """
2
- Minimal test version
3
- """
4
- import gradio as gr
5
  from pathlib import Path
 
 
 
6
 
7
  DATA_DIR = Path(__file__).parent / "data"
8
  video_path = DATA_DIR / "video.mp4"
9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  with gr.Blocks() as demo:
11
- gr.Markdown("# Test")
12
- gr.Video(value=str(video_path) if video_path.exists() else None)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
  if __name__ == "__main__":
15
  demo.launch()
16
-
 
1
+ import json
 
 
 
2
  from pathlib import Path
3
+ import gradio as gr
4
+ import plotly.graph_objects as go
5
+ import plotly.io as pio
6
 
7
  DATA_DIR = Path(__file__).parent / "data"
8
  video_path = DATA_DIR / "video.mp4"
9
 
10
+ def load_data():
11
+ metadata = {}
12
+ end_effector = {}
13
+ try:
14
+ with open(DATA_DIR / "metadata.json", 'r') as f:
15
+ metadata = json.load(f)
16
+ except:
17
+ pass
18
+ try:
19
+ with open(DATA_DIR / "end_effector.json", 'r') as f:
20
+ end_effector = json.load(f)
21
+ except:
22
+ pass
23
+ return metadata, end_effector
24
+
25
+ def build_plot(metadata, end_effector, hand, metric):
26
+ fps = metadata.get('fps', 60)
27
+ frame_keys = sorted([int(k) for k in end_effector.keys() if str(k).isdigit()])
28
+
29
+ times = [i/fps for i in frame_keys]
30
+ values = []
31
+
32
+ for k in frame_keys:
33
+ ee = end_effector.get(str(k), {}) or {}
34
+ hd = ee.get(hand + "_hand")
35
+ if hd and isinstance(hd, dict):
36
+ pose = hd.get('pose_6dof', [])
37
+ if len(pose) >= 6:
38
+ if metric == "x_cm":
39
+ values.append(pose[0] * 100)
40
+ elif metric == "y_cm":
41
+ values.append(pose[1] * 100)
42
+ elif metric == "z_cm":
43
+ values.append(pose[2] * 100)
44
+ elif metric == "roll_deg":
45
+ values.append(pose[3] * 57.3)
46
+ elif metric == "pitch_deg":
47
+ values.append(pose[4] * 57.3)
48
+ elif metric == "yaw_deg":
49
+ values.append(pose[5] * 57.3)
50
+ else:
51
+ values.append(0)
52
+ else:
53
+ values.append(None)
54
+ else:
55
+ values.append(None)
56
+
57
+ if not times or not values:
58
+ return "<p>No data</p>"
59
+
60
+ fig = go.Figure()
61
+ fig.add_trace(go.Scatter(x=times, y=values, mode="lines"))
62
+ fig.update_layout(template="plotly_dark", height=250, margin=dict(l=20, r=20, t=30, b=20))
63
+ return pio.to_html(fig, include_plotlyjs="cdn", full_html=False)
64
+
65
+ metadata, end_effector = load_data()
66
+ total_frames = len(metadata.get('poses', []))
67
+ fps = metadata.get('fps', 60)
68
+
69
  with gr.Blocks() as demo:
70
+ gr.Markdown("# 🤖 Dynamic Intelligence - Human Demo Visualizer")
71
+ gr.Markdown(f"Frames: {total_frames}, FPS: {fps}")
72
+
73
+ gr.Video(value=str(video_path) if video_path.exists() else None, height=360)
74
+
75
+ gr.Markdown("### Left Hand")
76
+ with gr.Row():
77
+ gr.HTML(build_plot(metadata, end_effector, "left", "x_cm"))
78
+ gr.HTML(build_plot(metadata, end_effector, "left", "y_cm"))
79
+ gr.HTML(build_plot(metadata, end_effector, "left", "z_cm"))
80
+ with gr.Row():
81
+ gr.HTML(build_plot(metadata, end_effector, "left", "roll_deg"))
82
+ gr.HTML(build_plot(metadata, end_effector, "left", "pitch_deg"))
83
+ gr.HTML(build_plot(metadata, end_effector, "left", "yaw_deg"))
84
+
85
+ gr.Markdown("### Right Hand")
86
+ with gr.Row():
87
+ gr.HTML(build_plot(metadata, end_effector, "right", "x_cm"))
88
+ gr.HTML(build_plot(metadata, end_effector, "right", "y_cm"))
89
+ gr.HTML(build_plot(metadata, end_effector, "right", "z_cm"))
90
+ with gr.Row():
91
+ gr.HTML(build_plot(metadata, end_effector, "right", "roll_deg"))
92
+ gr.HTML(build_plot(metadata, end_effector, "right", "pitch_deg"))
93
+ gr.HTML(build_plot(metadata, end_effector, "right", "yaw_deg"))
94
 
95
  if __name__ == "__main__":
96
  demo.launch()