Предварительная обработка изображений с помощью Dataflow - PullRequest
0 голосов
/ 20 ноября 2018

Задача: Я должен выполнить задание ETL, которое будет извлекать изображения TIFF из GCS, преобразовывать эти изображения в текст с помощью комбинации инструментов с открытым исходным кодом для компьютерного зрения, таких как OpenCV + Tesseract, и в конечном итоге загружать данныев BigQuery

Проблема: Я пытаюсь использовать Dataflow для выполнения задания ETL, потому что у меня есть миллионы изображений (каждое изображение - отдельный файл / большой двоичный объект), и я хочу масштабировать до сотенмашин.Однако я сталкиваюсь с некоторыми проблемами с потоком данных (которые будут описаны более подробно ниже) в отношении наилучших способов загрузки изображений.

Вопросы: В конечном итоге я пытаюсь определить:

1) Является ли поток данных лучшим решением для этого?Альтернативы, которые я рассмотрел, - это выполнение многопоточной работы на большой машине.Есть ли другие альтернативы, которые я должен рассмотреть?

2) Если поток данных - лучшее решение, то как мне конкретно обрабатывать загрузку миллионов изображений (чтобы я мог выполнить их через преобразование)?

Технические проблемы:

Следующий пост Рекомендуемое решение рекомендует использовать beam.io.gcp.gcsio.GcsIO().open(filepath, 'r') в DoFn для загрузки изображений из GCS.
I 'Я пытался пойти по этому пути, используя beam.io.gcp.gcsio.GcsIO().open(filepath, 'r'), но у меня проблемы с открытием изображений.Эта проблема описана здесь: IO.BufferReader проблема .

При использовании DirectRunner я могу загружать файлы изображений с помощью этого клиента api from google.cloud import storage, и я могу открывать и предварительно обрабатывать изображения без проблем.Однако при использовании обработчика потока данных у меня возникают проблемы с зависимостями AttributeError: 'module' object has no attribute 'storage'.

При этом Если Dataflow - лучшее решение, то какой метод загрузки и обработки миллионов изображений лучший?

1 Ответ

0 голосов
/ 12 марта 2019

Вы делаете правильные мысли.Кажется, что вы столкнулись с двумя проблемами:

  • С проблемой io.BufferedReader вам нужно добавить интерфейс, который позволит вам искать в файле Tiff, как вы правильно нашли в вопросе .

  • Кажется, что проблема с использованием google.cloud.storage заключается в том, что зависимость не доступна в среде потока данных.Чтобы добавить эту зависимость, посмотрите Управление зависимостями конвейера Python в документации Beam.

Основная идея заключается в том, что вы можете запустить свой конвейер с файлом --requirements_file reqs.txtи перечислил все дополнительные зависимости, которые вы хотели бы добавить.

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