如何从视频文件名提取类名并生成带标签的TXT文件?
解决方案
一、生成目标格式标签文件的代码
你的原代码仅遍历了一级目录,未深入子文件夹,且存在语法逻辑错误。以下是修正后的代码,可直接生成你需要的格式:
import os # 数据集根路径 root_path = '/video' # 存储类名到编号的映射 class_to_idx = {} # 存储最终写入内容 output_lines = [] # 遍历根目录下的类文件夹,从1开始分配类编号 for class_idx, class_name in enumerate(os.listdir(root_path), start=1): class_dir = os.path.join(root_path, class_name) if not os.path.isdir(class_dir): continue # 跳过非文件夹项 class_to_idx[class_name] = class_idx # 遍历当前类文件夹下的视频文件 for video_file in os.listdir(class_dir): if video_file.endswith('.avi'): # 移除视频文件后缀 video_name = os.path.splitext(video_file)[0] # 拼接成目标格式行 line = f"{class_name}/{video_name} {class_idx}" output_lines.append(line) # 写入到result.txt文件 with open('result.txt', 'w', encoding='utf-8') as f: f.write('\n'.join(output_lines))
这段代码的核心逻辑:
- 自动识别
/video下的所有类文件夹(drink、eat等) - 为每个类分配从1开始的唯一编号
- 遍历每个类下的avi视频,生成
类名/视频名 类编号格式的条目 - 将所有条目统一写入目标txt文件
二、关于项目中vid3d的作用
在该3D CNN动作识别项目里,vid3d是VideoTo3D类的实例,核心作用是将视频文件转换为3D张量数据。3D CNN需要处理包含时间维度的时空数据,而视频由连续帧组成,vid3d会提取视频帧、规整到统一尺寸,再将帧序列堆叠成(帧数, 高度, 宽度, 通道数)形状的3D数组,以此作为3D CNN模型的输入数据。
三、修改videoto3d.py和3dcnn.py的建议
1. 调整videoto3d.py
可以在VideoTo3D类中新增方法,整合标签生成逻辑:
- 新增
generate_label_file方法,复用上述标签生成代码,直接在视频预处理阶段生成标签文件 - 或者在
video3d(提取视频帧的核心方法)中,同时返回帧数据和对应的类标签,方便后续训练时直接调用
2. 调整3dcnn.py
在数据集加载环节,直接读取你生成的result.txt来获取视频路径与标签映射:
- 逐行读取
result.txt,拆分出视频相对路径和对应标签 - 调用
vid3d加载对应视频的3D张量数据 - 将数据与标签整理成模型训练所需的数据集格式
内容的提问来源于stack exchange,提问作者amy
相关产品推荐
相关产品推荐

