- Потрібні компоненти
- Встановлення OpenCV в Raspberry Pi
- Встановлення інших необхідних пакетів
- Налаштування ThingSpeak для підрахунку людей
- Налаштування обладнання
- Пояснення програми Python для лічильника людей
- Тестування
У сучасному світі передових технологій цифрова обробка зображень дуже швидко зростає і стає важливою частиною багатьох цифрових пристроїв, таких як мобільні, камери безпеки, ноутбуки тощо.
Найпоширенішими програмами цифрової обробки зображень є виявлення об’єктів, розпізнавання обличчя та лічильник людей. Отже, у цьому підручнику ми збираємося створити OpenCV для підрахунку за допомогою Raspberry Pi та ThingSpeak. Тут модуль камери pi буде використовуватися для безперервного захоплення кадрів, а потім ці кадри оброблятимуться за допомогою HOG (дескриптор орієнтованого на гістограму) для виявлення об'єктів на зображенні. Після цього ці кадри будуть порівняні з попередньо навченою моделлю виявлення людей OpenCV. Підрахунок людей відображатиметься на каналі ThingSpeak, за яким можна стежити з будь-якої точки світу.
Потрібні компоненти
Апаратне забезпечення
- Raspberry Pi 3 (будь-яка версія)
- Пі-камера
Програмне забезпечення та Інтернет-послуги
- 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 - це дуже популярна платформа IoT, і, використовуючи платформу ThingSpeak, ми можемо контролювати наші дані через Інтернет з будь-якого місця. Він також використовується для управління системою через Інтернет, використовуючи канали та веб-сторінки, надані ThingSpeak. Раніше ми використовували ThingSpeak для побудови багатьох проектів на основі IoT.
Щоб спочатку створити канал на ThingSpeak, спочатку зареєструйтесь на ThingSpeak. Якщо у вас вже є обліковий запис на ThingSpeak, увійдіть, використовуючи свій ідентифікатор та пароль.
Клацніть на Підписати та введіть свої дані.
Після цього підтвердьте свій ідентифікатор електронної пошти та натисніть "Продовжити".
Тепер, після входу, створіть новий канал, натиснувши кнопку « Новий канал ».
Після натискання кнопки « Новий канал» введіть ім’я та опис даних, які ви хочете завантажити на цей канал. Тут ми створили одне поле під назвою Люди . За вимогами можна створити кілька полів.
Після цього натисніть кнопку зберегти канал, щоб зберегти деталі.
Щоб надіслати дані до ThingSpeak, введіть ключ API та ідентифікатор каналу в сценарії Python, тому скопіюйте ключ API та ідентифікатор каналу.
Налаштування обладнання
Тут нам потрібні лише камери Raspberry Pi та Pi для цього проекту підрахунку людей OpenCV, і вам просто потрібно приєднати роз’єм стрічки камери в гніздо камери, вказане в Raspberry pi
Камеру Pi можна використовувати для побудови різних цікавих проектів, таких як камера спостереження Raspberry Pi, система моніторингу відвідувачів, система домашньої безпеки тощо.
Пояснення програми Python для лічильника людей
Повний код python для цього підрахунку натовпу проекту OpenCV наведено в кінці сторінки. Тут ми пояснюємо важливі розділи коду для кращого пояснення.
Отже, на початку коду імпортуйте всі необхідні бібліотеки, які будуть використовуватися в цьому проекті.
імпорт cv2 імпорт імутилів з imutils.object_detection імпорт non_max_suppression імпорт numpy як np імпорт запитів час імпорту import base64 з matplotlib import pyplot як plt з urllib.request import urlopen
Після імпорту бібліотек введіть ідентифікатор каналу ThingSpeak та напишіть ключ API, який ви скопіювали раніше.
channel_id = 812060 # ВСТАНОВИТИ ІДЕНТ. КАНАЛУ ТУТ WRITE_API = 'X5AQ3EGIKMBYW31H' # ВСТАВІТЬ СВОЙ КЛЮЧ ДЛЯ НАПИСУ ТАМ 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, розділене на три кольорові канали. Після цього він змінює розмір зображення за допомогою імутилів . Потім він викликає метод виявленняMultiScale () для аналізу зображення, щоб дізнатись, чи існує людина, використовуючи результат класифікації з моделі SVM.
детектор деф (зображення): image = imutils.resize (image, width = min (400, image.shape)) clone = image.copy () rects, weights = hog.detectMultiScale (image, winStride = (4, 4), відступ = (8, 8), масштаб = 1,05)
Іноді ящики захоплення перекриваються і генерують помилкові спрацьовування або помилки виявлення, тому нижче наведений код застосовує немакс. Придушення імутилів до початкових перекриваються ящиків.
for (x, y, w, h) in rects: cv2.rectangle (image, (x, y), (x + w, y + h), (0, 0, 255), 2) rects = np.array (для (x, y, w, h) у прямокутниках)) result = non_max_suppression (rects, probs = None, overlapThresh = 0.7) повернути результат
Усередині функції record () він отримує зображення безпосередньо з камери Pi за допомогою методу VideoCapture () від OpenCV, змінює розмір за допомогою imultis і надсилає результати до ThingSpeak.
def запис (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, виконавши таку команду:
Тоді ви знайдете спливаюче вікно з вашим відеопотоком. Пі зробить перший кадр і обробить його за допомогою OpenCV для виявлення кількості людей. Якщо він виявить людей, ви знайдете навколо нього таке вікно:
Тепер перевірте свій канал ThingSpeak, де ви зможете контролювати розмір натовпу з будь-якої точки світу.
Ось як ви можете зробити підрахунок натовпу OpenCV за допомогою Raspberry Pi. Робоче відео та код подано в кінці сторінки.