pynvvl:cupy的nvidia视频加载器(nvvl)的python包装器

pynvvl-cuda90的Python项目详细描述


PYNVVL

pypi-pynvvl-cuda80pypi-pynvvl-cuda90pypi-pynvvl-cuda91pypi-pynvvl-cuda92GitHub license

pynvvl是NVIDIA Video Loader (NVVL)的薄包装。此软件包允许您将视频Directoly加载到GPU内存中,并以零拷贝的CuPyndarrays方式访问它们。pynvvl的预构建二进制文件包括nvvl本身,因此不需要安装nvvl。

要求

  • CUDA 8.0、9.0、9.1或9.2
  • python 2.7.6+、3.4.7+、3.5.1+或3.6.0+
  • CuPyv4.5.0

测试环境

  • ubuntu 16.04
  • python 2.7.6+、3.4.7+、3.5.1+和3.6.0+
  • CUDA 8.0、9.0、9.1和9.2

安装预编译的二进制文件

请根据您的CUDA版本选择合适的软件包。

# [For CUDA 8.0]
pip install pynvvl-cuda80

# [For CUDA 9.0]
pip install pynvvl-cuda90

# [For CUDA 9.1]
pip install pynvvl-cuda91

# [For CUDA 9.2]
pip install pynvvl-cuda92

用法

importpynvvlimportmatplotlib.pyplotasplt# Create NVVLVideoLoader objectloader=pynvvl.NVVLVideoLoader(device_id=0,log_level='error')# Show the number of frames in the videon_frames=loader.frame_count('examples/sample.mp4')print('Number of frames:',n_frames)# Load a video and return it as a CuPy arrayvideo=loader.read_sequence('examples/sample.mp4',horiz_flip=True,scale_height=512,scale_width=512,crop_y=60,crop_height=385,crop_width=512,scale_method='Linear',normalized=True)print(video.shape)# => (91, 3, 385, 512): (n_frames, channels, height, width)print(video.dtype)# => float32# Get the first frame as numpy arrayframe=video[0].get()frame=frame.transpose(1,2,0)plt.imshow(frame)plt.savefig('examples/sample.png')

这段视频是来自时间瞬间数据集的flickr-2-6-3-3-5-2-7-6-5626335276_4.mp4

请注意,裁剪是在缩放后执行的。在上面的示例中,nvvl首先执行从256 x 256到512 x 512的缩放,然后裁剪区域[60:60+385,0:512]。有关转换选项的详细信息,请参见以下部分。

视频加载器选项

创建NVVLVideoLoader对象时,请指定GPU设备ID。 您还可以使用参数log_levelNVVLVideoLoader的构造函数指定日志记录级别。

Wrapper of NVVL VideoLoader

    Args:
        device_id (int): Specify the device id used to load a video.
        log_level (str): Logging level which should be either 'debug',
            'info', 'warn', 'error', or 'none'.
            Logs with levels >= log_level is shown. The default is 'warn'.

转换选项

pynvvl.NVVLVideoLoader.read_sequence可以使用一些选项来指定颜色空间、值范围以及要对视频执行的转换。

Loads the video from disk and returns it as a CuPy ndarray.

    Args:
        filename (str): The path to the video.
        frame (int): The initial frame number of the returned sequence.
            Default is 0.
        count (int): The number of frames of the returned sequence.
            If it is None, whole frames of the video are loaded.
        channels (int): The number of color channels of the video.
            Default is 3.
        scale_height (int): The height of the scaled video.
            Note that scaling is performed before cropping.
            If it is 0 no scaling is performed. Default is 0.
        scale_width (int): The width of the scaled video.
            Note that scaling is performed before cropping.
            If it is 0, no scaling is performed. Default is 0.
        crop_x (int): Location of the crop within the scaled frame.
            Must be set such that crop_y + height <= original height.
            Default is 0.
        crop_y (int): Location of the crop within the scaled frame.
            Must be set such that crop_x + width <= original height.
            Default is 0.
        crop_height (int): The height of cropped region of the video.
            If it is None, no cropping is performed. Default is None.
        crop_width (int): The width of cropped region of the video.
            If it is None, no cropping is performed. Default is None.
        scale_method (str): Scaling method. It should be either of
            'Nearest' or 'Lienar'. Default is 'Linear'.
        horiz_flip (bool): Whether horizontal flipping is performed or not.
            Default is False.
        normalized (bool): If it is True, the values of returned video is
            normalized into [0, 1], otherwise the value range is [0, 255].
            Default is False.
        color_space (str): The color space of the values of returned video.
            It should be either 'RGB' or 'YCbCr'. Default is 'RGB'.
        chroma_up_method (str): How the chroma channels are upscaled from
            yuv 4:2:0 to 4:4:4. It should be 'Linear' currently.
        out (cupy.ndarray): Alternate output array where place the result.
            It must have the same shape and the dtype as the expected
            output, and its order must be C-contiguous.

如何构建

使用Docker构建轮子:

要求:

  • 码头工人
  • NVIDIA Docker(v1/v2)
bash docker/build_wheels.sh

设置不带Docker的开发环境:

setup.py脚本搜索必要的库。

要求:以下库在LIBRARY_PATH中可用。

  • libnvvl.so
  • libavformat.so.57
  • libavfilter.so.6
  • libavcodec.so.57
  • libavutil.so.55

您可以在nvvl存储库中构建libnvvl.so。按照说明操作 在nvvl库中。build目录必须在LIBRARY_PATH中。

其他三个库在ubuntu 16.04中作为包提供。 它们安装在/usr/lib/x86_64-linux-gnu下,因此它们也必须在LIBRARY_PATH中。

python setup.py develop
python setup.py bdist_wheel

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java中的else if语句返回语法错误   http如何解析从表单到REST Java/Webservice的post请求   java如何在SpringBoot中为RestTemplate编写JUnit测试   java动态检查实例是否实现接口   java在Android中使用ArrayAdaptor时,数据不会显示   根据前序遍历返回二进制树的java方法   Arquillian测试类中的java注入始终为空   用户界面Java Swing自定义控件   java使用CompletableFutures递归地从同一函数的多个调用构建列表   在Java中将“.00”添加到整数BigDecimal   卡夫卡java未知\u主题\u或\u部分错误间歇性   java为什么我的getString()方法总是返回null?   java renameTo无法重命名文件   java为什么我可以强制转换对象?可以用其他对象来完成吗?   带有回写条件的java多根记录器   关于stackoverflow错误的java帮助?   java Websphere消息队列多线程   Java图形窗口/画布未垂直显示完整的六边形网格   java Sakai未在Tomcat服务器中启动