qqwjq1981 commited on
Commit
d124c09
·
verified ·
1 Parent(s): 005c78a

Upload 3 files

Browse files
Files changed (3) hide show
  1. app.py +71 -0
  2. requirements.txt +3 -0
  3. segments_full.json +342 -0
app.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ # --- app.py ---
3
+ import json
4
+ import math
5
+ import gradio as gr
6
+ from PIL import Image
7
+ import random
8
+
9
+ # Load segments JSON
10
+ def load_segments():
11
+ with open("segments_full.json", "r", encoding="utf-8") as f:
12
+ segments = json.load(f)
13
+ return segments
14
+
15
+ # Simulated keyframe image generator (use local placeholder or generate random colors)
16
+ def get_placeholder_image(seed):
17
+ random.seed(seed)
18
+ img = Image.new("RGB", (256, 144), color=(random.randint(100,255), random.randint(100,255), random.randint(100,255)))
19
+ return img
20
+
21
+ # UI component for a single segment row
22
+ def segment_display(segment):
23
+ description = segment["description"]
24
+ seg_id = segment["segment_id"]
25
+ row = [f"Segment {seg_id}", description]
26
+ for i in range(3):
27
+ img = get_placeholder_image(seed=(seg_id * 10 + i))
28
+ row.append(img)
29
+ return row
30
+
31
+ # Pagination logic
32
+ def paginate_segments(page=1, page_size=15):
33
+ segments = load_segments()
34
+ total = len(segments)
35
+ max_page = math.ceil(total / page_size)
36
+ start = (page - 1) * page_size
37
+ end = start + page_size
38
+ subset = segments[start:end]
39
+
40
+ headers = ["Segment ID", "Description", "Candidate 1", "Candidate 2", "Candidate 3"]
41
+ data = [segment_display(seg) for seg in subset]
42
+ return headers, data, max_page
43
+
44
+ # Gradio interface
45
+ def build_interface():
46
+ with gr.Blocks() as demo:
47
+ gr.Markdown("## 🎬 Keyframe Candidate Viewer")
48
+ page_state = gr.State(1)
49
+ table = gr.Dataframe(headers=[], datatype=["str", "str", "image", "image", "image"], row_count=15)
50
+ total_pages_text = gr.Textbox(label="Page Info", interactive=False)
51
+
52
+ def update(page):
53
+ headers, rows, max_page = paginate_segments(page)
54
+ return gr.update(headers=headers, value=rows), f"Page {page} of {max_page}", page
55
+
56
+ prev_btn = gr.Button("⬅ Prev")
57
+ next_btn = gr.Button("Next ➡")
58
+
59
+ table.change(fn=lambda: None, inputs=[], outputs=[])
60
+ prev_btn.click(fn=lambda p: max(1, p - 1), inputs=page_state, outputs=page_state).then(update, inputs=page_state, outputs=[table, total_pages_text, page_state])
61
+ next_btn.click(fn=lambda p: p + 1, inputs=page_state, outputs=page_state).then(update, inputs=page_state, outputs=[table, total_pages_text, page_state])
62
+
63
+ # Initial load
64
+ demo.load(fn=update, inputs=page_state, outputs=[table, total_pages_text, page_state])
65
+
66
+ return demo
67
+
68
+ # Launch app
69
+ if __name__ == "__main__":
70
+ demo = build_interface()
71
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ # --- requirements.txt ---
2
+ gradio
3
+ Pillow
segments_full.json ADDED
@@ -0,0 +1,342 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "segment_id": 1,
4
+ "description": "引子:夜晚空无一人的宜博物馆内,太阳人石刻穿看新石器时代衣服,带着边组边跳,头发也是墙哈风,全景展现又物所处大环境,其他文物也在做着可爱有趣的小动作。",
5
+ "music_effect": "宜当地特色乐器共同演奏出匹配rap的底乐,比如宜丝竹、锣鼓艺术等。",
6
+ "narration": "太阳人(四川话rap) ,听起 我是太阳人石刻超有气 穿越悠悠岁月带着底气 西南文化里头我是硬货等级",
7
+ "speaker": "太阳人",
8
+ "speak_id": "speak_0",
9
+ "duration": 10,
10
+ "frame_image": ""
11
+ },
12
+ {
13
+ "segment_id": 2,
14
+ "description": "太阳人注意到了一个格外突出的小家伙,它在一旁给太阳人鼓掌。太阳人来到他身边问: 博小圆满脸笑意的回答。太阳人不解,看看博小穿着打扮长相都他们不一样,于是好奇的跟它聊了起来。",
15
+ "music_effect": "",
16
+ "narration": "太阳人:你是谁?我活了七千多年了,怎么从来没见过你? 博小翼:您好,太阳人 ,我叫博小翼,是今天新未来的。 太阳人:你认得我 博小看起来也不想鸟啊?这么潮流的现代产物也能进博物馆了?",
17
+ "speaker": "太阳人/博小翼",
18
+ "speak_id": "speak_1",
19
+ "duration": 3,
20
+ "frame_image": ""
21
+ },
22
+ {
23
+ "segment_id": 3,
24
+ "description": "先给到博小介绍自己时认真的神情,再加入实拍操作步骤的画面展现。比如怎么在文字框输入文字提问,如何发语音,拍照上传的按钮在哪里等等。同时产品功能做重点字幕展示。",
25
+ "music_effect": "",
26
+ "narration": "博小翼:您误会了,我不是鸟,也不是展品,我是国内首款交互式讲解类大模型,拥有国内全游的攻略,我能把你们的资料信息讲给游客听,他们可以选择在对话框打文字、发语言的方式来问我,也可以拍一张你们的照片上传来了解。",
27
+ "speaker": "博小翼",
28
+ "speak_id": "speak_2",
29
+ "duration": 15,
30
+ "frame_image": ""
31
+ },
32
+ {
33
+ "segment_id": 4,
34
+ "description": "太阳人恍然大悟的表情,右手握在左手上。",
35
+ "music_effect": "",
36
+ "narration": "太阳人:我晓得了,你是。",
37
+ "speaker": "太阳人",
38
+ "speak_id": "speak_3",
39
+ "duration": 2,
40
+ "frame_image": ""
41
+ },
42
+ {
43
+ "segment_id": 5,
44
+ "description": "博小第一区区导游能力,不足挂齿的臭屁表情。再昂着头,略带神气的继续介绍自己。文字包装展示产品功能点。",
45
+ "music_effect": "",
46
+ "narration": "博小区:不只是守游哦,我还能为游客答疑解,根据他们喜欢的历史话题进行深度控,把一些隐藏的故事,延伸的知识讲给他们听。",
47
+ "speaker": "博小翼",
48
+ "speak_id": "speak_4",
49
+ "duration": 15,
50
+ "frame_image": ""
51
+ },
52
+ {
53
+ "segment_id": 8,
54
+ "description": "太阳人新博小国的介绍,对它有点儿感兴趣了。",
55
+ "music_effect": "",
56
+ "narration": "太阳人:这么厉害?你还是有点文化的嘛。",
57
+ "speaker": "太阳人",
58
+ "speak_id": "speak_5",
59
+ "duration": 2,
60
+ "frame_image": ""
61
+ },
62
+ {
63
+ "segment_id": 9,
64
+ "description": "|博物馆地图定位示意展现游客移动位置,实拍文博讲解大模型界面,展示游客提供信息的界面,以及深入追问信息的应答截面,同时包装字幕条展示产品功能点。",
65
+ "music_effect": "",
66
+ "narration": "博小翼:多謝带专奖,我还能凭借精确的位置定位技术。根据游客所在方位,化身他们私人讲解小助手,提供伴随式讲解。比如他从你身边走到你旁边的文物身边,我都能精准的捕捉到我,给他提供实时的讲解。",
67
+ "speaker": "博小翼",
68
+ "speak_id": "speak_6",
69
+ "duration": 22,
70
+ "frame_image": ""
71
+ },
72
+ {
73
+ "segment_id": 10,
74
+ "description": "实拍操作流程及界面展示画面:宜博物馆游客参观游览越时画面,体现人来人往,走马观花、",
75
+ "music_effect": "",
76
+ "narration": "博小翼:同时呢,游客还能根据自己的喜好手动点击感兴趣的文物,瞬间就能获取语音或者文字形式的详细讲解,满足不同游客的多元需求和参观节奏,让游客的每一次观展之旅都能收获满满,深入透彻地感悟历史文化的魅力与精髓,不再是走马观花的体验。",
77
+ "speaker": "博小翼",
78
+ "speak_id": "speak_7",
79
+ "duration": 25,
80
+ "frame_image": ""
81
+ },
82
+ {
83
+ "segment_id": 11,
84
+ "description": "博小的介绍,引起了太阳人的好奇,同时表示怀,于是表示要考考博小言。",
85
+ "music_effect": "",
86
+ "narration": "太阳人: ,这么全能?那我未考考你。",
87
+ "speaker": "太阳人",
88
+ "speak_id": "speak_8",
89
+ "duration": null,
90
+ "frame_image": ""
91
+ },
92
+ {
93
+ "segment_id": 12,
94
+ "description": "两人一言一语的回合在聊天互动",
95
+ "music_effect": "",
96
+ "narration": "博小翼:没问题,前辈请出招。 太阳人行,那你先来说说我,我听听对��对。",
97
+ "speaker": "博小翼/太阳人",
98
+ "speak_id": "speak_9",
99
+ "duration": null,
100
+ "frame_image": ""
101
+ },
102
+ {
103
+ "segment_id": 13,
104
+ "description": "博小介绍的时候,太阳人时不时地点头表示它说的不错。在博小说到镇馆之宝的时候,太阳人表情神气又做作。同时在太阳人耳边出现文字框,表示文物信息点。",
105
+ "music_effect": "文字框弹出岩效",
106
+ "narration": "博小翼:(深度思考后)/(仔细想了想之后)太阳人石麵。您今年大概7000岁啦,是直博物馆的镇馆之宝。",
107
+ "speaker": "博小翼",
108
+ "speak_id": "speak_10",
109
+ "duration": null,
110
+ "frame_image": ""
111
+ },
112
+ {
113
+ "segment_id": 14,
114
+ "description": "随着博小调的介绍,太阳人石刻也在做看一些可爱活泼的动作展示自己,比如比划自己多高,多宽。",
115
+ "music_effect": "底乐从现代感音乐转为新石器时代古补的音乐",
116
+ "narration": "博小调:身高105厘米,宽20厘米,12厘米,本体是一块长方形褐色砂岩石,",
117
+ "speaker": "博小翼",
118
+ "speak_id": "speak_11",
119
+ "duration": 5,
120
+ "frame_image": ""
121
+ },
122
+ {
123
+ "segment_id": 15,
124
+ "description": "推镜头越来越近的展示太阳人石刻上的图案,通过图案转场",
125
+ "music_effect": "",
126
+ "narration": "博小翼:通过你身上精美的图案,",
127
+ "speaker": "博小翼",
128
+ "speak_id": "speak_12",
129
+ "duration": null,
130
+ "frame_image": ""
131
+ },
132
+ {
133
+ "segment_id": 16,
134
+ "description": "下一场景展现新石器时代先民们生活场景、祭祀画面、追逐太阳,对太阳表示热爱和恭敬的画面,",
135
+ "music_effect": "生活场景环境言。声",
136
+ "narration": "博小翼:可以窥见先民们的生活场景和精神世界。",
137
+ "speaker": "博小翼",
138
+ "speak_id": "speak_13",
139
+ "duration": null,
140
+ "frame_image": ""
141
+ },
142
+ {
143
+ "segment_id": 17,
144
+ "description": "通过追逐太阳的先民们肢体语言转场,下一幅画面先民们载歌载舞的画面,展现他们热烈的原始生命力画面,通过跃动的火苗光芒转场。",
145
+ "music_effect": "载歌载舞的音乐声环境",
146
+ "narration": "博小翼:感受到他们对太阳的崇拜和对生命的热爱。",
147
+ "speaker": "博小翼",
148
+ "speak_id": "speak_14",
149
+ "duration": null,
150
+ "frame_image": ""
151
+ },
152
+ {
153
+ "segment_id": 18,
154
+ "description": "|太阳人头像发放闪储着神性的光芒,双手叉腰,表情神气又骄傲。",
155
+ "music_effect": "",
156
+ "narration": "博小因此有字者亲切地称呼你为“太阳神像”。",
157
+ "speaker": "博小翼",
158
+ "speak_id": "speak_15",
159
+ "duration": null,
160
+ "frame_image": ""
161
+ },
162
+ {
163
+ "segment_id": 19,
164
+ "description": "太阳人凑近了一些博小,给了一点压力,一副我要继续考考你的表情",
165
+ "music_effect": "",
166
+ "narration": "太阳人:那你知道我生活的时代穿什么样子的衣服吗?",
167
+ "speaker": "太阳人",
168
+ "speak_id": "speak_16",
169
+ "duration": null,
170
+ "frame_image": ""
171
+ },
172
+ {
173
+ "segment_id": 20,
174
+ "description": "博小圆一副这算,根本难不倒我的表情,回答了太阳人的问题。|素材画面展现新石器时代人们的穿着是什么样的,",
175
+ "music_effect": "",
176
+ "narration": "博小:当然了,你那个时代的衣服通常是披风、裙子和绑等,基本没有什么复杂的剪,而是直接用动物的皮毛或者植物纤维,比如麻、草等围在身上,有时候会用针或者石针来缝合。",
177
+ "speaker": "博小翼",
178
+ "speak_id": "speak_17",
179
+ "duration": 20,
180
+ "frame_image": ""
181
+ },
182
+ {
183
+ "segment_id": 21,
184
+ "description": "太阳人继续追问,整个身体更靠近博小關了,小施加压力的感觉,我看你这次还能不能回答上来的表情。",
185
+ "music_effect": "",
186
+ "narration": "太阳人:用什么东西吃饭呢?",
187
+ "speaker": "太阳人",
188
+ "speak_id": "speak_18",
189
+ "duration": 2,
190
+ "frame_image": ""
191
+ },
192
+ {
193
+ "segment_id": 22,
194
+ "description": "博小泰然自若又底气十足的说出自己掌握到的信息,同时匹配相应素材画面来展示提到的餐具及食物。",
195
+ "music_effect": "",
196
+ "narration": "博小区:用来吃饭的餐具有石器、陶器、画、木器和竹圖吃的东西基本以素食为主,包括谷物、豆类、蔬菜、水果等。",
197
+ "speaker": "博小翼",
198
+ "speak_id": "speak_19",
199
+ "duration": 15,
200
+ "frame_image": ""
201
+ },
202
+ {
203
+ "segment_id": 23,
204
+ "description": "间别转场,从太阳人神气的表情转到博小黑讲解时认真的小表情上,随着博小调的选自落,太阳人表示不错,但是需要再考验考验它。",
205
+ "music_effect": "",
206
+ "narration": "太阳人:不错嘛,我已经有点儿喜欢你了,不过想当我的间事,光做我的功课可不行,你知道秦王幸命钟在那里。?不过你来第一天,对场馆的地形可否了解呢?你知道秦王命在家里吗?",
207
+ "speaker": "太阳人",
208
+ "speak_id": "speak_20",
209
+ "duration": 5,
210
+ "frame_image": ""
211
+ },
212
+ {
213
+ "segment_id": 24,
214
+ "description": "博小圆表示根本沒在怕,它在前方空中为太阳人引路、通过拐角处转场,他们从远古西陵厅来到",
215
+ "music_effect": "现代感轻松活泼言乐",
216
+ "narration": "博小调:当然了,我们目前在远古西陵景区,它在巴楚夷陵厅,我知道一条近酒儿,带你过去。",
217
+ "speaker": "博小翼",
218
+ "speak_id": "speak_21",
219
+ "duration": null,
220
+ "frame_image": ""
221
+ },
222
+ {
223
+ "segment_id": 25,
224
+ "description": "在他们行走时,地图包装实时展示标注他们位置,同时重点字幕标注。",
225
+ "music_effect": "",
226
+ "narration": "太阳人:行啊,这近道,连我这老员工都不知道",
227
+ "speaker": "太阳人",
228
+ "speak_id": "speak_22",
229
+ "duration": 20,
230
+ "frame_image": ""
231
+ },
232
+ {
233
+ "segment_id": 26,
234
+ "description": "画面展示整个厅的环境,再分别展示不同的文物身影、接头扫过,他们在械柜里跟博小爽和太阳人打招呼。同时重点标注秦王命甬钟的位置。",
235
+ "music_effect": "",
236
+ "narration": "博小: ,现在我们就到了,这个厅有两周到两汉时期。五颜六色的铜器、漆器、和葬俗,展现了屈原文化、昭君文化和三国文化的靓丽色彩!站在位的就是泰王卑命钟了。",
237
+ "speaker": "博小翼",
238
+ "speak_id": "speak_23",
239
+ "duration": null,
240
+ "frame_image": ""
241
+ },
242
+ {
243
+ "segment_id": 27,
244
+ "description": "太阳人表示惊奇,原来还有自己不知的路线。",
245
+ "music_effect": "",
246
+ "narration": "太阳人:这么快,以后找老钟可方便多了!",
247
+ "speaker": "太阳人",
248
+ "speak_id": "speak_24",
249
+ "duration": 2,
250
+ "frame_image": ""
251
+ },
252
+ {
253
+ "segment_id": 29,
254
+ "description": "博小听完太阳人的话,。",
255
+ "music_effect": "",
256
+ "narration": "太阳人:有点东西,全能ACE在说你了!不过我可不想听太多百科上的东西,你对这些藏品背后的故事有多少了解",
257
+ "speaker": "太阳人",
258
+ "speak_id": "speak_25",
259
+ "duration": null,
260
+ "frame_image": ""
261
+ },
262
+ {
263
+ "segment_id": 30,
264
+ "description": "打完招呼后,太阳人这时已经对博小满意了。所以对它表示认可,但是还想继续了解一下博小,于是继续问它一些问题。",
265
+ "music_effect": "",
266
+ "narration": "博小:当然,有了deepseek的加持,我可是对各位的历史价值和文化价值了如指掌,而且我可不是只会百科的智能体,会讲故事,能够接受游客追问!",
267
+ "speaker": "博小翼",
268
+ "speak_id": "speak_26",
269
+ "duration": 70,
270
+ "frame_image": ""
271
+ },
272
+ {
273
+ "segment_id": 31,
274
+ "description": "博小舞讲话的时候,关于各个文物相关的文化资料相关故事。问答的语句等文字浮现在空间里,太阳人,秦王卑命铜钟看完后表示很惊奇,发出惊",
275
+ "music_effect": "",
276
+ "narration": "太阳人,泰王铜甬钟:、游客一定会为此多看看我们的。",
277
+ "speaker": "太阳人/秦王卑命铜钟",
278
+ "speak_id": "speak_27",
279
+ "duration": null,
280
+ "frame_image": ""
281
+ },
282
+ {
283
+ "segment_id": 32,
284
+ "description": "太阳人和博小跟秦王本命铜后,三人相打招呼的画面。",
285
+ "music_effect": "",
286
+ "narration": "太阳人:你这么优秀,不会是来跟我争夺镇馆之宝位置的",
287
+ "speaker": "太阳人",
288
+ "speak_id": "speak_28",
289
+ "duration": 3,
290
+ "frame_image": ""
291
+ },
292
+ {
293
+ "segment_id": 33,
294
+ "description": "博小圆赶紧报头否认,表示自己的作用是什么,实拍游客们参观宜博物馆的画面,游客们游览像走马观花,没办法深入了解文物信息和历史。",
295
+ "music_effect": "",
296
+ "narration": "? 博小算:当然不是,我是来加入你们的,让游客们能更了解你们,更喜欢你们,增加他们的游览体验,毕竟天南海北的游客来一次也不容易,刚好我也能解决博物馆导游不足。讲解不深入的问题。",
297
+ "speaker": "博小翼",
298
+ "speak_id": "speak_29",
299
+ "duration": 20,
300
+ "frame_image": ""
301
+ },
302
+ {
303
+ "segment_id": 34,
304
+ "description": "太阳人伸出自己的小手递给博小,表示对它的接纳秦王卑金铜钟随后也伸出了自己的手,博小一手握住一个,三人开心的笑了。",
305
+ "music_effect": "",
306
+ "narration": "太阳人:goodboy,我老太阳认可你啦,从今以后,你就是我们的好朋友了,走,带你去认识一下我们的同事们吧!",
307
+ "speaker": "太阳人",
308
+ "speak_id": "speak_30",
309
+ "duration": 3,
310
+ "frame_image": ""
311
+ },
312
+ {
313
+ "segment_id": 35,
314
+ "description": "博小圆和太阳人,秦王命铜钟一起在展馆内按个文物们打招呼,一会儿就串成了一条线,向另一个走去。画面定格或隐黑,乐播放也是要结束的感觉。",
315
+ "music_effect": "",
316
+ "narration": "",
317
+ "speaker": "",
318
+ "speak_id": "speak_31",
319
+ "duration": 3,
320
+ "frame_image": ""
321
+ },
322
+ {
323
+ "segment_id": 36,
324
+ "description": "|���观众以为影片结束的时候,博小跳出来,对着镜头说话,说话同时,数据信息以重点字形式",
325
+ "music_effect": "",
326
+ "narration": "博小(rap):走马观花不嗨皮,导游不足我顶起!自助讲解有问题,我的智能来升级!这就是我,一个集智慧与实用于一身的全能ACE文物讲解大模型。",
327
+ "speaker": "博小翼",
328
+ "speak_id": "speak_32",
329
+ "duration": 15,
330
+ "frame_image": ""
331
+ },
332
+ {
333
+ "segment_id": 37,
334
+ "description": "说完后从屏幕中间往屏幕右边走去,快走出画面的时候,脚在画面外,头在画面右侧边边看看屏幕大家挥手说拜拜,展现博小麗活泼可爱,古灵怪的一面",
335
+ "music_effect": "",
336
+ "narration": "博小:有空要来听我讲故事,拜拜~",
337
+ "speaker": "博小翼",
338
+ "speak_id": "speak_33",
339
+ "duration": null,
340
+ "frame_image": ""
341
+ }
342
+ ]