Rombl4 0 Жалоба Опубликовано November 6, 2012 Поиск лица по фотографии Доброго времени суток перерыл весь форум и гугл но ничего нормального не нашел. Задача такова, имеются около 100.000 фотографий (фото 1 (все они черно белые)) необходима программа которая будет производить поиск по задаваемой фотографии, т.е. грубо говоря программе указываете фотографию с лицом человека (указываемая фотография будет из паспорта но черно-белая с нормальным разрешением) далее указываем программе папку где искать и программа производит поиск по лицу. Программы на подобии Duplicate Photo не подходят. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Rombl4 0 Жалоба Опубликовано November 6, 2012 из того что нашел http://www.portret.tomsk.ru/?page=informations&subject=gabitoskopia ftp://portret.tomsk.ru/distrib/ Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано November 7, 2012 имеются около 100.000 фотографий вы что в паспортном столе работаете?) я вот думаю у криминалистов, то небось такие программы есть.вроде еще есть что то типо видеонаблидение+ база по лицам, но это опять же довольно таки специализированный софт. можно заюзать Picasa, но это неполноценно и неудобно. самое простое, то что можно сделать на коленке это детектор лиц через Хаара + распознавание через PCA. только тут как я вижу проблема в том, что придётся проецировать все 100к лиц ,а я не уверен что есть готовая библиотека которая умеет с такими объемами работать и сколько это времени займёт тоже неясно. (если не прав то поправьте) вроде еще обсуждалось, что через AAM можно тоже сравнивать, но там я так понимаю тож есть некий базис вариаций расстояние от которого смотрится и получается, что тоже надо 100к фотографий туда проецировать. интересно было бы узнать как всё это вообще делать на таких объемах. ну т.е. если даже у нас есть некая метрика(которая позволяет сравнить 2 лица, не сооружая некий базис) ,то получается, чтобы вывести например первые 10 наиболее похожие нам надо образец сравнить со всеми 100к и взять 10 лучших, т.е. мы скорее всего опять приходим к тому, что необходима предобработка начальной базы, что то типа построения индекса(например построение дерева для более быстрого поиска). и опять же это если у нас 1 человек-1 фото, а что если 1 человек = набор фото? хотя тут опять же можно все со всми сравнить и просто просто проссумировать веса. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано November 7, 2012 вот кстати лица выделяют из видео http://www.vocord.ru/241/ но я кстати какую то другую программу видел. п.с. габитоскопический на английский как то переводится? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано November 7, 2012 кстати еще вопрос если производить разметку вручную, то возможно ли определить какую либо функцию деформации по этим точкам? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано November 7, 2012 а хотя мы наверно опять возвращаемся к морфометрии http://www.mathworks.com/help/stats/procrustes.html но это полезно если только у нас есть точки. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано November 7, 2012 кстати еще вопрос если производить разметку вручную, то возможно ли определить какую либо функцию деформации по этим точкам? Может RBF подойдет? http://www.compvision.ru/forum/index.php?showtopic=1032 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано November 7, 2012 а причём тут интерполятор? по большому счёту если знать пары точек, то можно посчитать сумму евклидовых расстояний между парами точек с весами(т.е. имеем метрику), только вот эти веса вручную подбирать или ставить равными мне кажется не вариант, скорее всего надо взять размеченную выборку-"популяцию" и как то провести её анализ на предмет того какие точки испытывают максимальные вариации.(т.е. какие члены в векторе признаков дают максимальное разделение "особей") опять же разметка по точкам очень зависит от viewpoint'a и выражения лица.(хотя не думаю что это проблема) возможно можно что то с TPS сплайнами сделать, взять за основу какую либо модель, а для всех остальных считать отклонеение от неё, по идее будем иметь набор параметров которые задают преобразование. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано November 7, 2012 В таком случае получается ASM или AAM. Просто брать в качестве значений признаков проекции масок на собственный базис. Интерполятор нужен, т.к. он позволит по некоторому количеству "точек" построить непрерывную гиперповерхность, по которой можно будет потом более точно вычислить принадлежностьк тому или другому классу, определить выражение лица, ну и т.д. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано November 7, 2012 Просто брать в качестве значений признаков проекции масок на собственный базис. не понял. мы должны добавлять изображения из 100к в наш "базис" до тех пор пока средняя модель не будет менятся? или должны построить из всех 100к сэмплов нашу среднюю модель? Интерполятор нужен, т.к. он позволит по некоторому количеству "точек" построить непрерывную гиперповерхность, по которой можно будет потом более точно вычислить принадлежностьк тому или другому классу, определить выражение лица, ну и т.д. это вообще не понял. тут вот http://graphics.stanford.edu/courses/cs164-09-spring/Handouts/paper_shape_spaces_imm403.pdf пишут про метрику Often used shape metrics include the Hausdorff distance [14], the strain energy [18] and the Procrustes distance [8, 7, 1, 5]. Where the two former compare shapes with unequal amount of points, the latter requires corresponding point sets. еще кое-что http://www.jdl.ac.cn/user/rpwang/research.htm http://www.slideshare.net/pateheo/manifold-learning http://www.slideshare.net/zukun/nonlinear-manifolds-in-computer-vision код для GPA http://www.maths.nottingham.ac.uk/personal/pmzspp/shape.php разные рутины для матлаба http://www.cad.zju.edu.cn/home/dengcai/Data/data.html что то типа CBIR только для лиц http://research.microsoft.com/pubs/155719/face-pami.pdf Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано November 7, 2012 Мы усредняем наши 100к масок, получаем среднюю модель. Она нужна для вычисления собственных векторов. Дальше вычисляем собственные векторы матрицы ковариации этого множества. Проецируем эти 100к масок на базис собственных векторов. KD-дерево для ускорения поиска. При поступлении нового лица, проецируем его на базис собственных векторов. Измеряем расстояние от каждой из 100к масок до новой, только что поступившей для опознания. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kilop 7 Жалоба Опубликовано November 7, 2012 Мы усредняем наши 100к масок, получаем среднюю модель. Она нужна для вычисления собственных векторов. Дальше вычисляем собственные векторы этого множества. Проецируем эти 100к масок на базис собственных векторов. KD-дерево для ускорения поиска. При поступлении нового лица, проецируем его на базис собственных векторов. Измеряем расстояние от каждой из 100к масок до новой, только что поступившей для опознания. извините, Smorodov? а что значит усредняем? по какой характеристике? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано November 7, 2012 Например если маска состоит из 22 характерных точек, то мы ищем 22 средних по выборке точки. Маски перед этим надо центрировать друг относительно друга и привести к общему масштабу. Получаем среднюю модель. (Если работаем с текстурами, то для каждой точки изображения лица находим среднее значение по выборке. Суммируем все изображения и делим на их количество. (Не забыв перед этим выровнять гистограмму яркости, координаты и масштаб, например совместитв глаза на разных изображениях.)) Если проще, то преобразуем все числовые значения относящиеся к одному лицу в один длинный вектор (это могут быть координаты характерных точек, яркости пикселей и т.д.). Для каждого лица будет свой такой вектор. Дальше с ними и работаем как с векторами. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано November 8, 2012 Мы усредняем наши 100к масок, получаем среднюю модель. Она нужна для вычисления собственных векторов. Дальше вычисляем собственные векторы этого множества. Проецируем эти 100к масок на базис собственных векторов. KD-дерево для ускорения поиска. При поступлении нового лица, проецируем его на базис собственных векторов. Измеряем расстояние от каждой из 100к масок до новой, только что поступившей для опознания. Вы это какой алгоритм описали? получается как то жирно(в плане того, что при проекции всё в память не загрузишь), тем более я так понимаю, что скорость проекции на базис собсвенных векторов будет зависеть от размера нашей базы, а что будет если мы захотим в нашу базу еще добавить семплов надо будеть опять всё перепроецировать и перестраивать дерево? причем непонятно есть ли такие варианты, что база перенасытилась, т.е. добавление новых семплов не даёт ничего нового, а так же вариант, что вариация наших шейпов слишком большая и это как-то будет мешать? я не очень понимаю "физический\качественный" смысл собсвенных векторов, но получается что то похожее на PCA, если взять просто координаты точек и использовать PCA будет хуже? еще вопрос, в ААМ у нас точки вроде как соеденены? (это имеет отношение к графам?в каком-то документе видел что то типа star(из одной точки лучи) архитектуры графа, т.е. без циклов) кстати как мы приводим к общему масштабу? если просто взять баунд ректы от точек и отскейлить, мне кажется будет не то.(т.е. глаза на глаза не наложатся например или это не важно?) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано November 8, 2012 кстати говоря получается что у нас нет эталона, значит надо взять среднюю модель по популяции и смотреть отклонение от неё, но возможно так нельзя делать если в популяции сильная вариация и стоит кластеризовать сэмплы на группы и смотреть отклонение от средних моделей кластеров? т.е. какая то более сложная модель с точки зрения матстата. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано November 8, 2012 Чаще всего смесь гауссианов для таких целей используют. Не знаю только, насколько это применимо к распознаванию лиц. Ну или более сложные классификаторы. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано November 8, 2012 вообще если подумать, то у нас есть тупо вектор фич(полученый каким либо способом) для каждого из 100к сэмплов и мы просто выполняем k-nearest neighbor search по какому либо из алгоритмов. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано November 8, 2012 я не очень понимаю "физический\качественный" смысл собсвенных векторов, но получается что то похожее на PCA, если взять просто координаты точек и использовать PCA будет хуже? Я, собственно, и описал PCA. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано November 9, 2012 кстати про связь SVD и PCA http://math.stackexchange.com/questions/3869/what-is-the-intuitive-relationship-between-svd-and-pca и более подробное описанеи PCA http://www.snl.salk.edu/~shlens/pca.pdf Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано November 12, 2012 еще раз про модель типа как в ASM. допустим отмечаем на 2-х изображениях точки руками, потом хотим сравнить их. можем посчитать центры тяжести, посчитать оси элипса вписанного\описано\ по мнк и совместить, можем посчитать описанный прямоугольник и отскейлить по нему. но такое ощущение, что всё это не то, а надо какую то нелинейную функцию морфинга из одного экземпляра модели в другой. я вообще так понимаю, что задача близка к задаче face transfer. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах