Система отслеживания положения лица человека по видеопотоку на ПЛИС

cube

Отслеживание положения лица в режиме реального времени

(Realtime face tracking)

Введение

Целью этого проекта является отслеживание движения человеческого лица и отображение проекции куба на VGA монитор, которая изменяется в соответствии с движением лица пользователя. Проект построен так, как если бы пользователь действительно смотрел на 3D-куб. Если пользователь переместит голову вправо, проекция должна отображаться, как если бы пользователь фактически смотрел на куб справа и если пользователь приблизиться к камере, то куб должен увеличиться. Куб был выбран для простоты и как доказательство концепции, но этот проект потенциально может быть использован и для более сложных объектов или сред виртуальной реальности.

В данном проекте, видеокамера подключается к ПЛИС (FPGA) и определяет местоположение лица пользователя в каждом кадре, исследуя содержание цвета каждого пикселя и определяя, какие из них могут представлять человеческую кожу. Смещение лица от центра поля зрения камеры, а также его размер, затем используется для построения соответствующей проекции.

Проектирование системы отслеживания движения человеческого лица

    Проект состоит из двух основных частей: распознавания лиц и рисования проекции 3D куба на 2D пространстве. Следующая диаграмма показывает общую схему проекта:

Распознавание лица

Есть много различных алгоритмов для отслеживания человеческих лиц. Одним из популярных методов является представление образов как линейной комбинации опорных граней. Другие методы используют цвет изображения, чтобы определить, какие пиксели могут представлять человеческую кожу. В данном проекте используется алгоритм определения цвета.

Для каждого кадра определяется, какие пиксели представляют человеческую кожу на основе красного и зеленого цветовых компонентов. Были проведены различные операции усреднения для удаления шумовых эффектов и так же были сняты такие детали как очки и усы, которые не являются тоном кожи, но могут повлиять на обнаружение лица. Расположение лица определяется и передается в софт-процессорное ядро Nios II для выполнения расчетов проекции в ПЛИС.

Проектирование и дисплей

Расчеты проектирования проводятся на Nios II и за счет этого они могут быть выполнены с плавающей точкой. Nios II распознает расположение лица пользователя от центра экрана VGA в качестве входных данных и возвращает координаты 8 углов проецируемого куба. Данный куб отображается при помощи использования алгоритма Басерхама (Bresenham linedrawing algorithm), который аппаратно соединяет эти 8 точек.

Аппаратное / программное обеспечение

 Аппаратное обеспечение

Захват видео

Для захвата видео нами используется 1,3 мегапиксельная цифровая камера от компании Terasic. Данная камера подключается к порту расширения GPIO_1 на плате DE2. Видео кадры захваченные камерой хранятся в буфере SDRAM.

Распознавание лиц

Распознавание лица выполняется на ПЛИС. Красные и зеленые компоненты пикселя определяют, какой пиксель представляет человеческую кожу. Значения L1 и L2 заданы в следующем виде:

 

оператор L (х) определяется так:

 

RGBmax равен максимальному значению, которое один цветовой компонент может принять. В данной реализации используется 10 бит для красного, зеленого и синего каналов, с чего следует что RGBmax = 1023.

В проекте, рассчитаны значения L1 и L2 для каждого пикселя видеокадра с помощью таблицы поиска, генерируемого в MATLAB. Если значение L1 было 128 или значение L2 было 100, то пиксель помечается как кожа и будет белым на нашей карте кожи. Значения для L1 и L2 определяются вручную при калибровке.

VGA монитор

При помощи Nios II проведены расчеты 8 углов проецируемого куба и эти углы были связаны при помощи 12 отрезков используя алгоритм Басерхама (Bresenham linedrawing algorithm). Эти 12 линий сохранены в SRAM. Используя SW [0] на плате DE2, можно переключать VGA-монитор между режимом отображения проецируемого куба и отображения пикселей на карте кожи с центром, который отображается красной точкой. На пиксельной карте так же показана зеленая точка, которая представляет расположение лица.

Программное обеспечение

Используется алгоритм проекции, который проецирует точку в 3D пространстве на 2D поверхности в зависимости от местоположения зрителя. В этом алгоритме используются следующие переменные. Каждая переменная является вектором 3×1:

ax,y,z –в точка в 3D пространстве, которая проецируется;    

cx,y,z – расположение камеры;    

θx,y,z – вращение камеры;

еx,y,z – расположение зрителя по отношению к поверхности дисплея. Находится вектор с – а и поворачивается на величину θ для нахождения dx,y,z.

Проекция bх, у рассчитывается по следующей формуле:

.

Расположение камеры определяется как начальное. Таким образом, в начале выражение с – а просто равно а. Определены х и у составляющие е как смещения от лица пользователя к центру экрана VGA в направлениях х и у. Определено ez в зависимости от размера площади области кожи. Значение ez позволяет добиться эффекта глубины нашим проекциям.

Выводы

В результате выполнения проекта была получена возможность слежения за перемещением человеческого лица и отображение соответствующей проекции куба. Для дальнейшего расширения этого проекта возможно добавление более сложных объектов или даже отображение целой среды виртуальной реальности. Одним из потенциальных улучшений проекта будет использование другого алгоритма отслеживания лица, который идентифицирует только лица, а не руки или какую-либо другую часть тела или предмет имеющие цвет в тон кожи.

Демонстрация проекта

 

Исходные материалы проекта. 

Посмотреть работу проекта и найти больше информации можно на сайте источника.

 

Адаптация материалов: Сазонов Е.Э., ДК-22, НТУУ «КПИ», каф. КЭВА.