Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Краткое описание
Распознавание реального лица человека от ложного в камере все еще остается одним из сложных проблем в системах контроля и доступа в помещения. Предлагается алгоритм для обнаружения моргания глаз в реальном времени в видеопоследовательности от стандартной камеры, что дает нам факт что человек в камере является реальным. Последние детекторы наземных ориентиров, обученные на наборах данных в полевых условиях, демонстрируют превосходную устойчивость к ориентации головы относительно камеры, изменяющейся освещенности и выражений лица. Мы показываем, что ориентиры обнаруживаются достаточно точно, чтобы надежно оценить уровень открытия глаза. Таким образом, предложенный алгоритм оценивает положения ориентиров, извлекает одну скалярную величину — коэффициент глазного дна (EAR) — характеризующую открытие глаза в каждом кадре. Наконец, классификатор SVM обнаруживает мигание глаз как образец значений EAR в коротком временном окне. Простой алгоритм превосходит современные результаты по двум стандартным наборам данных.
Библиотека Dlib
В этой статье я использую индексы лицевых ориентиров для областей лица библиотеки dlib. Детектор лицевого ориентира, реализованный внутри библиотеки dlib, выдает 68 (x, y) -координаты, которые отображаются на конкретные структуры лица. Эти 68 точечных отображений были получены путем обучения предиктора формы на помеченном наборе данных iBUG 300-W.
Ниже мы можем визуализировать то, на что каждая из этих 68 координат отображается:
Рисунок 1 — Визуализация каждой из 68 лицевых координатных точек из набора данных iBUG 300-W
Изучив изображение, мы увидим, что к лицевым областям можно получить доступ посредством простой индексации Python (при условии нулевой индексации с помощью Python, поскольку изображение выше одно индексировано):
- Рот может быть доступен через точки [48, 68].
- Правая бровь через точки [17, 22].
- Левая бровь через точки [22, 27].
- Правый глаз через точки [36, 42].
- Левый глаз через точки [42, 48].
- Нос через точки [27, 35].
- И челюсть через точки [0, 17].
Понимание «пропорции глаза» (EAR). Мы можем применить обнаружение лицевых ориентиров для локализации важных областей лица, включая глаза, брови, нос, уши и рот:
Рисунок 2 — Обнаружение лицевых ориентиров в картинке в режиме реального времени
Это также подразумевает, что мы можем извлечь определенные структуры лица, зная индексы определенных частей лица:
Рисунок 3- Применение лицевых ориентиров для локализации различных областей лица, именно правый глаз и рот
Обнаружение моргания глаз
С точки зрения обнаружения моргания нас интересуют только два набора структур лица — глаза. Каждый глаз представлен 6 (x, y) -координатами, начинающимися в левом углу глаза (как если бы вы смотрели на человека), а затем работающими по часовой стрелке вокруг остальной части области:
Рисунок 4 — 6 лицевых ориентиров, связанных с глазом
Основываясь на этом изображении, мы должны забрать на ключевой момент: Существует связь между шириной и высотой этих координат. Основываясь на работе Соукуповой и Чеха в их статье 2016 года «Обнаружение моргания глаза в реальном времени с использованием ориентиров лица», мы можем затем вывести уравнение, которое отражает это соотношение, называемое соотношением сторон глаза (EAR):
Рисунок 5 — уравнение пропорции глаза
где p1, …, p6 — 2D ориентиры на лице. Числитель этого уравнения вычисляет расстояние между ориентирами вертикального глаза, в то время как знаменатель вычисляет расстояние между ориентирами горизонтального глаза, соответствующим образом взвешивая знаменатель, поскольку существует только один набор горизонтальных точек, но два набора вертикальных точек.
Что ж, как мы знаем, соотношение сторон глаза приблизительно постоянно, когда глаз открыт, но быстро падает до нуля, когда происходит мигание. Используя это простое
уравнение, мы можем избежать методов обработки изображений и просто полагаться на соотношение расстояний до точки зрения глаз, чтобы определить, мигает ли человек. Чтобы сделать это более понятным, рассмотрим следующую фигуру:
Рисунок 6 — Визуализация глазных ориентиров
В верхнем левом углу у нас полностью открыт глаз — соотношение сторон здесь будет большим ® и относительно постоянным во времени. Однако, как только человек моргает (вверху справа), соотношение сторон глаза резко уменьшается, приближаясь к нулю. На верхнем рисунке показан график соотношения сторон глаза для видеоклипа. Как мы видим, соотношение сторон глаза постоянное, затем быстро падает близко к нулю, а затем снова увеличивается, что указывает на одно мигание.
Рисунок 7 — Обнаружение моргание глаз
Исключения
Тем не менее, из-за шума в видеопотоке, низкого уровня обнаружения лицевых ориентиров или быстрых изменений угла обзора простой порог соотношения сторон глаза может привести к ложно-положительному обнаружению, сообщающему, что моргание имело место, когда в действительности человек не моргнул. Как мы прочитали в одной медицинской статье человек моргает в среднем 20 раз в минуту, это говорит нам, что он моргает раз в 3 секунды.
Основываясь на этом мы, чтобы сделать наш мигающий детектор более устойчивым к этим проблемам сделали промежуток времени прежде чем считывать мигание должно пройти 3 секунды, а также при обнаружений моргание должно сделаться не менее 3 кадров. Результаты наших исследований дали очень хороший результат. Детектор точно срабатывал. Из двадцати тестов восемнадцать дали положительный результат.
Проблемы такого подхода
Есть и не решенные проблемы этого подхода. Если показать на камеру видео через технические средства где показан лицо человека который моргает система может привести к ложно-положительному обнаружению. Решение этой проблемы можно осуществить с помощью стреопары изображения где с помощью двух камер мы можем получить карту глубины и вычислить расстояние до объекта.
Решение проблем
Здесь показано работа стреопар камер. После того как изображения ректифицированы, выполняют поиск соответствующих пар точек из двух изображении. Самый простой способ проиллюстрирован на картинке 8 и состоит в следующем. Для каждого пикселя левой картинки с координатами (x0, y0) выполняется поиск пикселя на правой картинке. При этом предполагается, что пиксель на правой картинке должен иметь координаты (x0 — d, y0), где d — величина называемая несоответствие/смещение (disparity). Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, корреляция окрестностей пикселей.
Рисунок 8 — Вычисления карты глубины