Работа с лицами - одна из самых интересных задач машинного обучения. В этом посте я постараюсь показать, как с помощью ML можно выполнять великолепные задачи с лицами.
Особая благодарность Адриану Роузброку, его блог на https://www.pyimagesearch.com/ вдохновляет и полон фантастических руководств.
Без него я не смог бы написать такой пост.
Распознавание 1 лица с использованием функций Хаара
Вначале были боевые действия Хаара, предложенные Полом Виолой и Майклом Джонсом в качестве отдельного дескриптора функции, используемого в компьютерном зрении и обработке изображений с целью обнаружения объектов. Используя эти функции, вы тренируете детектор объектов, который может определять местонахождение лица. Поскольку это уже реализовано, нам повезло, что у нас есть несколько готовых классификаторов, которые мы можем применять напрямую, не сталкиваясь с бременем обучения.
Обычно эти классификаторы построены как Каскадный классификатор для обнаружения объектов. Под «каскадом» в названии классификатора мы подразумеваем, что на самом деле у них есть несколько более простых классификаторов, которые применяются для изображения до тех пор, пока на каком-то этапе кандидат отклоняется или все этапы пройдены.
В этом примере кода используется готовый детектор лиц, кодируемый как XML-файл, который называется «haarcascade_frontalface_default.xml», доступный с opencv.
import cv2
imageFileName = ”image1.jpeg”
image = cv2.imread (imageFileName)
grayscale_image = cv2.cvtColor (image, cv2.COLOR_RGB2GRAY)
face_cascade = cv2.CascadeClassifier ('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale (grayscale_image, 1.25, 6)
для (x, y, w, h) в лицах:
cv2.rectangle (image, (x, y), (x + w, y + h), (255,0,0), 2)
cv2.imshow ('изображение', изображение)
cv2.waitKey (0)
Полный список каскадных классификаторов Хаара, которые вы можете просто использовать в своем коде, можно найти по адресу: - https://github.com/opencv/opencv/tree/master/data/haarcascades
2-Обнаружение ориентиров на лице
Самый простой способ сделать это - использовать dlib, инициализировать детектор лиц dlib (на основе HOG), а затем создать предсказатель лицевых ориентиров, используя предсказатель по вашему выбору, например shape_predictor_68_face_landmarks.dat, как показано ниже.
детектор = dlib.get_frontal_face_detector ()
predictor = dlib.shape_predictor («shape_predictor_68_face_landmarks.dat»)
Затем код будет перебирать каждое обнаруженное лицо и находить ключевые точки, которые определяют лицо.
Вот пример демонстрации выходных данных обнаружения лицевых ориентиров с 68 ключевыми точками.
Если вам нужна дополнительная информация об этом приложении с образцом кода, вы можете проверить https://www.pyimagesearch.com/2018/04/02/faster-facial-landmark-detector-with-dlib/
Вы также можете просто использовать 5 ориентиров на лице, что быстрее. Он возвращает только 2 балла для левого глаза, 2 балла для правого глаза и 1 балл для нижней части носа.
Классификация по трем лицам с использованием глубокого обучения
На самом деле это одна из самых впечатляющих вещей, на которые способно ML. Поскольку теперь мы можем распознавать лица, почему мы не можем понять эмоции этого лица, над этим работали многие исследователи, но мне больше всего нравится исследование, проведенное в исследовании Сверточные нейронные сети в реальном времени для классификации эмоций и пола. где код доступен по адресу https://github.com/oarriaga/face_classification
Вот пример демонстрации вывода этого кода для меня и моего сына :)
4-Обнаружение сонливости водителя с помощью dlib
1-Найдите лицо
2-Примените определение лицевых ориентиров для извлечения областей глаз, вы можете использовать shape_predictor_68_face_landmarks.dat
3-Вычислить соотношение сторон глаза
4-Если соотношение сторон глаза равно меньше определенного порога в течение определенного времени, это означает, что водитель заснул
Ссылка: Обнаружение моргания глаз в реальном времени с использованием ориентиров
В следующем видео показана демонстрация обнаружения сонливости.
Отслеживание 5 лиц
Самый простой способ выполнить отслеживание лиц - это обнаруживать лица с помощью детектора лиц с глубоким обучением, такого как res10_300x300_ssd_iter_140000.caffemodel, и назначать идентификаторы, а затем использовать отслеживание центроидов для сохранения I.D. прикреплен к отслеживаемому лицу.
В плавной демонстрации показано отслеживание лица в действии.