Оглавление:

Базовые проекты OpenCV: 5 шагов
Базовые проекты OpenCV: 5 шагов

Видео: Базовые проекты OpenCV: 5 шагов

Видео: Базовые проекты OpenCV: 5 шагов
Видео: Введение в OpenCV: Работа с камерой в Python 2024, Июль
Anonim
Базовые проекты OpenCV
Базовые проекты OpenCV

В этом проекте мы исследуем некоторые базовые функции OpenCV с помощью 4 простых проектов, включающих поток видео в реальном времени. Это распознавание лиц, удаление фона, специальный визуальный рендеринг краев и применение эффекта размытия к живому видеопотоку. Моей основной целью попробовать эти проекты было просто намочить ноги в интерфейсе OpenCV, так как я планирую углубиться в область компьютерного зрения.

Запасы

  • Компьютер под управлением Python
  • Открытая библиотека CV, библиотека Numpy, библиотека tkinter, библиотека sys
  • Камера для подключения к компьютеру (если на компьютере ее еще нет)
  • Файл Python программы (включен в эту инструкцию)
  • xml-файл haarcascade (включен в это руководство)

Шаг 1: функция FaceDetect

Функция FaceDetect
Функция FaceDetect
Функция FaceDetect
Функция FaceDetect

Эта функция показывает видео с вашей камеры с зелеными квадратами на всех снимаемых ею лицах. В коде мы используем функцию cv2. VideoCapture () для сохранения видео, которое мы захватываем, в объекте с именем «capture». CAPTURE_INDEX - это номер, установленный вашим компьютером, который соответствует индексу вашей камеры в списке видеовходов компьютера. Если к компьютеру не подключена внешняя камера, подойдет 0 или 1.

Объект face_cascade инициализируется с помощью функции cascadeClassifier и файла haarcascade_frontalface_default.xml, который можно найти в github OpenCV. Мы используем этот объект для хранения лиц, обнаруженных в списке «лиц», в виде четырехстороннего кортежа, содержащего координаты x граней, координаты y, ширину и высоту. Затем мы рисуем прямоугольник, который идеально закрывает лицо, используя функцию cv2.rectangle.

Из этого видео OpenCV захватывает множество изображений в нашем цикле while, используя capture.read () и сохраняя изображение в кадре, который мы назвали «img». Затем каждое изображение интерпретируется и модифицируется по нашему желанию. Для faceDetect мы делаем изображение серым с помощью функции cvtColor, которая преобразует любое изображение, указанное в первом параметре, в определенный тип цвета изображения, указанный во втором параметре. Список допустимых значений второго параметра можно найти в Интернете. Затем мы отображаем изображение в окне с именем «Обнаружение лица» с помощью функции imshow (), которая принимает строку для имени окна и кадра изображения, который будет отображаться.

Наконец, мы ждем, пока пользователь введет клавишу q, используя функцию cv2.waitKey (). Маска 0xFF используется как соглашение для 64-битных компьютеров. После того, как пользователь завершил видеопоток, функция faceDetect освобождает объект захвата, а затем уничтожает все другие окна, открытые в интерфейсе OpenCV. Все остальные функции следуют аналогичной структуре дизайна.

Шаг 2: функция BackgroundRemove

Функция BackgroundRemove
Функция BackgroundRemove
Функция BackgroundRemove
Функция BackgroundRemove

Эта функция пытается удалить фоновую часть нашего видео и оставить только изображение переднего плана. Это может не работать на некоторых камерах, поскольку они используют функцию регулировки освещения, которая активируется, когда в кадр попадают различные объекты / фокусы. Если ваша функция удаления фона не работает, не волнуйтесь - это может быть просто ваша камера!

Чтобы использовать эту функцию, отойдите от кадра камеры и нажмите клавишу «d», чтобы сделать фоновое изображение. Важно, чтобы на заднем фоне, который вы хотите запечатлеть, не было движущихся объектов. Затем мы можем вернуться в кадр камеры. Если функция сработала, пользователь должен видеть себя только в видеопотоке функции. Любые шумы / черные пятна на изображении переднего плана могут быть результатом регулировки освещения камерой. Чтобы сделать снимок другого фона, нажмите клавишу «r» для повторной инициализации, затем снова нажмите «d».

Некоторыми ключевыми выводами для этой функции является использование логического значения «flag», которое поднимается в тот момент, когда пользователь нажимает кнопку d. Это захватывает фон и позволяет нам удалить его из видео, которое транслируется функцией. Мы стремимся сохранить фоновое изображение в ref_img, чтобы мы могли отличить его от изображения переднего плана, которое захватывает любой движущийся объект. Мы используем функцию cv2.subtract (), чтобы вычесть изображение переднего плана из фонового изображения и наоборот, а затем нейтрализовать любые незначительные различия в двух изображениях сразу после этого. Фон затемнен.

Маска fgmask создается с использованием разницы между этими двумя изображениями и затем применяется к видеопотоку функций с помощью функции OpenCV cv2.bitwise_and ().

Шаг 3: функция VideoEdges

Функция VideoEdges
Функция VideoEdges
Функция VideoEdges
Функция VideoEdges

Эта функция возвращает наш поток видео в реальном времени, но обнаруживаемые края отображаются белым цветом, а все остальное затемняется. Что отличает эту функцию от других функций, так это преобразование нашего исходного видео из формата RBG в HSV, что означает оттенок, насыщенность и вариации - другой метод обработки света и цвета из видео. С помощью этого метода мы можем легче различать контуры на видео, применяя фильтр (от красного_низкого до красного_высокого).

Canny Edge Detection используется для обнаружения краев изображения. Он принимает в качестве входных данных изображение в градациях серого и использует многоступенчатый алгоритм.

Шаг 4: функция VideoBlur

Функция VideoBlur
Функция VideoBlur
Функция VideoBlur
Функция VideoBlur

Эта функция используется для добавления эффекта размытия к нашему видеопотоку. Функция simple вызывает функцию GaussianBlur cv2 в нашем кадре. Дополнительную информацию о функции gaussianBlur можно найти здесь:

opencv-python-tutroals.readthedocs.io/en/l…

Шаг 5: Улучшения

Самая чувствительная функция в этом проекте - функция удаления фона, так как она требует использования камеры, не имеющей функции регулировки освещения. В библиотеке OpenCV может быть лучший набор функций, которые могут учитывать эту настройку освещения и плавно удалять фон (аналогично зеленому экрану).

Мы также могли бы использовать другие функции обнаружения лиц, которые могут создавать объекты с большей функциональностью, чем просто возвращение координат (x, y). Возможно, программу распознавания лиц с возможностью запоминания лиц не так уж сложно реализовать.

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

Рекомендуемые: