利用GPU加速Python图像缩放
NVIDIA 视觉编程接口 (VPI: Vision Programming Interface
) 是 NVIDIA 的计算机视觉和图像处理软件库,使您能够实现在 NVIDIA Jetson 嵌入式设备和独立的GPU 上可用的不同硬件后端上加速的算法。
库中的一些算法包括过滤方法、透视扭曲、时间降噪、直方图均衡、立体视差和镜头失真校正。 VPI 提供易于使用的 Python 绑定以及 C++ API。
除了与 OpenCV 接口外,VPI 还能够与 PyTorch 和其他基于 Python 的库进行互操作。
下面的示例通过首先应用低通滤波器来重新缩放输入图像以避免混叠,然后进行下采样。生成的图像具有输入宽度的一半和输入高度的三分之一。然后将结果保存到磁盘。
输入图像:
输出图像:
import sys
import vpi
import numpy as np
from PIL import Image
from argparse import ArgumentParser
# Parse command line arguments
parser = ArgumentParser()
parser.add_argument('backend', choices=['cpu','cuda','vic'],
help='Backend to be used for processing')
parser.add_argument('input',
help='Image to be used as input')
args = parser.parse_args();
if args.backend == 'cpu':
backend = vpi.Backend.CPU
elif args.backend == 'cuda':
backend = vpi.Backend.CUDA
else:
assert args.backend == 'vic'
backend = vpi.Backend.VIC
# Load input into a vpi.Image
input = vpi.asimage(np.asarray(Image.open(args.input)))
# Using the chosen backend,
with backend:
# First convert input to NV12_ER.
# We're overriding the default backend with CUDA.
temp = input.convert(vpi.Format.NV12_ER, backend=vpi.Backend.CUDA)
# Rescale the image using the chosen backend
temp = temp.rescale((input.width//2, input.height//3))
# Convert result back to input's format
output = temp.convert(input.format, backend=vpi.Backend.CUDA)
# Save result to disk
Image.fromarray(output.cpu()).save('scaled_python'+str(sys.version_info[0])+'_'+args.backend+'.png')