- Потрібні компоненти
- Встановлення OpenCV в Raspberry Pi
- Як виявити частини обличчя за допомогою dlib
- Програмування Raspberry Pi для виявлення орієнтирів на обличчі
- Тестування розпізнавача частин обличчя
Виявлення орієнтирів на обличчі - це процес виявлення різних частин обличчя, таких як брови, очі, ніс, рот і щелепа. Є багато програм, які використовують методи виявлення орієнтирів на обличчі.
Раніше ми будували систему розпізнавання облич за допомогою OpenCV, сьогодні ми будемо використовувати ту саму OpenCV з Raspberry Pi для виявлення орієнтирів на обличчі. Заздалегідь навчений модуль детектора місць для обличчя з бібліотеки dlib буде використаний для виявлення розташування ключових структур обличчя на обличчі, а python OpenCV буде використаний для візуалізації виявлених частин обличчя.
Потрібні компоненти
Апаратні компоненти
- Raspberry Pi 3
- Модуль камери Pi
Програмне забезпечення та Інтернет-послуги
- OpenCV
- Dlib
- Python3
Перш ніж продовжувати розпізнавання орієнтирів на обличчі Raspberry Pi 3 , спочатку нам потрібно встановити OpenCV, imutils, dlib, Numpy та деякі інші залежності в цьому проекті. Тут використовується OpenCV для цифрової обробки зображень. Найпоширенішими програмами цифрової обробки зображень є виявлення об’єктів, розпізнавання обличчя та лічильник людей.
Щоб дізнатись більше про те, як взаємодіяти камеру Pi з Raspberry Pi, дотримуйтесь наших попередніх підручників.
Встановлення OpenCV в Raspberry Pi
Тут бібліотека OpenCV буде використана для QR-сканера Raspberry Pi. Щоб встановити 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
Ми також створили серію підручників OpenCV, починаючи з початкового рівня.
Встановлення imutils : imutils використовується для виконання кількох необхідних функцій обробки зображень, таких як переклад, обертання, зміна розміру, скелетування та легше відображення зображень Matplotlib за допомогою OpenCV. Тож встановіть imutils, використовуючи команду нижче:
pip3 встановити imutils - -
Встановлення dlib: dlib - це сучасний набір інструментів, який містить алгоритми машинного навчання та інструменти для вирішення реальних проблем. Використовуйте команду нижче, щоб встановити dlib.
pip3 встановити dlib
Встановлення NumPy : NumPy - це основна бібліотека для наукових обчислень, яка містить потужний n-вимірний об'єкт масиву, забезпечує інструменти для інтеграції C, C ++ тощо.
Pip3 встановити numpy
Як виявити частини обличчя за допомогою dlib
Ми збираємось використовувати попередньо навчений детектор місць для бібліотеки dlib, щоб виявити розташування 68 (x, y) -координат, які відображаються на структурах обличчя на обличчі. Прогнозований орієнтир для обличчя dlib тренується на наборі даних iBUG 300-W. Зображення, що містить індекси 68 координат, наведено нижче:
Програмування Raspberry Pi для виявлення орієнтирів на обличчі
Повний код пітона для розпізнавання частин обличчя з попередньо навченим детектором місць для обличчя наведено в кінці сторінки. Тут ми пояснюємо деякі важливі частини коду для кращого розуміння.
Отже, як зазвичай, почніть код, включаючи всі необхідні бібліотеки.
від imutils import face_utils import numpy as np import argparse import imutils import dlib import cv2 from picamera.array import PiRGBArray from picamera import PiCamera
Потім ініціалізуйте об’єкт камери та встановіть роздільну здатність (640, 480) і частоту кадрів 30 кадрів в секунду
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Тепер у наступних рядках використовуйте синтаксичний аналізатор аргументів, щоб вказати шлях до провісника орієнтиру обличчя.
ap = argparse.
У наступних рядках ініціалізуйте попередньо навчений детектор обличчя на базі HOG та завантажте попередньо навчений індикатор орієнтиру обличчя.
detector = dlib.get_frontal_face_detector () предиктор = dlib.shape_predictor (аргументи)
Потім використовуйте функцію capture_continuous, щоб розпочати зйомку кадрів з камери Raspberry Pi.
для кадру в camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", image) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
Використовуйте клавішу клавіатури 'S', щоб зафіксувати певний кадр. Потім змініть розмір захопленого зображення та перетворіть його у відтінки сірого.
якщо ключ == ord ("s"): image = imutils.resize (image, width = 400) grey = cv2.cvtColor (image, cv2.COLOR_BGR2GREY)
Використовуйте функцію детектора бібліотеки dlib для виявлення граней на захопленому зображенні.
rects = детектор (сірий, 1)
Зробіть знімок, на якому було виконано виявлення обличчя, визначте орієнтири обличчя та перетворіть 68 точок у масив NumPy. Проведіть петлю над кожною областю обличчя окремо.
for (i, rect) в enumerate (rects): shape = предиктор (сірий, rect) shape = face_utils.shape_to_np (shape)
Потім візьміть копію оригінального зображення і використовуйте його для циклу, щоб намалювати на зображенні ім'я частини обличчя. Колір тексту буде червоним, ви можете змінити його на інший, змінивши значення RGB.
for (name, (i, j)) у face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = image.copy () cv2.putText (clone, name, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
Тепер ми проведемо цикл над виявленими частинами обличчя та використаємо функцію малювання OpenCV, щоб намалювати кола на цих частинах обличчя. Ви можете стежити за цим документом OpenCV, щоб отримати додаткову інформацію про функції малювання
для (x, y) у формі: cv2.circle (клон, (x, y), 1, (0, 0, 255), -1)
Тепер у наступних рядках ми будемо виділяти кожну частину грані як окреме зображення, обчислюючи обмежувальне поле координат конкретної частини обличчя. Витягнуте зображення буде змінено на 250 пікселів.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = image roi = imutils.resize (roi, width = 250, inter = cv2.INTER_CUBIC)
Тепер у останніх рядках коду відображайте частини обличчя з їх іменами та окреме зображення цієї частини. Використовуйте клавішу ESC, щоб змінити область обличчя.
cv2.imshow ("ROI", roi) cv2.imshow ("Зображення", клон) cv2.waitKey (0)
Тестування розпізнавача частин обличчя
Щоб протестувати проект, створіть каталог і перейдіть до нього за допомогою наведених нижче команд:
mkdir face-part-detector cd face-part-detector
Тепер завантажте файл shape_predictor_68_face_landmarks.dat із цього посилання, а потім витягніть та скопіюйте файл shape_predictor_68_face_landmarks.dat всередині цієї бібліотеки, а потім відкрийте новий файл з назвою detect.py та вставте код, наведений нижче.
Тепер запустіть код python, використовуючи команду нижче:
python3 detect.py --shape-предиктор shape_predictor_68_face_landmarks.dat
Ви побачите вікно, що відображає перегляд у реальному часі з камери. Потім натисніть клавішу 'S', щоб вибрати кадр із прямої трансляції. Ви побачите червоні крапки на області рота. Використовуйте клавішу ESC, щоб побачити інші частини обличчя.
Повний код python та демонстраційне відео наведено нижче.