如何解决使用Dask逐帧读取视频文件?
我想知道Dask是否是处理视频文件的好工具。在本地,我正在使用OpenCV一次读取每一帧并进行处理。我认为,如果每个视频帧都由单独的Dask任务处理,那将是理想的选择。另外,对于多个时间同步的视频文件,我想知道如何一次从每个摄像机读取一帧并在一个任务中处理两个摄像机的帧。
我不认为Dask支持生成器功能,但是如果以某种方式实现,我认为那将是理想的。生成器任务可以一次在任务图中生成一帧视频。
这是一个示例脚本,与我正在执行的操作类似。它从多个视频文件中的每一个获取一帧,裁剪并调整每个文件的大小为标准尺寸,然后将它们聚合为一个视频。在此示例中,我使用固定的[0:512,0:512]裁剪,但是在实际脚本中,这会因相机和帧而异。
import glob
import cv2
import progressbar
import numpy as np
video_files = {f[0]: f for f in glob.glob('*.MOV')}
in_videos = {}
for letter,in_video_filename in video_files.items():
in_videos[letter] = cv2.VideoCapture(in_video_filename)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video = cv2.VideoWriter('video.mp4',fourcc,120,(256,256 * len(in_videos)))
for frame_id in progressbar.progressbar(range(18000)):
image = np.zeros((256 * len(in_videos),256,3),dtype=np.uint8)
for i,(letter,in_video) in enumerate(in_videos.items()):
success,in_image = in_video.read()
image[i * 256:(i + 1) * 256,:,:] = cv2.resize(in_image[0:512,0:512],256))
video.write(image)
解决方法
我的猜测是您正在寻找Dask Delayed或Dask Futures
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。