- Необходими компоненти
- Инсталиране на OpenCV в Raspberry Pi
- Как да открия частите на лицето с помощта на dlib
- Програмиране на Raspberry Pi за откриване на ориентир на лицето
- Тестване на разпознавателя на лицеви части
Откриването на ориентири на лицето е процесът на откриване на различни части по лицето като Вежди, Очи, Нос, Уста и Челюст. Има много приложения, които използват техники за откриване на ориентир на лицето.
Преди изграждахме система за разпознаване на лица, използвайки OpenCV, днес ще използваме същия OpenCV с Raspberry Pi за откриване на ориентир на лицето. Предварително обучен модул за детектор на лицеви ориентири от библиотеката dlib ще се използва за откриване на местоположението на ключовите лицеви структури на лицето, а python OpenCV ще се използва за визуализиране на откритите части на лицето.
Необходими компоненти
Хардуерни компоненти
- Raspberry Pi 3
- Модул за камера Pi
Софтуер и онлайн услуги
- OpenCV
- Dlib
- Python3
Преди да пристъпим към това Raspberry Pi 3 Facial Landmark Detection , първо, трябва да инсталираме 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 за откриване на ориентир на лицето
Пълният код на python за разпознаване на части на лицето с предварително обучения детектор за ориентир на лицето на dlib е даден в края на страницата. Тук обясняваме някои важни части от кода за по-добро разбиране.
Така че, както обикновено, стартирайте кода, като включите всички необходими библиотеки.
от 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 fps
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Сега в следващите редове използвайте анализатора на аргументи, за да предоставите пътя до предиктор за ориентир на лицето.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-predictor", задължително = True, help = "пътека за предсказване на ориентир на лицето") args = vars (ap.parse_args ())
В следващите редове инициализирайте предварително обучения детектор за лице на dlib, базиран на HOG, и заредете предварително обучения предиктор за ориентир на лицето.
детектор = 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. Завъртете всеки от регионите на лицето поотделно.
за (i, rect) в изброяване (rects): shape = предиктор (сив, rect) shape = face_utils.shape_to_np (shape)
След това вземете копие на оригиналното изображение и го използвайте за цикъла, за да нарисувате името на лицевата част върху изображението. Цветът на текста ще бъде червен, можете да го промените на друг цвят, като промените RGB стойностите.
за (име, (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 = изображение roi = imutils.resize (roi, width = 250, inter = cv2.INTER_CUBIC)
Сега в последните редове на кода покажете частите на лицето с техните имена и отделно изображение на тази част. Използвайте клавиша ESC, за да промените областта на лицето.
cv2.imshow ("ROI", roi) cv2.imshow ("Изображение", клонинг) cv2.waitKey (0)
Тестване на разпознавателя на лицеви части
За да тествате проекта, създайте директория и отидете до нея, като използвате командите по-долу:
mkdir детектор за лице част cd детектор за лице част
Сега изтеглете файла shape_predictor_68_face_landmarks.dat от тази връзка и след това извлечете и копирайте файла shape_predictor_68_face_landmarks.dat вътре в тази библиотека и след това отворете нов файл с име detet.py и поставете кода, даден по-долу.
Сега стартирайте кода на python, като използвате командата по-долу:
python3 detect.py --shape-предиктор shape_predictor_68_face_landmarks.dat
Ще видите прозорец, показващ изглед на живо от вашата камера. След това натиснете клавиша 'S', за да изберете кадър от потока на живо. Ще видите червени точки в областта на устата си. Използвайте клавиша ESC, за да видите останалите части на лицето.
Пълният код на python и демонстрационното видео са дадени по-долу.