Оглавление:
- Запасы
- Шаг 1: функция FaceDetect
- Шаг 2: функция BackgroundRemove
- Шаг 3: функция VideoEdges
- Шаг 4: функция VideoBlur
- Шаг 5: Улучшения
Видео: Базовые проекты OpenCV: 5 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:49
В этом проекте мы исследуем некоторые базовые функции OpenCV с помощью 4 простых проектов, включающих поток видео в реальном времени. Это распознавание лиц, удаление фона, специальный визуальный рендеринг краев и применение эффекта размытия к живому видеопотоку. Моей основной целью попробовать эти проекты было просто намочить ноги в интерфейсе OpenCV, так как я планирую углубиться в область компьютерного зрения.
Запасы
- Компьютер под управлением Python
- Открытая библиотека CV, библиотека Numpy, библиотека tkinter, библиотека sys
- Камера для подключения к компьютеру (если на компьютере ее еще нет)
- Файл Python программы (включен в эту инструкцию)
- xml-файл haarcascade (включен в это руководство)
Шаг 1: функция 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
Эта функция пытается удалить фоновую часть нашего видео и оставить только изображение переднего плана. Это может не работать на некоторых камерах, поскольку они используют функцию регулировки освещения, которая активируется, когда в кадр попадают различные объекты / фокусы. Если ваша функция удаления фона не работает, не волнуйтесь - это может быть просто ваша камера!
Чтобы использовать эту функцию, отойдите от кадра камеры и нажмите клавишу «d», чтобы сделать фоновое изображение. Важно, чтобы на заднем фоне, который вы хотите запечатлеть, не было движущихся объектов. Затем мы можем вернуться в кадр камеры. Если функция сработала, пользователь должен видеть себя только в видеопотоке функции. Любые шумы / черные пятна на изображении переднего плана могут быть результатом регулировки освещения камерой. Чтобы сделать снимок другого фона, нажмите клавишу «r» для повторной инициализации, затем снова нажмите «d».
Некоторыми ключевыми выводами для этой функции является использование логического значения «flag», которое поднимается в тот момент, когда пользователь нажимает кнопку d. Это захватывает фон и позволяет нам удалить его из видео, которое транслируется функцией. Мы стремимся сохранить фоновое изображение в ref_img, чтобы мы могли отличить его от изображения переднего плана, которое захватывает любой движущийся объект. Мы используем функцию cv2.subtract (), чтобы вычесть изображение переднего плана из фонового изображения и наоборот, а затем нейтрализовать любые незначительные различия в двух изображениях сразу после этого. Фон затемнен.
Маска fgmask создается с использованием разницы между этими двумя изображениями и затем применяется к видеопотоку функций с помощью функции OpenCV cv2.bitwise_and ().
Шаг 3: функция VideoEdges
Эта функция возвращает наш поток видео в реальном времени, но обнаруживаемые края отображаются белым цветом, а все остальное затемняется. Что отличает эту функцию от других функций, так это преобразование нашего исходного видео из формата RBG в HSV, что означает оттенок, насыщенность и вариации - другой метод обработки света и цвета из видео. С помощью этого метода мы можем легче различать контуры на видео, применяя фильтр (от красного_низкого до красного_высокого).
Canny Edge Detection используется для обнаружения краев изображения. Он принимает в качестве входных данных изображение в градациях серого и использует многоступенчатый алгоритм.
Шаг 4: функция VideoBlur
Эта функция используется для добавления эффекта размытия к нашему видеопотоку. Функция simple вызывает функцию GaussianBlur cv2 в нашем кадре. Дополнительную информацию о функции gaussianBlur можно найти здесь:
opencv-python-tutroals.readthedocs.io/en/l…
Шаг 5: Улучшения
Самая чувствительная функция в этом проекте - функция удаления фона, так как она требует использования камеры, не имеющей функции регулировки освещения. В библиотеке OpenCV может быть лучший набор функций, которые могут учитывать эту настройку освещения и плавно удалять фон (аналогично зеленому экрану).
Мы также могли бы использовать другие функции обнаружения лиц, которые могут создавать объекты с большей функциональностью, чем просто возвращение координат (x, y). Возможно, программу распознавания лиц с возможностью запоминания лиц не так уж сложно реализовать.
Функцию размытия можно настроить с помощью интуитивно понятного управления пользователем. Например, пользователь может захотеть отрегулировать интенсивность эффекта размытия или выбрать конкретную область в кадре для размытия.
Рекомендуемые:
Как сделать RADAR с помощью Arduino для научного проекта - Лучшие проекты Arduino: 5 шагов
Как сделать RADAR с помощью Arduino для научного проекта | Лучшие проекты Arduino: Привет, друзья, в этом руководстве я покажу вам, как создать удивительную радарную систему, построенную с использованием Arduino nano, этот проект идеально подходит для научных проектов, и вы можете легко сделать это с очень меньшими инвестициями и шансами, если выиграть приз будет большим
Как импортировать проекты Java в Eclipse для начинающих: 11 шагов
Как импортировать проекты Java в Eclipse для начинающих: Введение Следующие инструкции содержат пошаговые инструкции по установке проектов Java на компьютерное программное обеспечение Eclipse. Проекты Java содержат весь код, интерфейсы и файлы, необходимые для создания программы Java. Эти проекты пла
Лучшие проекты с использованием печатных плат: 6 шагов
Лучшие проекты с использованием печатных плат: если вы потратили время на работу с проектами электроники, то вы знаете, насколько это может быть весело и увлекательно. Нет ничего более радостного, чем видеть, как ваша схема оживает прямо у вас на глазах. Это становится еще более захватывающим, когда ваш проект превращается в
Индикатор уровня воды - Базовые схемы транзисторов: 5 шагов
Индикатор уровня воды | Основные схемы транзистора: маркер уровня воды - это электронное устройство, которое передает данные обратно на плату управления, чтобы показать, высокий или низкий уровень воды в водном пути. Некоторые указатели уровня воды используют комбинацию тестовых датчиков или изменений для определения уровня воды. Там
Базовые вычисления IOT с использованием Nodemcu и Micropython: 11 шагов
Базовые вычисления IOT с использованием Nodemcu и Micropython: в этом руководстве я собираюсь использовать соединение NodeMcu, micropython и Mqtt для подключения к серверу. В этом руководстве используется соединение mqtt на основе https для подключения от Nodemcu к серверу Adafruit.io. используя язык программирования micropython