ЗАДАЧИ КОМПЬЮТЕРНОГО ЗРЕНИЯ
Давай на примерах разберем несколько задач, которые решаются с применением компьютерного зрения.
Первый пример — поиск изображений в интернете. Сейчас существует несколько сервисов, которые позволяют искать картинки. Изначально для поиска использовались текстовые запросы. Некоторое время назад в части из таких сервисов появилась возможность поиска по загруженному изображению. От пользователя требуется загрузить картинку, а сервис будет искать похожие на нее изображения в интернете.
Работает такой поиск следующим образом. Сначала индексируются изображения из интернета. Для них строятся цифровые представления, из них формируется структура данных, по которой можно быстро искать. То же происходит и с пользовательской картинкой — извлекается некое представление о ней, по которому в базе данных ищутся дубликаты или похожие картинки.
Эта задача сложна в структурном смысле. В интернет загружены миллиарды изображений, и использование сложных методов сравнения невозможно, потому что необходима высокая производительность.
Вот несколько других примеров.
Распознавание текста. Необходимо найти изображение текста на картинке и представить его в виде текстовых данных, с которыми можно будет работать, например, в текстовом редакторе. Эта технология широко используется в разных приложениях. В частности, это удобный способ вводить текст в онлайновый переводчик. Достаточно сфотографировать этикетку, и текст на ней будет распознан, а переводчик выполнит перевод.
Биометрия. Для распознавания людей может использоваться изображение лица, радужная оболочка глаза, отпечатки пальцев. Однако в основном компьютерное зрение занимается распознаванием лиц. С каждым годом эта технология работает все лучше и лучше и находит широкое применение.
Видеоаналитика. В мире устанавливается все больше камер: на дорогах для регистрации движения автомобилей или в общественных местах для отслеживания потоков людей и детектирования аномалий (например, оставленные вещи, нелегальные действия). Как следствие, возникает задача анализировать огромный поток информации. Компьютерное зрение помогает в решении этой задачи. Оно позволяет определять номер автомобиля, его марку, нарушает ли он правила дорожного движения.
Анализ спутниковых снимков. Сейчас накоплен огромный массив спутниковых снимков. Используя эти данные, можно решать самые разные задачи: улучшать карты, обнаруживать лесные пожары и другие проблемы, которые видны со спутника. Технологии компьютерного зрения шагнули в последнее время далеко вперед, и с их использованием автоматизируется все больше ручной работы в этой области.
Графические редакторы. Компьютерное зрение позволяет не только распознавать, что изображено на картинке. Оно же дает возможность менять и улучшать изображение. Получается, все, что можно сделать с помощью графического редактора, относится к технологии компьютерного зрения.
3D-анализ. Реконструкция объемных моделей — еще одна задача, решаемая с помощью компьютерного зрения. Например, используя множество изображений, сделанных в данном городе, можно восстановить форму зданий.
Управление автомобилем. В будущем любой автомобиль будет оснащен огромным количеством датчиков: видеокамерами, радарами, стереокамерой. Методы компьютерного зрения помогают анализировать информацию, получаемую с этих датчиков, и лежат в основе систем предотвращения ДТП и все более сложных автопилотов.
"НИЗКОУРОВНЕВОЕ" ЗРЕНИЕ
Методы компьютерного зрения используются для решения задач, которые условно можно разделить на простые и сложные. Сложные задачи отвечают на вопросы, какой объект изображен на картинке, к какому классу он относится. Для решения этих задач чаще всего используются методы машинного обучения.
При решении простых задач производятся манипуляции непосредственно с пикселями, используются эвристики, а методы машинного обучения, как правило, не применяются.
Здесь мы поговорим о задачах «простого», или «низкоуровневого», компьютерного зрения. Они нередко используются как составная часть более сложных задач распознавания. Например, предобработка картинки позволяет алгоритмам машинного обучения лучше понять, что на ней изображено.
Самая популярная библиотека для решения задач «низкоуровневого» компьютерного зрения — это OpenCV. В ней содержится огромное количество алгоритмов, есть интерфейсы для многих языков программирования, в том числе С++ и Python. Другая известная библиотека — skimage, она активно используется в скриптах на Python. В примерах дальше мы будем применять OpenCV.