Reading Time: 5 minutes

Когда я начинал изучение компьютерного зрения, я работал в банке и писал программы на C#. Как оказалось, C# хорошо подходит для написания бизнес-логики, сайтов и больших систем BI, но для машинного обучения и обработки изображений он подходит гораздо хуже. Дело не в синтаксисе и не в возможностях языка, а в малом количестве библиотек для обработки данных. На помощь приходит Python, с его практически всеохватывающим PIP и сильным коммьюнити в области DataScience и CV. Первые месяцы прошли в выборе набора библиотек для работы, как же я тогда хотел найти хороший список совместно работающих плагинов и заняться уже решением задач.

Этот список не претендует на законченность и правильность. Я перечислил библиотеки, которые я использую почти каждый день для решения задач по DataScience и компьютерному зрению. У каждой библиотеки будет описание для чего она используется и как ее установить. Если вы можете посоветовать как расширить этот список или заменить что то из него на более новое – пишите в комментарии или на почту. Пользователи Anaconda, для вас этот список – лишь малая часть того, что есть в этом замечательном пакете.

Базовые:

1. NumPy

NumPy это больше чем просто библиотека для Python, мало какие плагины для обработки данных могут обойтись без нее. NumPy позволяет быстро и удобно работать с такими структурами данных как большие многомерные массивы. В чем отличие их от встроенных массивов в Python, как в форме List, так и из библиотеки collections?  NumPy написать на быстром коде C++ и все операции с массивами уже содержат максимально оптимизированный код, ускорение в сравнении со стандартными библиотеками может составлять сотни раз!  Как данные возможности помогают при обработке изображений? Для примера рассмотрим стандартное изображение Лены(цензурное). В представлении NumPy оно будет представлять из себя массив 512 × 512 × 4  значений в формате RGB, где каждое число представляет из себя R G B A значение пикселя. Все значения находятся в промежутке 0 <= value <= 255, так как изображения представлено в 32 битном цвете. С полученным массивом мы можем совершить все матричные преобразования, с максимально эффективной реализацией, такие как афинные преобразования, размытия, повышения резкости и прочее. Устанавливается NumPy очень просто через менеджер пакетов pip: pip install numpy. В случае установки на слабые системы, такие как Raspberry Pi можно во время установки успеть поставить и заварить чай, компилироваться пакет будет долго.

2. Matplotlib

Matplotlib это настоящий комбайн для отображения данных. В работе обычно используются только самые простые его методы: отрисовать график или изображение, построить гистограмму и разместить элементы на графике, такие как шкалы и пояснения. Работать с Matplotlib стоит хотя бы потому, что он делает красивые и наглядные графики, которые являются стандартом в научных статьях. Устанавливается библиотека через менеджер pip командой: pip install matplotlib. Подтягивает за собой множество зависимостей, поэтому не пугайтесь, если он установит что то еще.

3. IPython Jupyter

Если вы до сих пор не пробовали IPython Jupyter Notebook, самое время это сделать. Настолько удобная среда программирования для Python, что из нее буквально не хочется выходить. Ее основные цели – быстро, красиво, просто. Установка происходит через менеджер пакетов pip: pip install jupyter. Далее следует запустить ее командой jupyter notebook, и зайти на созданный сервер. Программирование происходит внутри ячеек, которые могут содержать произвольное количество команд. Графики можно рисовать в Matplotlib, предварительно написав одну из “магических команд” %matplotlib inline. Весь код можно сохранять на жесткий диск в формате .ipynb, либо конвертировать в html.

4. Pillow

Если вы не хотите заморачиваться с установкой и разбором OpenCV, Pillow -лучший вариант для побаловаться. Он имеет в себе методы для открытие различных форматов изображений, их сохранения, изменения размеров, поворотов и т.д. Pillow используется в таких фреймворках как Django, где он замечательно справляется. Но если вы хотите хорошо разобраться в компьютерном зрении – лучше начинайте сразу с OpenCV. Pillow устанавливается через менеджер пакетов pip командой: pip install Pillow.

Продвинутые:

5. OpenCV

OpenCV по сути стандарт в области обработки изображений и компьютерного зрения. Данная библиотека изначально разрабатывалась для обработки визуальных данных в реальном времени. Это открытая библиотека, вы можете увидеть ее исходный код, скачав его с сайта, и даже поучаствовать в его дальнейшем развитии. Она была впервые опубликована в 1999 году. В 2009 году была выпущена версия 2.0 с поддержкой NumPy, что позволило значительно ускорить ее работу. Начиная с версии 3.0 в ней появилось разделение на запатентованный код, в модуле opencv_contrib, и основной. Весь код на сайте будет написан с использованием версии 3.2 или новее. Устанавливается данная библиотека уже не так просто, как предыдущие, и в лучшем варианте ее надо будет компилировать на своей системе. Но не бойтесь, в следующем посте я подробно расскажу как это сделать.

6. SciPy

Рассказав про библиотеку NumPy, нельзя не рассказать по пакет SciPy. Данный пакет расширяет возможности работы с векторами и матрицами. Устанавливается через менеджер pip командой: pip install scipy. Данная библиотека содержит такие модули как физические константы, преобразования Фурье, интегрирование и интерполяции, линейная алгебра, статистика. В общем, если вы делаете что то связанное с физикой или математикой – этот пакет на 95% покроет ваши требования.

7. scikit-learn

Начиная с этой библиотеки – все будет связано с машинным обучением. Тут уж ничего не поделаешь, если ты хочешь не только повернуть и уменьшить картинку, но и понять что на ней находится, ты попадаешь на территорию ML.  Scikit-learn это самый легкий способ начать свое знакомство с этой областью. Данная библиотека содержит различные реализации методов кластеризации, классификации и других. Устанавливается через менеджер пакетов pip командой: pip install scikit-learn.

Бонус. Джедай уровень:

8. Tensor-flow

Данная библиотека разработка Google и она используется в текущих проектах компании, таких как Photos, Inbox, Translate, Assistant. Плюс она имеет открытый исходный код и может запускаться даже на смартфонах. В чем же подвох? Для ее изучения, а не просто запуска демок, придется понять хотя бы теорию нейронных сетей, глубоких нейронных сетей. На самом деле, после получения базовых знаний работать с ней приятно а ее скорость и гибкость вас приятно удивят. Устанавливается она через менеджер пакетов pip командой: pip install tensorflow. Она умеет работать с GPU. Очень быстро работать.

9. Caffe

Caffe разработана в институте Беркли, США. Основной ее целью было создать инструмент для анализа мультимедийных данных с открытым исходным кодом который будет ориентирован на коммерческое применение. Вся библиотека написана на C++, в своей работе опирается на обработку данных графическим чипом, полностью поддерживает написание пользовательских алгоритмов на Python/NumPy, а также совместим с MATLAB. Для данной библиотеки есть множество уже готовых алгоритмов и вы можете написать к ней свой. Устанавливается Caffe компиляцией их исходных кодов. Я напишу отдельный пост про это, но имейте ввиду, данный процесс не быстрый и лучше заложить на него несколько часов.

10. CatBoost

CatBoost отличается от Tensor-Flow и Caffe тем, что она реализует механизм глубокого обучения через градиентный бустинг, в отличии от нейронных сетей. Библиотека разработана и написана в Яндексе, поддерживает работу из Python и R, имеет открытый исходный код. Рекомендуется к изучению уже потому, что умеет хорошо находить котиков. Устанавливается через менеджер пакетов pip командой: pip install catboost.

Итог:

В данный момент Python имеет множество превосходных пакетов для обработки изображений. Почти все они основываются на представлении данных в виде многомерного массива NumPy, поэтому данный пакет является практически обязательным для установки. Если вы будете проводить только первичную обработку изображений, например для сайта или проекта не связанного с распознаванием, вы можете ограничиться набором Pillow Numpy, matplotlib и IPython. Если же вы всерьез намерены изучить машинное зрение – рекомендую установить все 7 перечисленных библиотек и научиться пользоваться этим прекрасным набором инструментов. Успехов в коде и решении задач!


0 Comments

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.