17 KiB
Введение в компьютерное зрение
Компьютерное зрение — это область, цель которой заключается в том, чтобы научить компьютеры понимать цифровые изображения на высоком уровне. Это довольно широкое определение, поскольку понимание может означать множество вещей, включая поиск объекта на изображении (обнаружение объектов), понимание происходящего (обнаружение событий), описание изображения текстом или реконструкцию сцены в 3D. Существуют также специальные задачи, связанные с изображениями людей: оценка возраста и эмоций, обнаружение и идентификация лиц, а также оценка позы в 3D, чтобы назвать лишь некоторые.
Тест перед лекцией
Одна из самых простых задач компьютерного зрения — это классификация изображений.
Компьютерное зрение часто рассматривается как ветвь искусственного интеллекта. Сегодня большинство задач компьютерного зрения решаются с использованием нейронных сетей. Мы подробнее изучим специальный тип нейронных сетей, используемых для компьютерного зрения, сверточные нейронные сети, в этом разделе.
Однако, прежде чем передать изображение нейронной сети, во многих случаях имеет смысл использовать некоторые алгоритмические методы для улучшения изображения.
Существует несколько библиотек Python для обработки изображений:
- imageio используется для чтения/записи различных форматов изображений. Она также поддерживает ffmpeg — полезный инструмент для преобразования видеокадров в изображения.
- Pillow (также известная как PIL) обладает большими возможностями и поддерживает манипуляции с изображениями, такие как морфинг, настройка палитры и многое другое.
- OpenCV — мощная библиотека обработки изображений, написанная на C++, которая стала стандартом де факто для обработки изображений. Она имеет удобный интерфейс для Python.
- dlib — библиотека на C++, реализующая множество алгоритмов машинного обучения, включая некоторые алгоритмы компьютерного зрения. Она также имеет интерфейс для Python и может использоваться для сложных задач, таких как обнаружение лиц и ключевых точек лица.
OpenCV
OpenCV считается стандартом де факто для обработки изображений. Она содержит множество полезных алгоритмов, реализованных на C++. Вы также можете использовать OpenCV из Python.
Хорошее место для изучения OpenCV — курс Learn OpenCV. В рамках нашей программы мы не ставим целью изучение OpenCV, а хотим показать несколько примеров, где она может быть полезна и как ее использовать.
Загрузка изображений
Изображения в Python удобно представлять в виде массивов NumPy. Например, черно-белые изображения размером 320x200 пикселей будут храниться в массиве размером 200x320, а цветные изображения тех же размеров будут иметь форму 200x320x3 (для трех цветовых каналов). Чтобы загрузить изображение, можно использовать следующий код:
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('image.jpeg')
plt.imshow(im)
Традиционно OpenCV использует кодировку BGR (синий-зеленый-красный) для цветных изображений, тогда как остальные инструменты Python используют более привычную RGB (красный-зеленый-синий). Чтобы изображение отображалось правильно, его нужно преобразовать в цветовое пространство RGB, либо поменяв местами измерения в массиве NumPy, либо вызвав функцию OpenCV:
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
Та же функция cvtColor может использоваться для выполнения других преобразований цветового пространства, таких как преобразование изображения в черно-белое или в HSV (оттенок-насыщенность-яркость).
Вы также можете использовать OpenCV для загрузки видео покадрово — пример приведен в упражнении OpenCV Notebook.
Обработка изображений
Перед передачей изображения нейронной сети может быть полезно выполнить несколько шагов предварительной обработки. OpenCV позволяет делать множество вещей, включая:
- Изменение размера изображения с помощью
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS) - Размытие изображения с помощью
im = cv2.medianBlur(im,3)илиim = cv2.GaussianBlur(im, (3,3), 0) - Изменение яркости и контрастности изображения можно выполнить с помощью манипуляций с массивами NumPy, как описано в этой заметке на Stackoverflow.
- Использование пороговой обработки с помощью функций
cv2.threshold/cv2.adaptiveThreshold, что часто предпочтительнее, чем настройка яркости или контрастности. - Применение различных преобразований к изображению:
- Афинные преобразования могут быть полезны, если нужно объединить вращение, изменение размера и наклон изображения, и известны исходное и целевое расположение трех точек на изображении. Афинные преобразования сохраняют параллельность линий.
- Перспективные преобразования могут быть полезны, если известны исходные и целевые позиции четырех точек на изображении. Например, если вы сделали снимок прямоугольного документа с помощью камеры смартфона под углом и хотите получить прямоугольное изображение самого документа.
- Понимание движения внутри изображения с помощью оптического потока.
Примеры использования компьютерного зрения
В нашем OpenCV Notebook мы приводим несколько примеров, когда компьютерное зрение может быть использовано для выполнения конкретных задач:
- Предварительная обработка фотографии книги на шрифте Брайля. Мы сосредотачиваемся на том, как можно использовать пороговую обработку, обнаружение признаков, перспективное преобразование и манипуляции с NumPy для разделения отдельных символов шрифта Брайля для дальнейшей классификации нейронной сетью.
![]() |
![]() |
![]() |
|---|
Изображение из OpenCV.ipynb
- Обнаружение движения в видео с помощью разницы кадров. Если камера неподвижна, то кадры из видеопотока должны быть довольно похожи друг на друга. Поскольку кадры представлены в виде массивов, просто вычитая эти массивы для двух последовательных кадров, мы получим разницу пикселей, которая должна быть низкой для статичных кадров и становиться выше при значительном движении на изображении.
Изображение из OpenCV.ipynb
-
Обнаружение движения с помощью оптического потока. Оптический поток позволяет понять, как отдельные пиксели на видеокадрах перемещаются. Существует два типа оптического потока:
- Плотный оптический поток вычисляет векторное поле, показывающее, куда движется каждый пиксель.
- Разреженный оптический поток основан на выделении некоторых характерных признаков изображения (например, краев) и построении их траектории от кадра к кадру.
Изображение из OpenCV.ipynb
✍️ Примерные ноутбуки: OpenCV попробуйте OpenCV в действии
Давайте проведем эксперименты с OpenCV, изучая OpenCV Notebook.
Заключение
Иногда относительно сложные задачи, такие как обнаружение движения или обнаружение кончиков пальцев, могут быть решены исключительно с помощью компьютерного зрения. Поэтому очень полезно знать основные техники компьютерного зрения и возможности таких библиотек, как OpenCV.
🚀 Задание
Посмотрите это видео из AI Show, чтобы узнать о проекте Cortic Tigers и о том, как они создали решение на основе блоков для демократизации задач компьютерного зрения с помощью робота. Проведите исследование других подобных проектов, которые помогают новичкам освоить эту область.
Тест после лекции
Обзор и самостоятельное изучение
Прочитайте больше об оптическом потоке в этом отличном руководстве.
Задание
В этой лабораторной работе вам нужно будет снять видео с простыми жестами, и ваша цель — извлечь движения вверх/вниз/влево/вправо с помощью оптического потока.
Отказ от ответственности:
Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Хотя мы стремимся к точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникающие в результате использования данного перевода.




