- Необходимые компоненты
- Установка OpenCV в Raspberry Pi
- Установка других необходимых пакетов
- Установка ThingSpeak для подсчета людей
- Настройка оборудования
- Описание программы Python для счетчика посетителей
- Тестирование
В современном мире передовых технологий цифровая обработка изображений развивается очень быстро и становится важной частью многих цифровых устройств, таких как мобильные устройства, камеры видеонаблюдения, ноутбуки и т. Д.
Наиболее распространенными приложениями цифровой обработки изображений являются обнаружение объектов, распознавание лиц и счетчик посетителей. Итак, в этом руководстве мы собираемся построить подсчет толпы OpenCV с помощью Raspberry Pi и ThingSpeak. Здесь модуль пи-камеры будет использоваться для непрерывного захвата кадров, а затем эти кадры будут обрабатываться с помощью HOG (дескриптор ориентированного на гистограмму объекта) для обнаружения объектов на изображении. После этого эти кадры будут сравниваться с предварительно обученной моделью OpenCV для обнаружения людей. Подсчет людей будет отображаться на канале ThingSpeak, за которым можно будет следить из любой точки мира.
Необходимые компоненты
Оборудование
- Raspberry Pi 3 (любая версия)
- Pi камера
Программное обеспечение и онлайн-сервисы
- ThingSpeak
- Python3.0
- OpenCV3.0
Установка OpenCV в Raspberry Pi
Здесь библиотека OpenCV будет использоваться для обнаружения толпы. Чтобы установить OpenCV, сначала обновите Raspberry Pi.
sudo apt-get update
Затем установите необходимые зависимости для установки OpenCV на Raspberry Pi.
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –Y sudo apt-get install libqt4-test –y
После этого установите OpenCV в Raspberry Pi, используя следующую команду.
pip3 установить opencv-contrib-python == 4.1.0.25
Ранее мы использовали OpenCV с Raspberry pi и создали по нему множество руководств.
- Установка OpenCV на Raspberry Pi с помощью CMake
- Распознавание лиц в реальном времени с помощью Raspberry Pi и OpenCV
- Распознавание номерных знаков с использованием Raspberry Pi и OpenCV
Мы также создали серию руководств по OpenCV, начиная с начального уровня.
Установка других необходимых пакетов
Прежде чем программировать Raspberry Pi для подсчета толпы, давайте установим другие необходимые пакеты.
Установка imutils : imutils используется для выполнения нескольких необходимых функций обработки изображений, таких как перевод, поворот, изменение размера, скелетонизация и упрощение отображения изображений Matplotlib с помощью OpenCV. Итак, установите imutils, используя команду ниже:
pip3 установить imutils
matplotlib : после этого установитебиблиотеку matplotlib. Matplotlib - это комплексная библиотека для создания статических, анимированных и интерактивных визуализаций в Python.
pip3 установить matplotlib
Установка ThingSpeak для подсчета людей
ThingSpeak - очень популярная платформа Интернета вещей, и с помощью платформы ThingSpeak мы можем отслеживать наши данные через Интернет из любого места. Он также используется для управления системой через Интернет с использованием каналов и веб-страниц, предоставляемых ThingSpeak. Ранее мы использовали ThingSpeak для создания множества проектов на основе Интернета вещей.
Чтобы сначала создать канал на ThingSpeak, сначала зарегистрируйтесь на ThingSpeak. В случае, если у вас уже есть учетная запись на ThingSpeak, войдите в систему, используя свой идентификатор и пароль.
Нажмите «Зарегистрироваться» и введите свои данные.
После этого подтвердите свой идентификатор электронной почты и нажмите «Продолжить».
Теперь, после входа в систему, создайте новый канал, нажав кнопку « Новый канал ».
После нажатия на « Новый канал» введите Имя и Описание данных, которые вы хотите загрузить на этот канал. Здесь мы создали одно поле с именем Люди . В соответствии с требованиями можно создать несколько полей.
После этого нажмите кнопку «Сохранить канал», чтобы сохранить детали.
Чтобы отправить данные в ThingSpeak, введите ключ API и идентификатор канала в скрипт Python, поэтому скопируйте ключ API и идентификатор канала.
Настройка оборудования
Здесь нам требуется только камера Raspberry Pi и Pi для этого проекта подсчета людей OpenCV, и вам просто нужно прикрепить ленточный разъем камеры в слот камеры, указанный в Raspberry pi.
Камеру Pi можно использовать для создания различных интересных проектов, таких как камера наблюдения Raspberry Pi, система мониторинга посетителей, система домашней безопасности и т. Д.
Описание программы Python для счетчика посетителей
Полный код Python для этого проекта OpenCV, учитывающий толпы, приведен в конце страницы. Здесь мы объясняем важные разделы кода для лучшего объяснения.
Итак, в начале кода импортируйте все необходимые библиотеки, которые будут использоваться в этом проекте.
import cv2 import imutils from imutils.object_detection import non_max_suppression import numpy as np import requests import time import base64 from matplotlib import pyplot as plt from urllib.request import urlopen
После импорта библиотек введите идентификатор канала ThingSpeak и напишите ключ API, который вы скопировали ранее.
channel_id = 812060 # PUT CHANNEL ID HERE WRITE_API = 'X5AQ3EGIKMBYW31H' # PUT YRITE KEY HERE BASE_URL = "https://api.thingspeak.com/update?api_key= {}". формат (WRITE_API)
Теперь инициализируйте HOG (дескриптор объекта, ориентированного на гистограмму). HOG - один из самых популярных методов обнаружения объектов, который использовался в нескольких приложениях. cv2.HOGDescriptor_getDefaultPeopleDetector () используется для вызова предварительно обученной модели OpenCV для обнаружения людей. Ранее мы подробно объясняли HOG в предыдущем руководстве по OpenCV.
hog = cv2.HOGDescriptor () hog.setSVMDetector (cv2.HOGDescriptor_getDefaultPeopleDetector ())
Внутри детектора () Pi получает изображение RGB, разделенное на три цветовых канала. После этого он изменяет размер изображения с помощью imutils . Затем он вызывает метод detectMultiScale () для анализа изображения, чтобы узнать, существует ли человек, используя результат классификации из модели SVM.
детектор def (изображение): image = imutils.resize (image, width = min (400, image.shape)) clone = image.copy () rects, weights = hog.detectMultiScale (image, winStride = (4, 4), padding = (8, 8), scale = 1.05)
Иногда блоки захвата перекрываются и генерируют ложные срабатывания или ошибки обнаружения, поэтому приведенный ниже код применяет не-максимальное подавление от imutils к начальным перекрывающимся блокам .
for (x, y, w, h) в rects: cv2.rectangle (image, (x, y), (x + w, y + h), (0, 0, 255), 2) rects = np.array (для (x, y, w, h) в rects]) result = non_max_suppression (rects, probs = None, overlapThresh = 0,7) вернуть результат
Внутри функции record () он извлекает изображение непосредственно с камеры Pi с помощью метода VideoCapture () из OpenCV, изменяет его размер с помощью imultis и отправляет результаты в ThingSpeak.
def record (sample_time = 5): camera = cv2.VideoCapture (0) frame = imutils.resize (frame, width = min (400, frame.shape)) result = Detector (frame.copy ()) thingspeakHttp = BASE_URL + " & field1 = {} ". формат (результат1)
Тестирование
Перед запуском скрипта python сначала проверьте, работает ли ваша камера PI или нет. После просмотра камеры запустите скрипт python, введя следующую команду:
Затем вы увидите всплывающее окно с вашим видеопотоком. Pi возьмет первый кадр и обработает его с помощью OpenCV для определения количества людей. Если он обнаруживает людей, вы найдете вокруг него такую рамку:
Теперь проверьте свой канал ThingSpeak, где вы можете отслеживать размер толпы из любой точки мира.
Вот как вы можете сделать подсчет толпы OpenCV с помощью Raspberry Pi. Рабочее видео и код приведены в конце страницы.