Wenjiawang0312 commited on
Commit
d4e0afe
·
1 Parent(s): d1d5132
Files changed (3) hide show
  1. app.py +43 -31
  2. requirements.txt +0 -1
  3. test_dataset.py +36 -0
app.py CHANGED
@@ -15,41 +15,55 @@ def load_videos_from_huggingface():
15
 
16
  try:
17
  print("正在加载数据集: WenjiaWang/videoforuser...")
 
18
  DATASET = load_dataset("WenjiaWang/videoforuser", split="train")
19
  print(f"成功加载数据集,共 {len(DATASET)} 个视频")
20
 
21
  # 组织视频数据:按场景分组
22
  VIDEO_DATA = {}
23
 
24
- for idx, item in enumerate(DATASET):
25
- # 获取视频路径信息
26
- if 'video' in item:
27
- video_path = item['video']
28
- elif 'path' in item:
29
- video_path = item['path']
30
- else:
31
- print(f"警告: 第 {idx} 项没有视频路径字段")
32
- continue
33
-
34
- # 从路径中提取场景名和方法名
35
- # 假设路径格式类似: "videos/scene_name/method.mp4"
36
- path_parts = video_path.split('/')
37
- if len(path_parts) >= 2:
38
- scene_name = path_parts[-2] # 倒数第二部分是场景名
39
- file_name = path_parts[-1] # 最后部分是文件名
40
-
41
- # 提取方法名
42
- method_name = file_name.replace('.mp4', '')
43
 
44
- if scene_name not in VIDEO_DATA:
45
- VIDEO_DATA[scene_name] = {}
 
 
 
 
 
 
 
 
 
 
 
46
 
47
- # 存储视频信息(包括在dataset的索引)
48
- VIDEO_DATA[scene_name][method_name] = {
49
- 'index': idx,
50
- 'path': video_path,
51
- 'item': item
52
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
  print(f"组织完成,共 {len(VIDEO_DATA)} 个场景")
55
  return True
@@ -91,11 +105,9 @@ def get_videos_for_question(scene_name):
91
 
92
  # 获取视频数据
93
  video_info = scene_videos[method_name]
94
- video_item = video_info['item']
95
 
96
- # 从dataset item中获取视频文件
97
- if 'video' in video_item:
98
- videos[display_name] = video_item['video'] # 这应该是视频文件路径或对象
99
 
100
  method_mapping[display_name] = method_name
101
 
 
15
 
16
  try:
17
  print("正在加载数据集: WenjiaWang/videoforuser...")
18
+ # 不解码视频,只获取元数据
19
  DATASET = load_dataset("WenjiaWang/videoforuser", split="train")
20
  print(f"成功加载数据集,共 {len(DATASET)} 个视频")
21
 
22
  # 组织视频数据:按场景分组
23
  VIDEO_DATA = {}
24
 
25
+ # 直接访问数据集的底层数据,不触发视频解码
26
+ for idx in range(len(DATASET)):
27
+ try:
28
+ # 获取原始数据,不解码视频
29
+ item = DATASET[idx]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
+ # 获取视频路径信息 - 这里获取的是字典,包含 'path' 和 'bytes'
32
+ if 'video' in item and isinstance(item['video'], dict) and 'path' in item['video']:
33
+ video_path = item['video']['path']
34
+ video_bytes = item['video'].get('bytes', None)
35
+ elif 'video' in item and isinstance(item['video'], str):
36
+ video_path = item['video']
37
+ video_bytes = None
38
+ elif 'path' in item:
39
+ video_path = item['path']
40
+ video_bytes = None
41
+ else:
42
+ print(f"警告: 第 {idx} 项没有视频路径字段,跳过")
43
+ continue
44
 
45
+ # 从路径提取场景名和方法名
46
+ # 假设路径格式类似: "scene_name/method.mp4"
47
+ path_parts = video_path.split('/')
48
+ if len(path_parts) >= 2:
49
+ scene_name = path_parts[-2] # 倒数第二部分是场景名
50
+ file_name = path_parts[-1] # 最后部分是文件名
51
+
52
+ # 提取方法名
53
+ method_name = file_name.replace('.mp4', '')
54
+
55
+ if scene_name not in VIDEO_DATA:
56
+ VIDEO_DATA[scene_name] = {}
57
+
58
+ # 存储视频信息(包括在dataset中的索引和原始视频数据)
59
+ VIDEO_DATA[scene_name][method_name] = {
60
+ 'index': idx,
61
+ 'path': video_path,
62
+ 'video': item['video'] # 保存原始视频数据(字典格式)
63
+ }
64
+ except Exception as e:
65
+ print(f"处理第 {idx} 项时出错: {e}")
66
+ continue
67
 
68
  print(f"组织完成,共 {len(VIDEO_DATA)} 个场景")
69
  return True
 
105
 
106
  # 获取视频数据
107
  video_info = scene_videos[method_name]
 
108
 
109
+ # 直接使用保存的视频数据
110
+ videos[display_name] = video_info['video']
 
111
 
112
  method_mapping[display_name] = method_name
113
 
requirements.txt CHANGED
@@ -1,4 +1,3 @@
1
  gradio>=4.0.0
2
  datasets>=2.14.0
3
  huggingface_hub>=0.19.0
4
- torchcodec
 
1
  gradio>=4.0.0
2
  datasets>=2.14.0
3
  huggingface_hub>=0.19.0
 
test_dataset.py ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ 测试数据集加载逻辑
4
+ """
5
+ from datasets import load_dataset
6
+
7
+ print("正在加载数据集...")
8
+ try:
9
+ # 加载数据集但不解码视频
10
+ dataset = load_dataset("WenjiaWang/videoforuser", split="train")
11
+ print(f"✅ 成功加载数据集,共 {len(dataset)} 个视频")
12
+
13
+ # 测试访问第一个元素
14
+ print("\n测试访问第一个元素...")
15
+ item = dataset[0]
16
+ print(f"Keys: {item.keys()}")
17
+
18
+ if 'video' in item:
19
+ video_data = item['video']
20
+ print(f"Video type: {type(video_data)}")
21
+
22
+ if isinstance(video_data, dict):
23
+ print(f"Video dict keys: {video_data.keys()}")
24
+ if 'path' in video_data:
25
+ print(f"Video path: {video_data['path']}")
26
+ if 'bytes' in video_data:
27
+ print(f"Video bytes length: {len(video_data['bytes']) if video_data['bytes'] else 0}")
28
+ else:
29
+ print(f"Video data: {video_data}")
30
+
31
+ print("\n✅ 数据集结构测试成功!")
32
+
33
+ except Exception as e:
34
+ print(f"❌ 错误: {e}")
35
+ import traceback
36
+ traceback.print_exc()