|
|
||
|---|---|---|
| .. | ||
| lab | ||
| README.md | ||
README.md
Введение в Компьютерное Зрение
Компьютерное зрение — это дисциплина, цель которой заключается в том, чтобы позволить компьютерам получать высокоуровневое понимание цифровых изображений. Это довольно широкое определение, поскольку понимание может означать много различных вещей, включая нахождение объекта на изображении (обнаружение объектов), понимание того, что происходит (обнаружение событий), описание изображения в текстовом виде или реконструкцию сцены в 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 (для 3 цветовых каналов). Чтобы загрузить изображение, вы можете использовать следующий код:
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 function can be used to perform other color space transformations such as converting an image to grayscale or to the HSV (Hue-Saturation-Value) color space.
You can also use OpenCV to load video frame-by-frame - an example is given in the exercise OpenCV Notebook.
Image Processing
Before feeding an image to a neural network, you may want to apply several pre-processing steps. OpenCV can do many things, including:
- Resizing the image using
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS) - Blurring the image using
im = cv2.medianBlur(im,3)orim = cv2.GaussianBlur(im, (3,3), 0) - Changing the brightness and contrast of the image can be done by NumPy array manipulations, as described in this Stackoverflow note.
- Using thresholding by calling
cv2.threshold/cv2.adaptiveThreshold, которые часто предпочтительнее, чем настройка яркости или контрастности. - Применение различных трансформаций к изображению:
- Аффинные трансформации могут быть полезны, если вам нужно комбинировать вращение, изменение размера и искажение изображения, и вы знаете исходное и целевое местоположение трех точек на изображении. Аффинные трансформации сохраняют параллельные линии параллельными.
- Перспективные трансформации могут быть полезны, когда вы знаете исходные и целевые позиции 4 точек на изображении. Например, если вы делаете снимок прямоугольного документа с помощью камеры смартфона под некоторым углом и хотите получить прямоугольное изображение самого документа.
- Понимание движения внутри изображения с помощью оптического потока.
Примеры использования Компьютерного Зрения
В нашем OpenCV Notebook мы приводим несколько примеров, когда компьютерное зрение может быть использовано для выполнения конкретных задач:
- Предварительная обработка фотографии книги на шрифте Брайля. Мы сосредотачиваемся на том, как можем использовать пороговую обработку, обнаружение признаков, перспективные трансформации и манипуляции с NumPy, чтобы отделить отдельные символы Брайля для дальнейшей классификации нейронной сетью.
![]() |
![]() |
![]() |
|---|
Изображение из OpenCV.ipynb
- Обнаружение движения в видео с использованием разности кадров. Если камера фиксирована, то кадры с камеры должны быть довольно похожи друг на друга. Поскольку кадры представлены в виде массивов, просто вычитая эти массивы для двух последующих кадров, мы получим разницу пикселей, которая должна быть низкой для статичных кадров и увеличиваться, как только в изображении появляется значительное движение.
Изображение из OpenCV.ipynb
-
Обнаружение движения с использованием оптического потока. Оптический поток позволяет нам понять, как отдельные пиксели на видеокадрах движутся. Существует два типа оптического потока:
- Плотный оптический поток вычисляет векторное поле, которое показывает, куда движется каждый пиксель.
- Разреженный оптический поток основан на выделении некоторых характерных признаков на изображении (например, краев) и построении их траектории от кадра к кадру.
Изображение из OpenCV.ipynb
✍️ Примерные Ноутбуки: OpenCV попробуйте OpenCV в действии
Давайте проведем несколько экспериментов с OpenCV, исследуя OpenCV Notebook
Заключение
Иногда относительно сложные задачи, такие как обнаружение движения или обнаружение кончиков пальцев, могут быть решены исключительно с помощью компьютерного зрения. Таким образом, очень полезно знать основные техники компьютерного зрения и что такие библиотеки, как OpenCV, могут делать.
🚀 Задача
Посмотрите это видео из AI show, чтобы узнать о проекте Cortic Tigers и о том, как они создали решение на основе блоков для демократизации задач компьютерного зрения с помощью робота. Проведите исследование других подобных проектов, которые помогают новичкам в этой области.
Послетест
Обзор и Самостоятельное Изучение
Читать больше об оптическом потоке в этом замечательном учебнике.
Задание
В этой лабораторной работе вы сделаете видео с простыми жестами, и ваша цель — извлечь движения вверх/вниз/влево/вправо с использованием оптического потока.
Отказ от ответственности:
Этот документ был переведен с использованием машинных AI-сервисов перевода. Хотя мы стремимся к точности, пожалуйста, имейте в виду, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для критически важной информации рекомендуется профессиональный человеческий перевод. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникающие в результате использования этого перевода.




