Чтение видео во время облачного потока данных, использование GCSfuse, загрузка локально или создание нового Beam reader?

Я создаю облачный видео-конвейер Python, который будет читать видео из корзины, выполнять анализ компьютерного зрения и возвращать кадры обратно в корзину. Насколько я могу судить, не существует метода чтения Beam для передачи путей GCS в opencv, подобного TextIO.read(). Мои варианты продвижения вперед, кажется, загружают файл локально (они большие), используют предохранитель GCS для монтирования на локальном работнике (возможно?) Или пишут собственный метод источника. Кто-нибудь имеет опыт в том, что имеет больше всего смысла?

Мой главный беспорядок был этим вопросом здесь

Может ли облачный поток данных Google (Apache Beam) использовать ffmpeg для обработки видео или данных изображения

Как бы у ffmpeg был доступ к пути? Это не просто вопрос загрузки бинарного файла? Должен быть метод Луча, чтобы передать элемент, правильно?

1 ответ

Решение

Я думаю, что вам нужно будет сначала загрузить файлы, а затем передать их.

Однако вместо сохранения файлов локально можно передавать байты в opencv. Принимает ли он какой-либо ByteStream или входной поток?

У вас может быть один ParDo, который загружает файлы с использованием GCS API, затем передает его в opencv через поток, канал sttein ByteChannel и т. Д.

Если это недоступно, вам нужно будет сохранить файлы на диск локально. Затем передайте opencv имя файла. Это может быть сложно, потому что вы можете использовать слишком много дискового пространства. Поэтому убедитесь, что сборка мусора происходит должным образом и удаление файлов с локального диска после того, как opencv их обработает.

Я не уверен, но вам может потребоваться также выбрать определенный тип виртуальной машины, чтобы обеспечить достаточно места на диске, в зависимости от размера ваших файлов.

Другие вопросы по тегам