Специалисты по компьютерному зрению учат компьютеры понимать изображения так же, как это делают люди. Сфера машинного обучения и компьютерного зрения стремительно развивается, а спрос на CV-инженеров растет из года в год.
Что нужно знать специалисту по компьютерному зрению, какие рабочие задачи он выполняет и какие навыки нужны, чтобы развиваться в этой области, рассказываем в статье.
Что такое компьютерное зрение
Компьютерное зрение (Computer Vision) — это область искусственного интеллекта, в которой разрабатывают алгоритмы и технологии обработки изображений и видео. Они используются для распознавания, классификации и отслеживания объектов, жестов, эмоций.
Как это работает
Этапы обработки изображений с помощью CV можно разделить по уровням сложности.
Низкоуровневое компьютерное зрение
На низком уровне происходит анализ изображения на основе его базовых характеристик, таких как цвет, яркость, текстура. Алгоритм извлекает основную информацию об объекте, с которой предстоит работать на следующих уровнях анализа.

Методы и инструменты:
- фильтры изображений (например, фильтры Гаусса, медианный фильтр);
- преобразования изображений (например, преобразование Фурье);
- дескрипторы текстур (например, текстурные характеристики, такие как гистограммы ориентированных градиентов);
- методы выделения краев (например, оператор Собеля).
Среднеуровневое компьютерное зрение
На среднем уровне компьютерное зрение фокусируется на обнаружении объектов, их сегментации и извлечении признаков для дальнейшей интерпретации. Это промежуточный этап визуальной обработки для объединения элементарных объектов в связанные наборы.
Методы и инструменты:
- детекторы объектов (например, каскады Хаара, метод опорных векторов);
- сегментация изображений (например, алгоритмы пороговой обработки, алгоритмы кластеризации);
- функции распределения ориентированных градиентов (HOG);
- определение ключевых точек (например, метод SIFT, SURF).

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

Методы и инструменты:
- глубокое обучение и нейронные сети (например, сверточные нейронные сети, рекуррентные нейронные сети);
- методы классификации и распознавания образов;
- методы сегментации с использованием сверточных сетей;
- методы генерации изображений (например, генеративно-состязательные сети).
Где используют компьютерное зрение
Биометрия. Распознавание лица, радужной оболочки глаза или отпечатков пальцев используют для идентификации личности при открытии счета в банке, разблокировке экрана смартфона или использовании терминалов оплаты.

Поиск по картинке в интернете. При помощи алгоритмов компьютерного зрения можно находить изображения, похожие на те, что загружает пользователь.


Видеоаналитика. Видеопотоки, которые приходят с камер видеонаблюдения, обрабатывают алгоритмы компьютерного зрения. Они идентифицируют на видео людей, транспортные средства и другие объекты в зависимости от задачи видеоаналитики.

Обработка снимков со спутников. Алгоритмы CV могут обрабатывать большие объемы данных, полученные со спутников. Это позволяет улучшать карты, обнаруживать природные катаклизмы.

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

Автопилоты и системы предотвращения ДТП. Системы компьютерного зрения анализируют данные с камер, радаров и других датчиков для обеспечения безопасности и управления автомобилем.

Реконструкция архитектурных сооружений. С помощью алгоритма CV можно создать трехмерные модели на основе множества изображений. Например, восстановить форму зданий или других объемных объектов.

Какие задачи выполняет Computer Vision Engineer
Инженер по компьютерному зрению проводит предварительный анализ данных, разрабатывает и обучает алгоритмы компьютерного зрения, интегрирует и оптимизирует их в соответствии с системными требованиями приложения.
В его обязанности входит:
- Разработка алгоритмов обработки изображений и видео. Сюда относится создание алгоритмов, которые позволяют компьютеру распознавать и анализировать содержимое изображений и видео.
- Построение моделей машинного обучения. Включает разработку моделей и их тренировку на большом объеме размеченных данных. Сначала собирают данные (вручную, автоматически или полуавтоматически), затем определяют их характерные признаки (предикторы) и выбирают алгоритм обучения.
- Тестирование и оптимизация систем компьютерного зрения. CV-инженер оценивает точность и скорость работы алгоритмов, улучшает и оптимизирует модели.
- Интеграция компьютерного зрения в приложения и системы. Вместе с другими разработчиками CV-инженер внедряет системы компьютерного зрения в программы.
На работе я занимаюсь разнообразными задачами — от проведения собеседований до обучения алгоритмов. В роли Machine Learning Engineer я разрабатываю гипотезы, провожу исследования, обучаю алгоритмы и в меньшей степени занимаюсь интеграцией этих алгоритмов в приложения. Как в любой IT-команде, у нас есть ежедневные встречи — дейлики. На них мы обсуждаем, что получилось, а что нет, говорим про текущие задачи и ставим цели по спринтам.
Чаще всего я использую Python. Также я работал с Kotlin, когда интегрировал алгоритм детектирования в приложение под Android. А при разработке цифровых систем управления главным инструментом был С++. Но это были единичные случаи: Python остается основным языком программирования.
Что нужно знать инженеру по компьютерному зрению

Для работы CV-инженером нужны знания в области математики и статистики, владение языками программирования и понимание принципов машинного и глубокого обучения.
Дорожная карта изучения CV может выглядеть так.
Шаг 1 — Основы программирования и математика
- Языки программирования. Для разработки систем CV чаще всего используют Python за счет большого количества библиотек и активного сообщества. Также подойдут C++ и MATLAB.
- Математика. Фреймворки для работы с CV используют математические концепции. Для их понимания стоит изучить: линейную алгебру (матрицы и векторы), математическую оптимизацию, теорию вероятностей и статистику, геометрию и теорию графов.
Шаг 2 — Основы компьютерного зрения и обработки изображений
Основные концепции обработки изображений, такие как фильтрация, морфологические операции, детектирование границ, сегментация.
Шаг 3 — Основы машинного и глубокого обучения
- Машинное обучение. Классификация, регрессия и кластеризация.
- Глубокое обучение. Основы нейронных сетей, включая сверточные нейронные сети (CNN), которые пригодятся для решения многих задач Computer Vision.
Шаг 4 — Продвинутые темы в компьютерном зрении
- Распознавание объектов, сегментация и отслеживание. Методы и архитектуры, такие как YOLO, SSD для распознавания объектов, U-Net для сегментации изображений.
- Предобученные модели. Умение использовать предобученные модели и fine-tuning для улучшения производительности.
Шаг 5 — Практика и проекты
Это может быть участие в соревнованиях по анализу данных на Kaggle или в открытых проектах на GitHub, собственные пет-проекты.
Книги для обучения компьютерному зрению
Practical Machine Learning for Computer Vision
Авторы: Valliappa Lakshmanan, Martin Görner, and Ryan Gillard

Инженеры Google показывают на практике, как разрабатывать архитектуры ML для задач CV, выбирать подходящие модели и обрабатывать изображения перед обучением.
Компьютерное зрение. Теория и алгоритмы
Автор: Рейнхард Клетте

Книга содержит теоретическую информацию по анализу и сегментации изображений, обнаружению объектов и другим аспектам CV. В конце каждой главы есть упражнения и вопросы по пройденному материалу.
Deep Learning for Computer Vision
Автор: Rajalingappaa Shanmugamani

Пособие по DL для опытных программистов, которое научит создавать проекты с CV и работать с TensorFlow и Keras. Есть практические упражнения и примеры к каждой теме.
Какие языки программирования и фреймворки используют в CV
Для исследований и разработки в области компьютерного зрения применяют Python, C++ и MATLAB.
Python
У него простой и понятный синтаксис и множество инструментов для работы с CV. А с его веб-фреймворками Flask и Django можно использовать OpenCV.
Библиотеки и инструменты для работы с CV
Используется для классификации и детектирования объектов, сегментации и генерации изображений. Подходит для разработки сложных моделей глубокого обучения, таких как CNN, RNN (рекуррентные нейронные сети), GAN (генеративно-состязательные сети) и т. д. Предоставляет высокоуровневые API для удобства работы и обучения моделей.
Является высокоуровневым API для работы с нейронными сетями и часто используется в компьютерном зрении для быстрого прототипирования и создания моделей глубокого обучения. С его помощью можно проводить эксперименты с различными архитектурами нейронных сетей.
Предоставляет гибкие инструменты для разработки и обучения моделей глубокого обучения. Предлагает динамический вычислительный граф, что делает его более гибким для создания и изменения моделей по сравнению с TensorFlow.
Библиотека для обработки изображений и видео. Предоставляет функции и алгоритмы для выполнения задач компьютерного зрения, таких как обнаружение объектов, сегментация, распознавание лиц.
Другие библиотеки Python: scikit-image, PIL/Pillow, NumPy, SciPy.
C++
Подходит для разработки высокопроизводительных приложений компьютерного зрения, где нужен непосредственный контроль над системными ресурсами.
Библиотеки и инструменты для работы с CV
- OpenCV
Библиотека OpenCV написана на C++, поэтому знание этого языка позволит при необходимости ее модифицировать. OpenCV также работает с Python, Java, JavaScript и Ruby.
- CUDA
Обеспечивает среду разработки с большой производительностью благодаря использованию графических процессоров NVIDIA.
- Dlib
Содержит алгоритмы машинного обучения и компьютерного зрения для определения лицевых ориентиров, отслеживания объектов и т. д. Также в нем есть Python API.
MATLAB
Язык программирования и среда для численных вычислений. Используют для прототипирования и разработки алгоритмов компьютерного зрения в академических и исследовательских целях. MATLAB имеет дорогостоящую лицензию.
Библиотеки и инструменты для работы с CV
- Image Processing Toolbox
Может улучшать, сегментировать изображения, использовать шумоподавление и геометрические преобразования. Поддерживает обработку 2D- и 3D-изображений произвольного размера.
- Computer Vision Toolbox
Предоставляет алгоритмы обработки видео, проектирования и тестирования CV. Можно использовать методы глубокого и машинного обучения для пользовательского обнаружения объектов.
Какие еще языки используют для работы с готовыми решениями
- JavaScript
Так же, как и Python, работает с TensorFlow. TensorFlow.js позволяет строить модели машинного обучения в браузере. OpenCV также имеет свою версию для JavaScript. Еще есть tracking.js для обнаружения лиц, three.ar.js для определения поверхностей и библиотека WebGazer.js, отслеживающая движение глаз.
- Java
Работает с OpenCV Java API. Также есть специальный набор инструментов DeepLearning4j для глубокого обучения, который позволяет взаимодействовать с библиотеками на Python через фреймворк Keras.
- C#
Также использует OpenCV. Есть инструменты AForge.NET, являющиеся частью фреймворка Accord.NET, которые позволяют обрабатывать изображения с помощью AForge.Imaging.
Зарплата Computer Vision Engineer
По данным hh.ru, зарплаты специалистов по компьютерному зрению и ML составляют от 70 000 ₽ для джунов до 400 000 ₽ для сеньоров и тимлидов. В феврале 2024 года в России было 230 вакансий для специалистов по CV:

Согласно статистике Хабр Карьеры, на февраль 2024 года средняя зарплата по всем специалистам по компьютерному зрению составляет 241 666 ₽.

В поисках вакансий нужно быть готовым к тому, что CV-инженеры в России востребованы не везде. В основном они нужны в госорганах и больших компаниях, которые занимаются исследованиями. Однако если у вас хорошо с английским, то смело рассматривайте зарубежный рынок вакансий — там на CV-инженеров хороший спрос.
Если вы только начинаете свой путь в CV, то советую перед курсами освоить теоретическую базу. Я закончил бакалавриат по специальности «Инженер-конструктор авиационных двигателей» и магистратуру по специальности «Цифровые системы управления». И там, и там было очень много математики. Образование дало мне понимание, как работают алгоритмы, практические навыки пришлось осваивать позже. Если вы освоите теорию, то практика, которую дают на обучающих курсах, вам будет даваться легко, и вы вынесете из учебы максимум пользы.
Узнать о программах высшего образования в Skillfactory и подготовиться к поступлению можно, подписавшись на наш Telegram-канал.