Обнаружение особенностей лица с использованием OpenCV Haar-каскадов
Я использую Java
с OpenCV
Библиотека для обнаружения Face
,Eyes
а также Mouth
с помощью Laptop Camera
,
Что я сделал до сих пор:
- Захват видеокадров с использованием
VideoCapture
объект. - детектировать
Face
с помощьюHaar-Cascades
, - Разделите
Face
область вTop
Регион иBottom
Область, край. - Ищи
Eyes
внутриTop
область, край. - Ищи
Mouth
внутриBottom
область, край.
Проблема, с которой я сталкиваюсь:
- Сначала видео работает нормально, и вдруг оно замедляется.
Основные вопросы:
Работают ли резолюции Высших Камер лучше для Каскада Хаара?
Нужно ли снимать видеокадры в определенном масштабе? например
(100px X100px)
?Делать
Haar-Cascades
работать лучше вGray-scale
Изображений?Разные условия освещения имеют значение?
Что делает метод
detectMultiScale(params)
точно делать?Если я хочу пойти на дальнейший анализ для
Eye Blinking
,Eye Closure Duration
,Mouth Yawning
,Head Nodding
а такжеHead Orientation
обнаружить усталость (сонливость) с помощьюSupport Vector Machine
какие-нибудь советы?
Ваша помощь ценится!
1 ответ
Следующая статья даст вам представление о том, что происходит под капотом, я очень рекомендую прочитать статью.
Работают ли резолюции Высших Камер лучше для Каскада Хаара?
Не обязательно, cascade.detectMultiScale
имеет параметры для настройки для различной ширины ввода, сценариев высоты, как minSize
а также maxSize
, Это необязательные параметры. Однако, вы можете настроить их, чтобы получить надежные прогнозы, если у вас есть контроль над размером входного изображения. Если вы установите minSize
к меньшему значению и игнорировать maxSize
тогда он будет работать и для изображений с меньшим и высоким разрешением, но производительность пострадает. Кроме того, если вы теперь представляете, как получается, что нет разницы между изображениями в высоком и низком разрешении, то вам следует учитывать, что cascade.detectMultiScale
Внутреннее масштабирование изображений до более низких разрешений для повышения производительности, поэтому определение maxSize
а также minSize
Важно избегать ненужных итераций.
Нужно ли снимать видеокадры в определенном масштабе? например (100px X100px)
Это в основном зависит от параметров, которые вы передаете cascade.detectMultiScale
, Лично я думаю, что 100 x 100
будет слишком мал для меньшего обнаружения лица в кадре, так как некоторые функции будут полностью потеряны при изменении размера рамки до меньших размеров, и cascade.detectMultiScale
сильно зависит от градиентов или особенностей входного изображения.
Но если входной кадр имеет только грань в качестве основной части, и нет никаких других меньших граней, висящих позади, то вы можете использовать 100 X 100
, Я проверил несколько образцов лица размером 100 x 100
и это сработало довольно хорошо. И если это не так, то 300 - 400
Ширина px должна работать хорошо. Однако вам нужно будет настроить параметры для достижения точности.
Работают ли каскады Хаара лучше в серых изображениях?
Они работают только в полутоновых изображениях.
В этой статье, прочитав первую часть, вы узнаете, что обнаружение лица состоит из обнаружения множества двоичных образов на изображении. Это в основном исходит от ViolaJones, статьи, которая является основой этого алгоритма.
Разные условия освещения имеют значение?
Может быть, в некоторых случаях в значительной степени Хаар-функции являются инвариантами освещения.
Если вы рассматриваете различные условия освещения при съемке изображений под зеленым или красным светом, то это может не повлиять на обнаружение. Особенности haar (так как они зависят от оттенков серого) не зависят от цвета RGB входного изображения. Обнаружение в основном зависит от градиентов / особенностей входного изображения. Таким образом, если на входном изображении достаточно различий в градиентах, например, брови имеют меньшую интенсивность, чем лоб, и т. Д., То все будет работать нормально.
Но рассмотрим случай, когда входное изображение имеет заднюю подсветку или очень слабое окружающее освещение. В этом случае может оказаться возможным, что некоторые заметные признаки не будут найдены, что может привести к тому, что лицо не будет обнаружено.
Что именно делает метод detectMultiScale (params)?
Я думаю, если вы прочитали article
К этому времени вы должны хорошо это знать.
Если я хочу пойти на дальнейший анализ глазного моргания, продолжительности закрытия глаз, зевания рта, киваний головы и ориентации головы, чтобы обнаружить усталость (сонливость) с помощью машины опорных векторов, какие-либо советы?
Нет, я не буду предлагать вам выполнять этот тип обнаружения жестов с помощью SVM, так как было бы крайне медленно запускать 10 различных каскадов для определения текущего состояния лица, однако я бы порекомендовал вам использовать некоторую среду обнаружения лицевых ориентиров, такую как Dlib, Вы можете искать и другие фреймворки, потому что размер модели dlib составляет почти 100 МБ, и он может не соответствовать вашим потребностям, если вы хотите перенести его на мобильное устройство. Таким образом, ключом является ** Определение лица лица **, как только вы пометите анфас, вы можете сделать выводы, например, если рот открыт или глаза мигают, и он работает в режиме реального времени, поэтому обработка вашего видео выиграла. много страдаю.