Как я могу обнаружить зевоту с помощью Open CV

Я разрабатываю приложение для iOS, которое необходимо обнаружить, когда пользователь зевает.

То, что я сделал, это включить Open CV и найти лица, используя каскад хара, а затем найти рот внутри лица (тоже используя haarcascade).

Проблема, с которой я столкнулась, заключается в том, что я считал, что было бы легко обнаружить зевоту, как будто что-то вроде (face.y - mouth.y) что-то = зевать.

Но проблема в том, что прямые для лица и рта являются "неустойчивыми", я имею в виду каждый раз, когда цикл пробегает значения X и Y для прямых лиц и рта (obviusly) не то же самое.

Есть ли какой-либо "открытый рот" каскада, который я могу использовать, или как я могу узнать, когда пользователь открывает рот?

Ответ 1

Как правило, поддержка Vector Machine (SVM) используется для распознавания лиц, таких как гнев, улыбка, сюрприз и т.д., где происходит активное развитие. Googling дает вам много работ по этой теме (даже один из моих сокурсников сделал это в качестве своего последнего проекта). Для этого сначала вам нужно обучить SVM и сделать это, вам нужны образцы изображений зевок и нормальных лиц.

Зияние почти похоже на удивление, когда рот открыт в обоих случаях. Я рекомендую вам посмотреть страницу 3 ниже документа: Распознавание лица в реальном времени в видео используя поддерживающие векторные машины (если вы не можете получить доступ к ссылке, google по имени бумаги)

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

Посмотрите ниже две статьи:

Выделение Feature Points из Faces

Полностью автоматическая обнаружение точки объекта с использованием расширенных классификаторов на основе Gabor

Посмотрите изображение ниже, что я имею в виду по пунктам функции на лице:

enter image description here

В вашем случае, я думаю, что вы реализуете его в iPhone в режиме реального времени. Так может быть, вы можете избежать признаков в глазах (хотя это не очень хорошая идея, поскольку, когда вы зеваете, глаза становятся маленькими по размеру). Но по сравнению с ним, особенности точек на губах показывает больше вариаций и преобладает. Таким образом, внедрение только на губе может сэкономить время. (Ну, все зависит от вас).

Сегментация губ. Он уже обсуждается в SOF и проверяет этот вопрос: Сегментация Lip OpenCV

И, наконец, я уверен, что вы можете найти много подробностей о googling, потому что это активная область разработки, и там много бумаг.

Другой вариант:

Другой вариант в этой области, который я слышал несколько раз, - Active Appearance Model. Но я ничего не знаю об этом. Google это самостоятельно.

Ответ 2

OpenCV также обладает функциями распознавания/распознавания лиц (см. примеры, которые поставляются с SDK OpenCV). Я думаю, что это будет лучшее место для поиска, поскольку каскад хара не действительно анализирует выражения лица так, как вам это нужно. Попробуйте запустить примеры и убедитесь сами - вы получите данные в реальном времени об обнаруженных глазах/роте и так далее.

Удачи.