Улучшение характеристик распознавания лиц с помощью OpenCV / EmguCV - PullRequest
5 голосов
/ 15 июля 2011

В настоящее время я успешно использую EmguCV (оболочку OpenCV C #) для обнаружения лиц в режиме реального времени (веб-камера).Я получаю около 7 FPS.

Теперь я ищу для улучшения производительности (и сохранения циклов ЦП), и я ищу варианты, вот мои идеи:

  • Определите лицо, подберите элементы лица и попробуйте найти эти элементы в следующих кадрах (используя алгоритм SURF), так что это становится «обнаружение лица + отслеживание».Если не найдено, используйте функцию обнаружения лица снова.

  • Определите лицо, в следующем кадре попробуйте определить лицо в области интереса, где лицо было ранее (то есть ищите лицо вменьшая часть изображения).Если лицо не найдено, попробуйте поискать его по всему изображению еще раз.

  • Идея сбоку: если лицо не обнаружено в течение 2-3 кадров и нет движения на изображении, не надевайтене пытайтесь больше обнаруживать лица, пока не будет обнаружено движение.

У вас есть предложения для меня?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 16 июля 2011

Все представленные вами решения кажутся разумными и разумными. Однако, если вы используете Haar для обнаружения лица, вы можете попытаться создать каскад с меньшим количеством стадий. Хотя для определения лица рекомендуется 20 этапов, 10-15 может быть достаточно. Это заметно улучшит производительность. Информацию о создании собственных каскадов можно найти в Учебное пособие: OpenCV haartraining (Быстрое обнаружение объектов с помощью каскада повышенных классификаторов, основанных на характеристиках, подобных Хаару) .

Опять же, использование SURF - хорошая идея. Вы также можете попробовать P-N обучение: начальная загрузка двоичных классификаторов по структурным ограничениям . На YouTube есть интересные видео, представляющие этот метод, попробуйте найти их.

2 голосов
/ 15 июля 2011
  • Для алгоритма SURF вы могли бы попробовать, но я не уверен, что он обеспечивает соответствующие функции на лице, может быть вокруг глаз, или если вы близко и у вас есть неровности кожи, или, возможно, снова в волосах если разрешение достаточно. Более того, SURF на самом деле не очень быстрый, и я бы не стал делать более расчетливым, если вы хотите сэкономить процессорное время.

  • Хорошая идея - roi, вы бы выбрали ее, используя алгоритм camshift, он не будет экономить много ресурсов ЦП, но вы можете попробовать, так как camshift - очень легкий алгоритм. Опять же, я не уверен, что это будет действительно актуально, но вы получили хорошую идею в своем втором посте: минимизируйте зону, где искать ...

  • Мне кажется, что побочная идея весьма полезна: вы можете попытаться обнаружить движение (например, общее движение), если его не так много, то не пытайтесь снова обнаружить то, что вы уже обнаружили ... Вы можно попробовать сделать это с помощью шаблонов движения, как вы знаете, silouhette из средства сдвига или обнаружения лица ... Очень простой, легкий, но не надежный шаблон, соответствующий фрейму n-1 и фрейму n, может также дать вам коэффициент, который измеряет своего рода сходство между этими двумя фреймами. Можно сказать, что ниже определенного порога вы активируете обнаружение лица. ... почему бы и нет ? Реализация должна занять 5 минут, если оболочка C # имеет эквивалентную функцию matchTemplate () ...

Я вернусь сюда, если у меня будут лучшие (более глубокие) идеи, но сейчас я только что вернулся с работы, и мне трудно думать больше ...

Julien

0 голосов
/ 29 апреля 2012

Это не идеальный ответ, а просто предложение.

На моих уроках цифровой обработки изображений в моем последнем семестре B.Tech в CS я узнал о нарезке битовых мест и о том, как изображение, содержащее только информацию о плоскости MSB, дает почти 70% полезной информации об изображении. Таким образом, вы будете работать почти с оригинальным изображением, но с размером одной восьмой от исходного.

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

...