0

尝试为 NVIDIA DALI 管道加载视频以进行视频处理,但无法加载 .mp4 视频。

import os
import numpy as np    
from nvidia.dali import pipeline_def
import nvidia.dali.fn as fn
import nvidia.dali.types as types       

batch_size=2
sequence_length=8
initial_prefetch_size=16 

video_directory=['sintel_trailer-720p_0.mp4']
n_iter=6

print(video_directory)


@pipeline_def
def video_pipe(file_root):
    video, labels = fn.readers.video(device="gpu", file_root=file_root, sequence_length=sequence_length,
                                     random_shuffle=True, initial_fill=initial_prefetch_size)
    return video, labels


pipe = video_pipe(batch_size=batch_size, num_threads=2, device_id=0, file_root=video_directory, seed=12345)
pipe.build()

上面的 DALI 管道在加载视频时显示以下问题:

RuntimeError:构建管道时出现严重错误:构建运算符时出错:readers__Video遇到:[/opt/dali/dali/operators/reader/loader/video_loader.cc:117]断言“dir!= nullptr”失败:目录['sintel_trailer -720p_0.mp4'] 无法打开。

我已经参考了 NVIDIA DALI 的文档进行视频处理,但无法解决,

请查看参考:NVIDIA DALI DOCS VIDEO PROCESSING

4

2 回答 2

1

file_root参数指向根目录,DALI 应在其中搜索视频,参数file_list应指向列出所有要加载的样本的文件。

但是,从您的示例来看,该filenames论点必须是更适合您需求的论点。

您的示例应按预期工作,并具有以下管道定义:

@pipeline_def
def video_pipe(file_root):
    video, labels = fn.readers.video(device="gpu", filenames=file_root, labels=[], sequence_length=sequence_length,
                                     random_shuffle=True, initial_fill=initial_prefetch_size)
    return video, labels

我也添加了labels论点。没有它,运算符只返回一个输出。如果您想更好地了解操作符,请参阅DALI 手册。

于 2021-11-25T10:00:32.743 回答
0

经过 NVIDIA DALI 的一些研究和论坛讨论后,得到了这个答案,请参阅问题/3503链接以获得详细的答案讨论。谢谢

于 2021-11-30T12:10:52.903 回答