Skip to main content

PyNVVL: A Python wrapper for NVIDIA Video Loader (NVVL) with CuPy

Project description

PyNVVL

pypi-pynvvl-cuda80 pypi-pynvvl-cuda90 pypi-pynvvl-cuda91 GitHub license

PyNVVL is a thin wrapper of NVIDIA Video Loader (NVVL). This package enables you to load videos directoly to GPU memory and access them as CuPy ndarrays with zero copy. The pre-built binaries of PyNVVL include NVVL itself, so you do not need to install NVVL.

Requirements

  • CUDA 8.0, 9.0, or 9.1
  • Python 2.7.6+, 3.4.7+, 3.5.1+, or 3.6.0+
  • CuPy v4.0.0

Tested Environment

  • Ubuntu 16.04
  • Python 2.7.6+, 3.4.7+, 3.5.1+, and 3.6.0+
  • CUDA 8.0, 9.0, and 9.1

Install the pre-built binary

Please choose a right package depending on your CUDA version.

# [For CUDA 8.0]
pip install pynvvl-cuda80

# [For CUDA 9.0]
pip install pynvvl-cuda90

# [For CUDA 9.1]
pip install pynvvl-cuda91

Usage

import pynvvl
import matplotlib.pyplot as plt

# Create NVVLVideoLoader object
loader = pynvvl.NVVLVideoLoader(device_id=0, log_level='error')

# Show the number of frames in the video
n_frames = loader.frame_count('examples/sample.mp4')
print('Number of frames:', n_frames)

# Load a video and return it as a CuPy array
video = 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 array
frame = video[0].get()
frame = frame.transpose(1, 2, 0)

plt.imshow(frame)
plt.savefig('examples/sample.png')

This video is flickr-2-6-3-3-5-2-7-6-5626335276_4.mp4 from the Moments-In-Time dataset.

Note that cropping is performed after scaling. In the above example, NVVL performs scaling up from 256 x 256 to 512 x 512 first, then cropping the region [60:60 + 385, 0:512]. See the following section to know more about the transformation options.

VideoLoader options

Please specify the GPU device id when you create a NVVLVideoLoader object. You can also specify the logging level with a argument log_level for the constructor of NVVLVideoLoader.

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'.

Transformation Options

pynvvl.NVVLVideoLoader.read_sequence can take some options to specify the color space, the value range, and what transformations you want to perform to the video.

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.

How to build wheels

Requirements for build

  • Docker
  • nvidia-docker (v1/v2)
bash docker/build_wheels.sh

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

pynvvl_cuda80-0.0.2a5-cp27-cp27mu-manylinux1_x86_64.whl (1.5 MB view details)

Uploaded CPython 2.7mu

File details

Details for the file pynvvl_cuda80-0.0.2a5-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for pynvvl_cuda80-0.0.2a5-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 8b08816fb48f5eaf4f57cd2618518681162d4a5c6ac5e565b7bf92d78972408f
MD5 c00b6742ba27a6fb7b27bc1cd53d7095
BLAKE2b-256 be81af3461433949fef40ec0d68e2a6a4f2b973800a42521482ce47ec2e4740e

See more details on using hashes here.

File details

Details for the file pynvvl_cuda80-0.0.2a5-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for pynvvl_cuda80-0.0.2a5-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 e73501e7fddeb3f1f7adf53ef2fcc4e0631eefc7b30499504693d01557bd2d4c
MD5 d74e08e550d62ae5a4ab82a034aac694
BLAKE2b-256 a151f3539ff08775a0f42541842963ffbb04814b289b726576d05a08b579c53c

See more details on using hashes here.

File details

Details for the file pynvvl_cuda80-0.0.2a5-cp34-cp34m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for pynvvl_cuda80-0.0.2a5-cp34-cp34m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 52873bf77380aae990707e072e7c56052265be84da33926116c812fff0e1f63e
MD5 110be40fe286446d3d10acdaa05873a3
BLAKE2b-256 8a264ee7cfbe6c733a82cbf2b6e669e5300a5a468f8bd3fc3e671a223fd9144f

See more details on using hashes here.

File details

Details for the file pynvvl_cuda80-0.0.2a5-cp27-cp27mu-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for pynvvl_cuda80-0.0.2a5-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 5abb00420ace89f518da20432f9fd5eceac5da1c1022f7d7227946cb451cacbd
MD5 9d195b24d1a33b0c15cbc1f3723a6ad7
BLAKE2b-256 835f247de8367a2233e9fca8d207f1d47dfd159ec97d2c40f6d72203c77dc4b1

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page