将视频数据集转换为帧序列,并划分为训练集,验证集与测试集(以HMDB51为例)

hmdb51数据集,视频+标签 hmdb51;行为识别 阅读详情
AI摘要

本文介绍了如何从HMDB51原始avi视频中抽取帧序列,并将其转换为jpg格式,以及如何对帧序列进行7:1:2的比例划分,分别存入训练、验证和测试数据集中。使用了OpenCV(cv2),PIL,和os等库进行操作。

首先需要观察数据集的存储路径
HMDB51原始存储是路径+类(文件夹)+视频(avi视频)
提取帧序列我们需要转换为路径+类+视频名(文件夹)+帧序列(jpg图片)
划分数据集后存储路径为路径+训练/验证/测试(文件夹)+类(文件夹)+帧序列

提取帧序列代码:

import os
import numpy as np
from PIL import Image
import cv2
import stat
# 将avi数据集视频抽帧,转换为帧序列数据集
# 帧数间隔
frameRate=1

# videoFileName为视频的总路径,save_paths为保存路径+类
# videoFileName为E:\Master's period\Gesture dataset\HMDB51\hmdb51\brush_hair\April_09_brush_hair_u_nm_np1_ba_goo_0.avi
# save_path为E:\Master's period\Gesture dataset\HMDB51_frame\brush_hair\
def splitFrames(videoFileName,save_path):
	# 打开视频文件
    cap = cv2. VideoCapture(videoFileName) 
    temp1 = str(videoFileName.split("/")[-2])
    temp2 = str(videoFileName.split("/")[-1])
    save_dir = os.path.join(save_path,temp1,temp2)
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)
    num = frameRate
    while True:
        # success 表示是否成功,data是当前帧的图像数据;.read读取一帧图像,移动到下一帧
        success, data = cap.read()
        if not success:
            break
        if num % frameRate == 0:
            data = np.array(data)[:, :, ::-1]
            im = Image.fromarray(data) # 重建图像
            im.save(save_dir + '/' +str(int(num/frameRate))+".jpg") # 保存当前帧的静态图像
        num = num + 1
    print("保存成功")
    cap.release()


# 初始文件夹
file_path=r"E:\Master's period\Gesture dataset\HMDB51\hmdb51"
os.chmod(file_path,stat.S_IRWXU)
# 移动后文件夹
save_path=r"E:\Master's period\Gesture dataset\HMDB51_frame"
# file_dirs为所有类的列表
file_dirs=os.listdir(file_path)
# 定义要保存的路径dir
origion_paths=[]
save_paths=[]
# 循环所有类,添加到初始文件夹与保存文件夹下
for path in file_dirs:
    # origion_paths为初始路径+类
    origion_paths.append(file_path + "/" + path + "/")
    # save_paths为保存路径+brush_hair序列
    # save_paths.append(save_path + "/" + path + "/")
# 在类别下获取两个,i为序列,origion_path为获取的每个路径
# 如0 E:\Master's period\Gesture dataset\HMDB51\hmdb51\brush_hair
for i,origion_path in enumerate(origion_paths):
    # 获得原始路径下的所有图片的name(默认路径下都是图片)
    # image_list为brush_hair类别下所有视频名字序列
    image_list = os.listdir(origion_path)
    image_Dir = []
    for x, y in enumerate(image_list):
        # image_Dir为E:\Master's period\Gesture dataset\HMDB51\hmdb51\brush_hair\April_09_brush_hair_u_nm_np1_ba_goo_0.avi
        image_Dir.append(os.path.join(origion_path, y))
        splitFrames(image_Dir[x],save_path)

print("all datas has been moved successfully!")

划分数据集代码:

import os
import random
import shutil

# 将帧序列按7:1:2划分为训练集,验证集与测试集

fileDir = "E:/Master's period/Gesture dataset/HMDB51_frame/"
trainDir = "E:/Master's period/Gesture dataset/HDMB51_dataset/train/"
valDir = "E:/Master's period/Gesture dataset/HDMB51_dataset/val/"
testDir = "E:/Master's period/Gesture dataset/HDMB51_dataset/test/"


def copyFile(fileDir,trainDir,valDir,testDir):
    # 取图片原始路径
    # lei为所有类别目录
    lei = os.listdir(fileDir)
    trainpath = []
    valpath = []
    testpath = []
    filepath = []
    for x in lei:
        # trainpath里存放的是E:/Master's period/Gesture dataset/HDMB51_dataset/train/brush_hair/
        trainpath.append(trainDir + x + "/")
        valpath.append(valDir + x + "/")
        testpath.append(testDir + x + "/")
        filepath.append(fileDir + x + "/")
    for i,path in enumerate(filepath):
        # path为E:/Master's period/Gesture dataset/HMDB51_frame/brush_hair/
        pathDir = os.listdir(path)
        num = len(pathDir)
        # 移动train
        picknumber1 = int(num * 0.7)
        # pathDir为总视频的list
        sample1 = random.sample(pathDir,picknumber1)
        for name in sample1:
            dile_dir = os.path.join(path, name)
            save_dir = os.path.join(trainpath[i], name)
            shutil.move(dile_dir,save_dir)
        print("train移动完成")
        # 移动val
        pathDir = os.listdir(path)
        picknumber2 = int(num * 0.1)
        sample2 = random.sample(pathDir,picknumber2)
        for name in sample2:
            dile_dir = os.path.join(path, name)
            save_dir = os.path.join(valpath[i], name)
            shutil.move(dile_dir,save_dir)
        print("val移动完成")
        # 移动test,将文件夹下剩余文件都移动(防止有残余)
        pathDir = os.listdir(path)
        # picknumber3 = int(num * 0.2)
        # sample3 = random.sample(pathDir,picknumber3)
        for name in pathDir:
            dile_dir = os.path.join(path, name)
            save_dir = os.path.join(testpath[i], name)
            shutil.move(dile_dir, save_dir)
        print("test移动完成")


if __name__ =='__main__':
    copyFile(fileDir,trainDir,valDir,testDir)

HMDB51数据集实战:从视频下载到行为识别完整流程(附避坑指南) 本文详细介绍了HMDB51数据集在行为识别任务中的完整处理流程,包括视频下载、预处理、标注解析以及与MMAction2框架的集成。通过实战案例和避坑指南,帮助开发者高效处理这一经典数据集,提升行为识别模型的训练效果。特别针对视频解码、内存优化等常见问题提供了专业解决方案。 阅读详情

相关推荐

实战:如何用TAO Toolkit的CV Docker镜像快速微调一个动作识别模型(以HMDB51数据集为例)

本文详细介绍了如何使用TAO Toolkit的CV Docker镜像快速微调动作识别模型,以HMDB51数据集为例。从环境准备、数据集处理到模型微调、评估优化及部署实战,手把手教你高效完成迁移学习任务,特别适合计算机视觉开发者快速上手TAO Toolkit。

weixin_42663213的博客 145

『深度数据』视频分类数据集·HMDB51介绍

0.背景 主要的视频分类数据集如表所示: 本文详细介绍一个小型方便使用的数据集HMDB51,数据量小,方便使用 1. HMDB51介绍 HMDB51包含51类动作,共有6849个视频,每个动作至少包含51个视频,分辨率320*240,。来自于YouTube,google视频等,共2G. 主页地址:http://serre-lab.clps.brown.edu/resou...

简明AI工作室 2万+

保姆级教程:手把手教你下载和处理Kinetics-400视频数据集(附Python代码)

本文提供了一份详细的Kinetics-400视频数据集处理指南,涵盖从数据集下载到帧提取的全流程。通过Python代码示例,介绍了高效获取和预处理视频数据的方法,包括多进程加速、视频格式兼容性处理等实用技巧,适合计算机视觉研究者和开发者快速上手。

weixin_29079643的博客 248

HMDB51数据集划分训练集测试集

dataset_path = "/home/db/下载/HMDB51"

Will_u_win的博客 934

UCF101和HMDB51数据集的处理 for Human Action Recognition

〇、数据集简介: 一、数据集获取: 二、数据集解压缩: 三、数据集预处理(划分): 四、其他:

Amazingren的博客 9247

Videomae模型复现(以HMDB51数据集为例)

基于HMDB51数据集的Videomae模型复现

autistic_savant1的博客 1579

pytorch-video-recognition实战:UCF101与HMDB51数据集预处理全攻略

pytorch-video-recognition是一个基于PyTorch实现的视频动作识别项目,支持C3D、R3D、R2Plus1D等多种模型,专为UCF101和HMDB51等视频数据集设计。本文将详细介绍如何使用该项目进行数据集预处理,帮助新手快速上手视频动作识别任务。 ## 一、数据集简介:UCF101与HMDB51 视频动作识别是计算机视觉领域的重要任务,而高质量的数据集是训练模型的基

gitblog_00814的博客 340

人类行为识别 - 使用I3D或C3D模型在HMDB51数据集上进行人类行为识别任务。

在本文中,我们介绍了如何使用I3D和C3D模型在HMDB51数据集上进行人类行为识别任务,并提供了Python代码实现。然后,我们分别使用I3D和C3D模型进行人类行为识别任务,并对模型进行了训练和评估。在实际应用中,收集和标注数据需要耗费大量的时间和成本,因此如何有效地使用现有的数据是一个重要的研究方向。随着计算能力的提高和数据集的扩大,我们可以期待更加准确和鲁棒的人类行为识别模型的出现。通过使用I3D和C3D模型,我们可以识别人类在视频中的不同行为,这对于视频监控、自动驾驶和人机交互等应用非常有用。

斌擎科技 2075

DeepSeek-R1-Distill-Qwen-7B_rai_1.9.0_m_1.0.1_npu vs 完整版DeepSeek-R1:蒸馏模型与旗舰模型的差距有多大?

**DeepSeek-R1-Distill-Qwen-7B_rai_1.9.0_m_1.0.1_npu** 是一个基于 Qwen-2.5-7B 架构、由旗舰推理模型 DeepSeek-R1 蒸馏而来,并针对 NPU 硬件做过推理适配的 7B 小模型。它用不到旗舰模型 1% 的参数规模,保留了 R1 标志性的"深度思考"推理风格。本文将帮新手快速看懂:蒸馏模型与完整版 DeepSeek-R1 到底差

gitblog_00703的博客 810

使用YOLOv10进行基于HMDB51数据集的动作识别:深度学习实现与UI界面展示

HMDB51(Human Motion Database 51)是一个广泛应用于动作识别领域的视频数据集,包含51个动作类别,每个类别包含约101个视频样本,覆盖了多种复杂的动作,如跑步、游泳、踢腿、做瑜伽等。该数据集共计约7000个视频样本,分为训练集和测试集。HMDB51数据集中的视频具有不同的分辨率和场景,可以模拟实际应用中的多种情况。bash复制编辑HMDB51├── test│ └── ...├── train│ └── ...每个类别文件夹(如)包含该类别的多个视频样本。

YOLO 525

3D-ResNet行为识别实战:从视频理解到模型部署全解析

卷积神经网络(CNN)是计算机视觉领域的核心架构,通过卷积核在空间维度提取特征。3D卷积神经网络(3D-CNN)将这一原理扩展至时间维度,使其能够同时处理视频的空间(长、宽)和时间(帧序列)信息,从而学习时空特征。这项技术的核心价值在于实现了端到端的视频内容理解,无需依赖复杂的姿态估计等中间步骤,在精度与效率间取得了良好平衡。其典型应用场景包括监控视频中的异常行为检测、人机交互动作识别以及体育视频分析等。本文以3D-ResNet这一经典架构为例,深入剖析其项目结构、数据预处理流程、模型训练技巧及推理部署方案

weixin_34326179的博客 472

Ryujinx Switch 模拟器怎么用:固件安装、加载提速与常见问题排查

Ryujinx 是一个用 C# 编写的开源 Nintendo Switch 模拟器,作用是把 Switch 游戏搬到你自己的 Windows、macOS 或 Linux 电脑上运行。它同时模拟了 CPU、GPU、音频和输入设备,从 2017 年 9 月开始开发,截至 2024 年 5 月已在约 4,300 款游戏上做过测试,其中 4,100 多款能进入实际游戏画面,约 3,550 款被认为可正常游

gitblog_00869的博客 169

3D-ResNet视频行为识别实战:从原理到部署的完整指南

在计算机视觉领域,视频行为识别是一项核心任务,旨在让机器理解视频中的人类动作。其技术原理主要基于深度学习模型,特别是卷积神经网络(CNN)的时空扩展。3D卷积神经网络(3D-CNN)通过引入时间维度的卷积核,能够统一建模空间外观与时间动态,相比传统的“2D-CNN+时序模型”两阶段方法,提供了更端到端的学习范式。这项技术的核心价值在于实现了对视频内容更深层次的语义理解,为智能应用提供了感知基础。其典型应用场景广泛,包括安防监控中的异常行为检测、智能家居的人机交互、体育视频分析以及视频内容理解与推荐等。本文聚

weixin_34013044的博客 400

dataset_type = ‘PoseDataset‘和dataset_type = ‘VideoDataset‘区别

总的来说,VideoDataset 和 PoseDataset 是两种不同类型的数据集,需要针对不同的任务和数据特点进行相应的预处理和数据增强。在实际应用中,需要根据具体的问题和数据特点选择适合的数据集类型。是两种不同类型的数据集,需要针对不同的任务和数据特点进行相应的预处理和模型设计。在实际应用中,需要根据具体的问题和数据特点选择合适的数据集类型。类提供了一个方便的接口,用于加载和预处理人体姿态数据,为动作识别任务提供支持。此外,还可以利用一些数据过滤和重采样的策略来提高模型的性能。

qq_34425255的博客 891

PA-HMDB51:[TPAMI 2020]“隐私保护深度动作识别

PA-HMDB51 数据集 该存储库托管了我们 TPAMI发布的 PA-HMDB51(隐私注释 HMDB51)数据集的隐私属性标签和 GUI。 有关数据集的更详细说明,请查看我们的。 下载数据集 PrivacyAttributes文件夹中提供了原始 HMDB-51 视频的逐帧隐私属性注释。 注释也可以通过下载。 图形用户界面 GUI文件夹中提供了用于查看数据集中逐帧隐私属性注释的GUI 。 有关使用 GUI 的更多说明,请参阅其 README 文件。 该数据集由德克萨斯大学奥斯汀分校的收集和维护。

YCB_video_dataset.txt

深度学习数据集YCB_video_dataset,国外网站下载速度感人,网盘资源下载更快。

视频分类之数据集介绍

本文介绍的为动作识别视频分类数据集。数据集通常通过以下过程构建:1、结合以前数据集的标签,并根据使用情况添加新的类别,从而定义一个新的运动列表。2、从各种来源获取视频,如YouTube和电影,将视频标题/字幕与动作列表匹配。3、手动提供时间注释以指示动作的开始和结束位置。4、通过删除重复数据和过滤来清洗数据集。数据集发布年份数量大小视频长度分类数HMDB5120117K2G5s51UCF101201213.3K6.5G6s101Sports1M20141.1M。

qq_51511878的博客 4124

卸载重装Ubuntu22.04双系统

先说一下写此篇文章的背景吧,我在Windows下配置了三个cornerNet深度学习环境分别是cuda10.3(显卡版本太高不支持),cuda11.3(配置后偶然看到一篇说这个版本win下只能用CPU跑),最后是cuda11.1终究还是没能跑通代码,因为它的代码是在Liunx系统写的,就想着装个Ubuntu试试看,在网上看说一般软件不要装太高版本,我就下载了470版的显卡驱动,跟着步骤升级了系统内核,结果第二天开机Ubuntu就崩了,开机黑屏左上角只有一道横杠显示,只能按ctrl+shift+f5进入命令窗

编程小白的博客 8102
上一篇: libstdc++.so.6版本过低,找不到GLIBCXX_3.4.29
下一篇: linux训练报错 SyntaxError: invalid syntax
LoriaLi
博客等级 码龄8年 16粉丝 13原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值