Привет! 😃

Компьютерное зрение - одна из очень интересных и новых областей искусственного интеллекта. Это работает так же, как человеческие видения, когда теперь машина должна видеть (изображение), понимать данные (процесс) и интерпретировать выводы. Подобно тому, как наша сетчатка и зрительные нервы достаточны для понимания визуальных образов, мы также используем определенные алгоритмы и инструменты компьютерного зрения.

Мотив

Вы когда-нибудь не понимали, какую библиотеку обработки изображений использовать? Ну лично для меня да! Работая над любым проектом, связанным с компьютерным зрением, я лично не понимаю, какую библиотеку обработки изображений выбрать для чтения и обработки моего набора данных изображений. Существуют различные библиотеки и методы, которые лучше всего подходят для особых случаев. Например, Mahotas - это библиотека, специально разработанная для набора биоинформатических данных. Кроме того, некоторые подходят лучше всего для случая ML или DL.

Итак, давайте рассмотрим наши варианты.

Поле обучения

1. Подушка (PIL)

  • PIL (PythonImagingLibrary) - это библиотека Python с открытым исходным кодом для обработки таких задач обработки изображений, как преобразования, улучшения, чтение и отображение там, где подушка была разветвленной библиотекой.
  • Для загрузки изображения используется open () модуля Image, который возвращает объект Image. Этот объект имеет пиксельные данные, которые могут быть полезны при манипулировании изображениями. Таким образом, объект изображения можно преобразовать в массив с помощью fromarray () и вернуться к объекту позже, как показано на рисунке 1.

Документация: https://pillow.readthedocs.io/en/stable/
Тип объекта чтения изображения: Тип изображения

2. OpenCV

  • Библиотека OpenCV (OpenSourceComputerVision) - это библиотека компьютерного зрения и машинного обучения с открытым исходным кодом.
  • Он имеет широкий спектр оптимизированных алгоритмов, от новейших алгоритмов до типичной обработки изображений.
  • Он написан на C ++ и действует как общий интерфейс, доступный для C ++, Matlab, Java и Python.
  • OpenCV-Python - это оболочка для OpenCV на основе Python. Здесь imread () библиотеки cv2 предназначен для чтения вашего файла изображения в виде массива, а imshow () отображает изображение в отдельном окне, как показано на рисунке 2.

Документация: https://opencv.org/
Тип объекта чтения изображения: Тип массива Numpy

3. Scikit-Image

  • Scikit-Image - это библиотека обработки изображений на основе Python с открытым исходным кодом.
  • Он написан на Cython, который является надмножеством Python, написанным на языке C, чтобы он работал быстрее.

Документация: https://scikit-image.org/docs/stable/auto_examples/
Тип объекта чтения изображения: Тип массива Numpy

4. Матплотлиб

  • Matplotlib - это библиотека визуализации на основе Python, особенно для 2-D.
  • Он в основном используется для построения диаграмм рассеивания, гистограмм и т. Д.
  • Он не предназначен специально для задач машинного обучения, таких как сегментация или обнаружение объектов, как указанные выше библиотеки, однако его можно использовать для обработки изображений.
  • Ограничение в контексте резюме: не поддерживает все форматы файлов.
  • imread () модуля изображений matplotlib считывает изображения и преобразует их в массив NumPy, как показано на рисунке 4.

Документация: https://matplotlib.org/stable/tutorials/introductory/images.html
Тип объекта чтения изображения: Тип массива Numpy

5. Махотас

  • Mahotas - это библиотека компьютерного зрения, реализованная на C ++.
  • Он был специально разработан для информатики биоизображений, где он использует массивы NumPy в качестве объектов изображений.
  • Функция mahotas imread () используется для загрузки изображения, а библиотека pylab импортируется для отображения объектов изображения, как показано на рисунке 5.

Документация: https://mahotas.readthedocs.io/en/latest/#
Тип объекта чтения изображения: Тип массива Numpy

6. Функция keras load_img

  • В фреймворке глубокого обучения Keras есть функция load_img.
  • Функция load_img загружает изображение в формате PIL, как показано на рисунке 6.

Обычно для подготовки любой модели компьютерного зрения с глубоким обучением рекомендуется иметь большой набор данных (не менее 500 изображений), в противном случае традиционного машинного обучения будет достаточно. Кроме того, когда памяти недостаточно для загрузки, обработки или обучения вашего огромного набора данных, появляется концепция пакетов. Вместо того, чтобы загружать все изображения сразу, почему бы не загружать их в пакетном режиме, дополнять и обрабатывать. Изображения дополняются путем переворачивания, поворота, масштабирования или сдвига для увеличения размера набора данных. Итак, давайте посмотрим, как Керас может помочь в этом же.

7. Поток расширенных изображений Keras

  • Keras обеспечивает увеличение изображения с помощью класса ImageDataGenerator. Этот класс может увеличивать ваши изображения партиями на лету, которые вы можете сохранить на жестком диске или просто передать их прямо в вашу модель.
  • В общем,
    1. Создайте объект ImageDataGenerator
    2. Создайте итератор для набора данных изображения, расположенного следующими способами:
    2.1 Данные, загруженные в память, вызываемые с помощью flow ()
    2.2 Данные, сохраненные на диске, вызываемые с помощью flow_from_directory ()
    2.3 Данные во фрейме данных вызывается через flow_from_dataframe ()
  • Итератор возвращает один пакет расширенных изображений на каждой итерации. Этот итератор в дальнейшем можно использовать для обучения сети с помощью fit_generator ().
  • Пойдем на поле.
    Шаг 1. Создайте объект ImageDataGenerator
    Создайте экземпляр объекта ImageDataGenerator с дополнительными параметрами.
from keras.preprocessing.image import ImageDataGenerator
img_gen = ImageDataGenerator(rotation_range=40, zoom_range=0.3, horizontal_flip = True, fill_mode='reflect')      

Шаг 2.1. Данные, загруженные в память, вызываются с помощью flow ()
. Изображение загружается в память. . Создан генератор, который на лету сохранит 5 расширенных изображений в каталог.

from skimage import io
# load image in memory
x = io.imread(join(path ,'data\\dogs.jpeg'))
x = x.reshape((1,)+ x.shape) # iterator should have rank 4
# iterator generates batches of randomly transformed images
iterator = img_gen.flow(x, batch_size=4, save_to_dir = path_to_save ,save_prefix='pre', save_format='png')

Шаг 2.2. Данные, сохраненные на диске, вызываемые с помощью flow_from_directory ()
. Изображения сохраняются на диске. как в справочниках. Скажем, два класса изображений, хранящиеся в отдельных подпапках «train» и flow_from_directory (), читаются непосредственно из каталога.

# directory where images stored on disk in respective subfolders
folder = '/train'
# iterator generates batches of randomly transformed images
iterator = img_gen.flow_from_directory(
                   directory = folder, 
                   target_size = (100,100), 
                   batch_size=4, 
                   save_to_dir = path_to_save)
x,y = iterator.next()
print('Batch Image Shape:', x.shape)
# outputs 
# Found 12 images belonging to 2 classes.
# Batch Image Shape (4, 256, 256, 3)

Шаг 2.3. За рамками этого блога

Если вам интересно, то стоит посетить эту страницу.

Мы включили наиболее распространенные и популярные библиотеки, используемые в ML / DL. Однако доступны и другие библиотеки, такие как SimpleITK, SimpleCV, Pgmagick и SciPy.

Ознакомьтесь с моим репозиторием на GitHub, в котором резюмируется весь продемонстрированный здесь код.

Не стесняйтесь подписываться на этого автора, если вам понравился блог, потому что этот автор заверяет вас, что вы снова вернетесь с более интересными материалами, связанными с ML / AI.
Спасибо,
Удачного обучения! 😄

Можно связаться через LinkedIn.