Искалка лиц на фото

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Искалка лиц на фото

Сообщение Proxy » 17.03.2012 (Сб) 19:31

Вот такая маленькая искалка человеческих лиц на фото. Пока работает совсем не очень, но кое-что улучшить всё же ещё возможно в будущем. Написал за вечер, так что прошу не судить строго (кое-где совсем уж сыро написано пока, это даже как бы не альфа ещё).
Пока справа присутствует ползунок, устанавливающий порог подавления шума. Пока не придумал способ как-то это автоматизировать (да и вообще не думал ещё об этом, если честно). Так вот: фото распознаётся успешно при оооочень маленьком интервале порога подавления шума (чуть сильнее и уже становится недостаточно деталей, чуть слабее и шум уже мешает определить границы объектов).
Ещё порядка 20 констант установлены в почти произвольные значения (подбирал исключительно для фото, которое на борту, так что для некоторых лиц они скорее-всего не сгодятся (в основном отвечают за пропорции и взаимные расположения элементов лица). А идеальном раскладе было бы вообще шикарно сделать самообучение, чтобы эти параметры сами подбирались оптимальным образом, но до этого скорее-всего дело не дойдёт. Пока не мешало бы хотя бы определить адекватные интервалы значений для них).
Что за что отвечает: серые прямоугольники получаются после определения границ фигур, выделенных по определённому алгоритму и после исключения фигур, которые заведомо не похожи на части человеческого лица. Далее определяется взаимное расположение этих прямоугольников и если оно похоже на расположение частей человеческого лица, то лицо обводится жёлтым кругом (если повезёт). Одновременно на одной фотографии может присутствовать несколько лиц. Лица не должны примыкать к границам фотографии (а фото пока что обрезается под размер picturebox`а, стало быть не должны примыкать к границам онного). Лица так же не должны перекрываться каким-либо предметом и должны быть расположены в естественном положении (довольно слабый наклон головы пока приведёт к невозможности поиска лица на фото).
Собственно идея чрезвычайно проста, если кого-то заинтересует, то могу описать в двух словах алгоритм. Может кто придаст толк (я же как обычно почти утратил интерес к сабжевому проекту и уже хочу сваять кое-что другое). И да, ещё: большая часть кода была взята из PhotoPF, который я не так давно постил в наших проектах емнип.
И последнее: приложу фото с Чаком, которое тоже удалось почти корректно распознать (порог подавления шума 21, но у него немного более вытянутое лицо и за губы идёт нижнее ребро носа).
Вложения
FR.7z
(46.82 Кб) Скачиваний: 104
чаке.jpg
порог 21
чаке.jpg (74.43 Кб) Просмотров: 1889
Follow the white rabbit.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Искалка лиц на фото

Сообщение Proxy » 17.03.2012 (Сб) 20:12

Чуть-чуть уменьшил критерий разности вертикального размещения глаз. Теперь вроде больше лиц распознаёт, однако теперь чаще бывают промахи.
Выделил 3 наиболее важные зависимости, вызывающие больше всего вопросов (больше всего влияют на результат):
расстояние от центра глаз до центра рта (не знаю с какой величиной наиболее верно сравнивать),
отношение площадей глаз,
отношение средней площади глаз к площади рта.
Буду искать.

ЗЫ. порог 27. При иных теперь чаще промахи, чем полное отсутствие лиц.
Вложения
FR.7z
(40.53 Кб) Скачиваний: 87
34079-213906-c7a4a3137d6cc8250856c06fc6f4a892.gif
Порог 33
(498.77 Кб) Скачиваний: 102
Follow the white rabbit.

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Искалка лиц на фото

Сообщение Sam777e » 18.03.2012 (Вс) 4:57

Очень полезная во многих случаях и легко программируемая вещь: Генетические Алгоритмы [ правильнее было бы назвать - Эволюционные ]. Фактически они занимаются именно подбором параметров.
Здоровья и удачи

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Искалка лиц на фото

Сообщение Хакер » 18.03.2012 (Вс) 5:24

Вообще ничего не ищет. На 90 % картинок.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Re: Искалка лиц на фото

Сообщение 1Steps » 18.03.2012 (Вс) 6:26

Хакер писал(а):Вообще ничего не ищет. На 90 % картинок.
+1
Картинка большого размера не центрируется и не зумируется. Маленьких у меня нет)
Удалена за ненадобностью.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Искалка лиц на фото

Сообщение Хакер » 18.03.2012 (Вс) 6:57

1Steps писал(а):Маленьких у меня нет)

А как же аватара? :D
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Искалка лиц на фото

Сообщение Proxy » 18.03.2012 (Вс) 11:16

Чуть-чуть более удачная версия
Вложения
FR.7z
(47.76 Кб) Скачиваний: 76
Follow the white rabbit.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Искалка лиц на фото

Сообщение Proxy » 18.03.2012 (Вс) 14:10

Неудачный эксперимент. Изначально неверный подход:
На первом этапе:
Невозможно определить глаз, когда он распадается на 2 и более контура. Похоже лучше делать что-то типа карты с выделением областей наибольшей концентрации вытянутых в ширину прямоугольников. И искать что-то типа центров. Но тоже не факт, что поможет.
Части лица довольно плохо выделяются контуром по edge detection + хитрой заливкой (оценка по тону (Hue) из HSV), слишком сильно влияет шум, к тому же границы плохо контрастируют (на лице всё в тёплых тонах, границы обнаруживаются хорошо везде, где не лицо). Пожоже нужно работать с поиском границы по балансу красного или около того (хотя изначально с красным я пробовал и тоже ничего не вышло).
Нужно определять средний цвет каждой области, которая сколько-нибудь пропорционально схожа с ртом или глазом. Я думал, что достаточно будет просто определить контур области и её взаимное расположение с другими областями, но так посторонние предметы на фото слишком часто мешают.
На втором этапе:
Нужно учитывать куда больше фактов, чем расположение контуров рта и глаз. По крайней мере чаще всего на фото ещё выделяются вертикальные области по обе стороны от лица, но это никак не используется. К тому же стоит ориентироваться на тона, как я уже выше говорил. В общем похоже с примитивным подходом здесь никак. Интересно было бы разжиться отработанным алгоритмом из любого дешёвого фотика (они умеют фокусироваться на лицах, притом всё это дело работает с контроллером на фотоаппарате довольно шустро и почти безошибочно).
Follow the white rabbit.

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Re: Искалка лиц на фото

Сообщение 1Steps » 18.03.2012 (Вс) 14:25

Хакер писал(а):
1Steps писал(а):Маленьких у меня нет)

А как же аватара? :D
Ты предлагаешь её загрузить?
Она была на старом компе.
А вообще, если кто-то, что-то предлагает посмотреть, протестить, то этот кто-то, должен полностью подготовить свое что-то.
Во как сказал? :D
Удалена за ненадобностью.


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 47

    TopList