Перейти к содержимому
Compvision.ru
Kell

Аутентификация по лицу

Recommended Posts

Столкнулся с такой проблемой. Существует некая база фотографий, они все переведены в градацию серого и подогнаны под один размер. На данных фотографиях сохранены только лица, найденные классификаторами Хаара. Когда пользователь заходит в программу, включается камера, создается фото, обрезается, переводится в градацию серого и конвертируется под размеры фотографий из базы. Дальше нужно сравнить изображение с базовыми. И вот возникает вопрос: какой метод использовать? HMM или главных компонент? Что из них дает более точный результат? И как должно происходить обучение? Если у меня нет базы с примерами. А моя текущая база может меняться по составу. Плюс у каждого пользователя есть только одно фото. Пишу на с++ в visual studio 2010.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если есть только одно фото на пользователя, то и никакого обучения нет.

Находите расстояние между многомерными точками (одно лицо - одна точка), к какой ближе, тот человек и есть.

Можно в качестве точек брать все изображение, а можно только его биометрические точки (их вроде 21 обычно используется для таких целей).

Как их определять - другой вопрос, см. например тему http://www.compvision.ru/forum/index.php?showtopic=1023 .

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не совсем вас понял. Если мы берем все изображение за точку, то это значит, что нам нужно просто вычесть одно избражение из другого или как?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Получится несколько точек с известными названиями (имена людей), и одна, которую вы хотите классифицировать.

Чтобы определить расстояние (Евклидову норму, или длину (несколькотысячемерного) вектора между этими точками), нужно найти скалярное произведение этих векторов (координат) и взять из него корень.

http://en.wikipedia.org/wiki/Dot_product

Так вот, находите все расстояния от классифицируемого объекта до известных, и определяете класс объекта по минимальному расстоянию.

Хотя, тут будет работать и анализ главных компонент, при помощи него можно сильно уменьшить размерность задачи.

Найдете собственные векторы, их будет на 1 меньше чем фотографий. И дальше расстояние определяется как я описал выше, через скалярное произведение, (часто используют расстояние Махаланобиса, но в данном случае, думаю большой разницы не будет).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

До метода главных компонент еще не добрался. Но сейчас никак понять не могу, почему собственных векторов будет на один меньше, чем фотографий? Для исходной фотографии не нужно его делать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот тут статья хорошая, многое проясняет:

http://www.cognotics.com/opencv/servo_2007_series/part_4/index.html

Размерность векторов базиса будет прежней (ширина*высота).

Но размерность спроецированных на этот базис фотографий будет намного меньшей (количество векторов базиса).

Вам все равно придется проецировать на этот базис поступающее изображение.

Но процесс сравнения уже будет значительно менее затратным.

По поводу производительности, не обязательно брать фотографии в полном разрешении камеры.

Их можно (и лучше) уменьшить до такого размера, когда Вы сами можете различить людей которые на них изображены.

Должно работать в реальном времени, тормозит у Вас, скорее всего, детектор Хаара.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В общем, теперь я запутался в трех соснах, наверное. Сравнил изображения. Построил вектора. И решил вывести изображение на экран. Получается довольно своеобразная картинка даже для одинаковых изображений. Но так и не понял, как же мне понять по этому вектору, что лица схожи?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть две точки: P1(x1,x2,x3,...xN) и P2(x1,x2,x3,...,xN) и новая точка P0(x1,x2,x3,...,xN).

x1,x2,x3,...xN - это названия осей базиса, типа (x,y) на плоскости.

Как узнать к какой точке P1 или P2 ближе P0?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброго времени суток всем!

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Начинайте отсюда:

http://www.compvision.ru/forum/index.php?showtopic=81

http://www.compvision.ru/forum/index.php?showtopic=74

Тему объединяю с "аутентификация по лицу".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо!Сейчас и прочту...Но вот вопрос(просто интерес):я понимаю что придется использовать Си в любом его исполнении...А можно ли всего этого добиться путем делфи?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно, но это сложнее чем выучить С :)

ЗЫ: Еще можете использовать питон (может быть это будет проще).

http://www.compvision.ru/forum/index.php?showtopic=996

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если не знаете С, то на питоне (версию питона лучше брать 2.7) (питон можно изучить за несколько дней), если знаете то на С.

Я пишу на С (сейчас использую VS2010 + Qt).

ЗЫ: По использованию openCV с питоном документации меньше, чем для C.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почитал ваши ссылки на питон+опенсв..на английском будет тяжеловато разобраться...никакой информации по Питон+опенсв нету?не подскажите?ну а если придется учить С так в принципе тоже не страшно.диплом в мае сдавать :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тогда начинайте работать с VS2010, сначала без GUI.

Когда освоитесь, приделаете GUI, есть темы на форуме про вывод на форму.

Borland лучше не использовать, с ним будут проблемы.

ЗЫ: На русском инфы очень мало, придется подучить инглиш.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хорошо..значит с этого и начну.Большое спасибо!пошел учиться...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я вообще понял что лучше всего писать на матлабе(но он как бы стоит денег), бесплатный аналог как раз питон, но больше ковыряться, меньше готового.(octave,r и т.д. не пробовал)

а с\с++ все равно надо знать и наверно от этого никуда не деться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Smorodov, спасибо огромнейшее за наставления! Программа была написана, протестирована. Все отлично. Но вот теперь задумываюсь о том, чтобы использовать карту глубин. Хотелось бы все это объединить. Вычитал, что в opencv реализовано два алгоритма работы стереозрения. И вот тут возник вопрос, касающийся практической реализации. Так и не уловил это сути. Данные необходимо использовать с одной камеры или нескольких? Плюс, в некоторых статьях прочитал, что вообще нужны специальные камеры. Это несколько сбивает с толку. Возможно, что еще несколько поверхностно ознакомился, поэтому возникают такие глуповатые вопросы. Но и задать-то некому.

Изменено пользователем Kell

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

есть специальные камеры типа kinect.

можно делать по стереопаре полученной с 2-х камер.

есть методы которые "догадываются" с 1 картинки.

соответственно точность падает от 1 варианта к 3.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×