在云数据流中读取视频,使用 GCSfuse,在本地下载,还是编写新的 Beam reader?

Reading video during cloud dataflow, using GCSfuse, download locally, or write new Beam reader?

我正在构建一个 python 云视频管道,它将从存储桶中读取视频,执行一些计算机视觉分析并将 return 帧返回到存储桶。据我所知,没有一种 Beam 读取方法可以将 GCS 路径传递给 opencv,类似于 TextIO.read()。我接下来的选择似乎是在本地下载文件(它们很大),使用 GCS fuse 挂载在本地 worker 上(可能吗?)或编写自定义源代码方法。任何人都知道什么最有意义?

我的主要困惑是这里的这个问题

Can google cloud dataflow (apache beam) use ffmpeg to process video or image data

ffmpeg 如何访问该路径?这不仅仅是上传二进制文件的问题?需要有一个 Beam 方法来传递项目,对吗?

我认为您需要先下载文件,然后再通过。

但是,不是将文件保存在本地,而是可以将字节传递给 opencv。它接受任何类型的字节流或输入流吗?

你可以有一个 ParDo,它使用 GCS API 下载文件,然后通过流、ByteChannel stdin 管道等将其传递给 opencv

如果不可用,您需要将文件保存到本地磁盘。然后将文件名传递给 opencv。这可能会很棘手,因为您最终可能会使用太多磁盘 space。所以一定要正确收集文件,并在opencv处理后从本地磁盘删除文件。

我不确定,但您可能还需要 select 特定的 VM 机器类型以确保您有足够的磁盘 space,具体取决于文件的大小。