Поделиться через


Изображения

Внимание

Для загрузки данных изображения в Кадр данных Spark в виде необработанных байтов, в Databricks рекомендуется указать источник данных как двоичный файл. Рекомендуемый рабочий процесс для обработки данных изображения см. в разделе Эталонное решение для приложений, работающих с изображениями.

Источник данных изображения абстрагируется от деталей представления изображения и предоставляет стандартный API для загрузки данных изображения. Для чтения файлов изображений укажите источник данных format как image.

df = spark.read.format("image").load("<path-to-image-data>")

Аналогичные API существуют для Scala, Java и R.

Можно импортировать вложенную структуру каталогов (например, использовать путь вида /path/to/dir/), а также можно использовать обнаружение секций, указав путь к каталогу секции (то есть путь вида /path/to/dir/date=2018-01-02/category=automobile).

Структура изображения

Файлы изображений загружаются как кадры данных, содержащие один столбец типа struct с именем image со следующими полями:

image: struct containing all the image data
  |-- origin: string representing the source URI
  |-- height: integer, image height in pixels
  |-- width: integer, image width in pixels
  |-- nChannels
  |-- mode
  |-- data

где находятся поля:

  • nChannels: количество цветовых каналов. Типичные значения: 1 для изображений в оттенках серого, 3 для цветных изображений (например, RGB) и 4 для цветных изображений с альфа-каналом.

  • mode: целочисленный флаг, указывающий способ интерпретации поля данных. Он указывает тип данных и порядок каналов, в которых хранятся данные. Значение поля является ожидаемым (но не применяется) для соотнесения с одним из типов OpenCV, показанных в следующей таблице. Типы OpenCV определены для каналов 1, 2, 3 или 4, а также нескольких типов данных для значений пикселов. Порядок каналов задает порядок, в котором хранятся цвета. Например, если у вас есть типичное трехканальное изображение с красными, синими и зелеными компонентами, существует шесть возможных порядков. Большинство библиотек используют либо RGB, либо BGR. Ожидается, что три (четыре) канала типа OpenCV будут представлены в порядке BGR (A).

    Сопоставьте тип с числами в OpenCV (типы данных x число каналов)

    Тип C1 C2 C3 C4
    CV_8U 0 8 16 24
    CV_8S 1 9 17 25
    CV_16U 2 10 18 26
    CV_16S 3 11 19 27
    CV_32U 4 12 20 28
    CV_32S 5 13 21 29
    CV_64F 6 14 22 30
  • data: данные изображения, хранящиеся в двоичном формате. Данные изображения представлены в виде трехмерного массива с формой измерения (высота, ширина, nChannels) и значениями массива типа t, указанными в поле режима. Массив хранится в построчном порядке.

Отображение данных изображения

Функция Databricks display поддерживает отображение данных изображения. См. Изображения.

Пример записной книжки: чтение и запись данных в файлы изображений

В следующей записной книжке показано, как считывать и записывать данные в файлы изображений.

Записная книжка источника данных изображения

Получить записную книжку

Ограничения для источника данных изображения

Источник данных изображения декодирует файлы изображений во время создания Кадра данных Spark, увеличивает размер данных и вводит ограничения в следующих сценариях.

  1. Сохранение кадра данных: если для упрощения доступа нужно необходимо сохранить кадр данных в Разностной таблице, вместо декодированных данных следует сохранить необработанные байты, чтобы сэкономить место на диске.
  2. Перетасовывание секций: перетасовывание данных декодированного изображения требует больше места на диске и пропускной способности сети, что приводит к замедлению перетасовывания. Следует максимально отложить декодирование изображения.
  3. Выбор другого метода декодирования: источник данных изображения использует библиотеку ввода-вывода изображений javax для декодирования изображения, что не позволяет выбирать другие библиотеки декодирования изображений для повышения производительности или реализации настраиваемой логики декодирования.

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