You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从视频文件名提取类名并生成带标签的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 03:52:17