Обнаружение краев и обнаружение движения с помощью OpenCV на Raspberry Pi


Этот проект посвящен обнаружению границ (краев) и обнаружению движения с помощью OpenCV на плате Raspberry Pi 4. В OpenCV обнаружение краев и обнаружение движения служат столпами обработки изображений и компьютерного зрения. Благодаря обработке изображений такие методы, как обнаружение краев, уточняют визуальные данные, выделяя особенности для улучшенного вывода изображения. Напротив, обнаружение движения в компьютерном зрении связано с интерпретацией: оно различает и понимает движение, анализируя последовательности изображений, предлагая более глубокое понимание визуальных данных.

Обнаружение границ и обнаружение движения с помощью OpenCV на Raspberry Pi

В этом проекте мы будем использовать OpenCV на Raspberry Pi 4 для обработки видеокадров. Для обнаружения краев мы будем использовать метод обнаружения краев Canny на версиях кадров в оттенках серого. Для определения движения мы рассчитаем среднеквадратичную ошибку (MSE) между последовательными кадрами в оттенках серого - значительное изменение MSE указывает на движение. Эта настройка обеспечивает визуальное представление краев и потенциального движения в видеопотоке в реальном времени .

Пример обнаружения движения с помощью OpenCV

Необходимые компоненты

  1. Плата Raspberry Pi 4 Model B (или другая) (купить на AliExpress).
  2. Камера для Raspberry Pi (купить на AliExpress).
  3. SD-карта 16/32 ГБ.
  4. Адаптер постоянного тока 5 В, 3 А для RPi.
  5. ЖК-дисплей (опционально).
  6. Мышь и клавиатура (опционально).

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

Подключение камеры к Raspberry Pi

Raspberry Pi Camera — периферийное устройство, разработанное Raspberry Pi Foundation для использования с серией одноплатных компьютеров Raspberry Pi. Модуль камеры позволяет добавлять возможности видео/фотосъемки в проекты Raspberry Pi.

Для этого проекта мы можем использовать 5-мегапиксельную камеру Raspberry Pi.

Структурная схема подключения камеры к Raspberry Pi

Просто подключите модуль камеры к плате Raspberry Pi 4 с помощью разъема камеры.

Подключение камеры к Raspberry Pi

Чтобы использовать камеру, вам нужно сначала включить модуль камеры. Откройте Raspberry Pi Configuration Tool, введя sudo raspi-config в терминале. Перейдите к Interfacing OptionsCamera и включите его.

Что такое среднеквадратическая ошибка (MSE) и метод обнаружения границ Canny?

В этом проекте мы будем использовать метод обнаружения краев Canny для обнаружения краев и алгоритм среднеквадратической ошибки (MSE) для обнаружения движения. Вместе эти шаги позволяют алгоритму Canny надежно обнаруживать края на изображении.

Среднеквадратическая ошибка (MSE)

MSE — это часто используемая метрика для измерения разницы между двумя изображениями или сигналами. Она вычисляет среднеквадратические разницы между соответствующими значениями двух сигналов или изображений.

Что такое среднеквадратическая ошибка

Низкая MSE указывает на то, что эти два изображения тесно связаны, в то время как высокая MSE предполагает значительные различия. Математически для двух изображений I и J MSE определяется как:

Формула для расчета MSE между двумя изображениями 

где m и n — размеры изображений.

Метод обнаружения краёв Canny

Метод Canny — это многошаговый алгоритм, предназначенный для обнаружения широкого спектра краев на изображениях.

Принцип метода Canny для обнаружения краев на изображении

Ключевые этапы метода Canny включают в себя:

  • Подавление шума: изображения сглаживаются с помощью фильтра Гаусса для устранения шума.
  • Вычисление градиента: величина и направление градиента вычисляются для каждого пикселя, выделяя потенциальные края.
  • Подавление немаксимума: этот шаг утончает потенциальные края, гарантируя, что величина градиента максимальна в направлении края, уменьшая толщину краев.
  • Двойной порог: он различает сильные, слабые и не-края, гарантируя четкость настоящих краев.
  • Отслеживание краев с помощью гистерезиса: слабые края либо отбрасываются, либо повышаются до сильных краев в зависимости от их связи с сильными краями.

Настройка Raspberry Pi, установка библиотек и зависимостей

OpenCV требуется для обнаружения краев и движения, а также других задач обработки изображений, присутствующих в коде. Поэтому вам необходимо сначала установить OpenCV. Следуйте следующему руководству чтобы установить OpenCV на вашу плату Raspberry Pi.

Следующий шаг — установить picamera. Поэтому установите ее с помощью pip.

Настройка завершена. Теперь мы можем перейти непосредственно к нашему проекту

Код Python для Raspberry Pi для обнаружения краев и обнаружения движения с помощью OpenCV

Теперь давайте разработаем код Python, который поможет в обнаружении границ и обнаружении движения с помощью библиотеки OpenCV и камеры Raspberry Pi.

Код Python

Откройте Thonny IDE и вставьте следующий код в редактор Thonny. Сохраните этот файл под именем «Motion_detection.py» в любом месте.

Вот полный код Python.

Объяснение работы кода

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

Эта функция вычисляет среднеквадратичную ошибку между двумя изображениями. Она используется позже, чтобы определить, есть ли движение между последовательными кадрами, проверяя разницу.

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

Эта часть инициализирует основную часть кода. Она настраивает захват видео с определенного устройства камеры и устанавливает разрешение видео.

Внутри цикла для каждого кадра выполняется захват кадра, при необходимости применяется размытие по Гауссу, выполняется компенсация освещения, преобразуется кадр в оттенки серого, а затем определяются края.

Эта часть кода проверяет наличие движения, сравнивая текущий кадр в оттенках серого с предыдущим с помощью MSE. Если MSE выше 100, он обнаруживает движение.

Обработанные кадры отображаются, а также вычисляется и печатается FPS (кадры в секунду) обработки.

Если нажать клавишу 'Esc' (со значением ASCII 27), цикл прерывается. И в конце, независимо от того, как был завершен основной цикл, код обеспечивает закрытие окон OpenCV и освобождение ресурсов.

Тестирование работы проекта

Теперь нам нужно запустить код для обнаружения границ и обнаружения движения с помощью Raspberry Pi и OpenCV.

После запуска кода откроются 4 окна, как показано ниже.

Тестирование работы проекта на примере изображения руки

В первом окне будет показано исходное изображение. Во втором окне будет показано преобразованное изображение в оттенках серого. В третьем окне будет показано скомпенсированное изображение, которое выглядит более четким. На четвертом изображении показано обнаружение краев.

Тестирование работы проекта на примере изображения человека

Thonny Shell отобразит расчетную частоту кадров в секунду.

Отображение расчетной частоты кадров в секунду в Thonny Shell

Он также будет отображать статус обнаружения движения. Это означает, что всякий раз, когда объект движется или происходит изменение в кадре, в Thonny Shell будет отображаться сообщение “motion detected” («обнаружено движение»).

Отображение сообщения об обнаружении движения в Thonny Shell

Заключение

Проект обнаружение краев и обнаружение движения с помощью OpenCV на Raspberry Pi — это комплексная демонстрация интеграции нескольких методов обработки изображений с использованием OpenCV в сценарии реального времени. Он захватывает видеокадры, улучшает их с помощью компенсации освещения, обнаруживает края с помощью метода обнаружения краев Canny и отслеживает изменения от кадра к кадру для обнаружения движения с помощью метода среднеквадратичной ошибки.

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

(Проголосуй первым!)
Загрузка...
20 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *