Pytorch – 使用Pyav解码视频文件并将视频帧转换为Pytorch tensor作为网络模型输入数据
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Pytorch – 使用Pyav解码视频文件并将视频帧转换为Pytorch tensor作为网络模型输入数据
原文链接:https://www.stubbornhuang.com/1227/
发布于:2021年03月25日 15:26:42
修改于:2021年03月25日 15:26:42

1 视频文件作为网络模型的输入数据
越来越多的神经网络模型开始以视频作为训练数据,比如基于视频数据的行为识别等等,这就需要我们将视频转换为可适用的张量,本文将以pytorch为例,展示一下视频数据转换为pytorch tensor的过程。
2 使用Pyav解码视频文件并将视频帧转换为Pytorch tensor
2.1 安装ffmepg以及pyav
不赘述。
2.2 视频转换为tensor
import torch
import numpy as np
import os
import av
def get_tensor_from_video(video_path,is_multi_thread_decode = True):
"""
:param video_path: 视频文件地址
:param is_multi_thread_decode: 是否多线程解码文件
:return: pytorch tensor
"""
if not os.access(video_path, os.F_OK):
print('测试文件不存在')
return
container = av.open(video_path)
if is_multi_thread_decode:
container.streams.video[0].thread_type = "AUTO"
container.seek(0, any_frame=False, backward=True, stream=container.streams.video[0])
frames = []
for frame in container.decode(video=0):
frames.append(frame)
container.close()
result_frams = None
# 从视频帧转换为ndarray
result_frames = [frame.to_rgb().to_ndarray() for frame in frames]
# 转换成tensor
result_frames = torch.as_tensor(np.stack(result_frames))
# 注意:此时result_frames组成的维度为[视频帧数量,宽,高,通道数]
return result_frames
if __name__ == '__main__':
tensor = get_tensor_from_video(r'example.avi')
print(tensor.shape)
详细的代码如上,请注意上述函数get_tensor_from_video返回的tensor的维度为[视频帧数量,宽,高,通道数],而有的神经网络模型要求输入[通道数,视频帧数量,宽,高],我们可以使用以下函数进行转换。
2.3 tensor维度交换
# T H W C -> C T H W
result_frames = result_frames.permute(3, 0, 1, 2)
当前分类随机文章推荐
- Pytorch - .to()和.cuda()的区别 阅读611次,点赞0次
- Pytorch - nn.Transformer、nn.TransformerEncoderLayer、nn.TransformerEncoder、nn.TransformerDecoder、nn.TransformerDecoder参数详解 阅读1922次,点赞1次
- Pytorch - 内置的LSTM网络torch.nn.LSTM参数详解与使用示例 阅读1500次,点赞0次
- Pytorch - torch.nn.Conv2d参数详解与使用 阅读317次,点赞0次
- Pytorch - 创建随机Tensor的常用方法 阅读142次,点赞0次
- Pytorch - 训练网络时出现_pickle.UnpicklingError: pickle data was truncated错误 阅读760次,点赞0次
- Pytorch - masked_fill方法参数详解与使用 阅读608次,点赞0次
- Pytorch - torch.chunk参数详解与使用 阅读903次,点赞0次
- Pytorch - 模型微调时删除原有模型中的某一层的方法 阅读1658次,点赞0次
- Pytorch - torch.unsqueeze和torch.squeeze函数 阅读233次,点赞0次
全站随机文章推荐
- FFmpeg - RGB图像编码为h264出现垂直旋转的问题 阅读3355次,点赞0次
- 资源分享 - Game Engine Architecture (Third Edition)英文高清PDF下载 阅读5941次,点赞1次
- WordPress - 在每一个文章内容末尾都加一个作者信息展示框 阅读2017次,点赞0次
- 资源下载 - Go语言核心编程李文塔 高清带书签版pdf下载 阅读6734次,点赞1次
- C++ - 使用ffmpeg读取视频旋转角度并使用OpenCV根据旋转角度对视频进行旋转复原 阅读1708次,点赞0次
- 资源分享 - Physics for Game Developers(First Edition) 英文高清PDF下载 阅读1865次,点赞0次
- Duilib - 设置窗体阴影 阅读2865次,点赞2次
- Python - 安装onnxruntime-gpu出现ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '...\\numpy-1.23.1.dist-info\\METADATA' 阅读254次,点赞0次
- 资源分享 - Game Engine Architecture (First Edition)英文高清PDF下载 阅读2327次,点赞0次
- 资源分享 - ShaderX7 - Advanced Rendering Techniques 英文高清PDF下载 阅读2416次,点赞0次
评论
167