解码/编码图像和视频¶
torchvision.io
模块提供了用于解码和编码图像和视频的实用工具。
图像解码¶
Torchvision 目前支持解码 JPEG、PNG、WEBP、GIF、AVIF 和 HEIC 图像。JPEG 解码也可以在 CUDA GPU 上进行。
主要入口点是 `decode_image()` 函数,您可以将其用作 `PIL.Image.open()` 的替代方法。它会将图像直接解码为图像 Tensor,从而为您节省转换时间,并允许您在 Tensor 上原生运行变换/预处理。
from torchvision.io import decode_image
img = decode_image("path_to_image", mode="RGB")
img.dtype # torch.uint8
# Or
raw_encoded_bytes = ... # read encoded bytes from your file system
img = decode_image(raw_encoded_bytes, mode="RGB")
`decode_image()` 将自动检测图像格式,并调用相应的解码器(HEIC 和 AVIF 图像除外,详见 `decode_avif()` 和 `decode_heic()`)。您也可以使用更低级别的、特定于格式的解码器,它们可能更强大,例如,如果您想在 CUDA 上编码/解码 JPEG。
`decode_image`(input[, mode, ...]) |
将图像解码为 uint8 Tensor,可以从文件路径或原始编码字节中读取。 |
`decode_jpeg`(input[, mode, device, ...]) |
将 JPEG 图像解码为 3D RGB 或灰度 Tensor,可在 CPU 或 CUDA 上运行。 |
`decode_png`(input[, mode, apply_exif_orientation]) |
将 PNG 图像解码为 3 维 RGB 或灰度 Tensor。 |
`decode_webp`(input[, mode]) |
将 WEBP 图像解码为 3 维 RGB[A] Tensor。 |
`decode_avif`(input[, mode]) |
将 AVIF 图像解码为 3 维 RGB[A] Tensor。 |
`decode_heic`(input[, mode]) |
将 HEIC 图像解码为 3 维 RGB[A] Tensor。 |
`decode_gif`(input) |
将 GIF 图像解码为 3 或 4 维 RGB Tensor。 |
`ImageReadMode`(value) |
允许在解码时自动转换为 RGB、RGBA 等。 |
已弃用的解码函数
`read_image`(path[, mode, apply_exif_orientation]) |
[已弃用] 请改用 `decode_image()`。 |
图像编码¶
对于编码,支持 JPEG(CPU 和 CUDA)和 PNG。
`encode_jpeg`(input[, quality]) |
将 RGB Tensor 编码为原始编码的 JPEG 字节,可在 CPU 或 CUDA 上运行。 |
`write_jpeg`(input, filename[, quality]) |
将 CHW 布局的输入 Tensor 保存到 JPEG 文件。 |
`encode_png`(input[, compression_level]) |
将 CHW 布局的输入 Tensor 编码并返回其对应 PNG 文件的内容缓冲区。 |
`write_png`(input, filename[, compression_level]) |
将 CHW 布局的输入 Tensor(对于灰度图像为 HW)保存到 PNG 文件。 |
IO 操作¶
`read_file`(path) |
以 uint8 1D Tensor 的形式返回文件的字节内容。 |
`write_file`(filename, data) |
将 uint8 1D Tensor 的内容写入文件。 |
视频 - 已弃用¶
警告
已弃用:torchvision 的所有视频解码和编码功能从 0.22 版本开始已弃用,并将在 0.24 版本中移除。我们建议您迁移到 TorchCodec,我们将在其中整合 PyTorch 未来未来的解码/编码功能。
`read_video`(filename[, start_pts, end_pts, ...]) |
[已弃用] 从文件中读取视频,返回视频帧和音频帧。 |
`read_video_timestamps`(filename[, pts_unit]) |
[已弃用] 列出视频帧的时间戳。 |
`write_video`(filename, video_array, fps[, ...]) |
[已弃用] 将 [T, H, W, C] 格式的 4D Tensor 写入视频文件。 |
精细化视频 API
除了 `read_video` 函数外,我们还提供了一个高性能的底层 API,与 `read_video` 函数相比,该 API 提供了更精细化的控制。它在完全支持 torchscript 的同时实现了这一切。
`VideoReader`(src[, stream, num_threads]) |
[已弃用] 精细化视频读取 API。 |