Jump to content
Compvision.ru
Sign in to follow this  
Frimen

Распознавание лиц

Recommended Posts

Расскажите пожалуйста хотя бы теоретическ как в OpenCV:

1. Распозновать лица на фотографиях

2. Сравнивать лица

Просто никак не могу найти нормальное описание

а на английском я никак не могу разобраться!!!

Может есть какиенибуть статьи или ссылки по этому ???

Сейчас пытаюсь найти какую либо информацию по этому поваду в книге OReilly-LearningOpenCV

Если кто знает на каких страницах данной книге рассматриваются эти вопросы скажите пожалуйста страници откуда начинать мне переводить ??????

Share this post


Link to post
Share on other sites
Сейчас пытаюсь найти какую либо информацию по этому поваду в книге OReilly-LearningOpenCV

Если кто знает на каких страницах данной книге рассматриваются эти вопросы скажите пожалуйста страници откуда начинать мне переводить ??????

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

Share this post


Link to post
Share on other sites

Vicul книгу не обязательно читать всю !!!

Достаточно прочитать несколько первых глав и изучить основы OpenCV

Гораздо большая проблема состоит в том чтобы найти и изучить интересующую тему т.к. весь материал написан на английском!

У меня ещё такой вопрос: Объясните что такое cascade в OpenCV????

И для чего он используется ?

Share this post


Link to post
Share on other sites
Vicul книгу не обязательно читать всю !!!

Достаточно прочитать несколько первых глав и изучить основы OpenCV

Гораздо большая проблема состоит в том чтобы найти и изучить интересующую тему т.к. весь материал написан на английском!

У меня ещё такой вопрос: Объясните что такое cascade в OpenCV????

И для чего он используется ?

Здравствуйте.

Насколько я понимаю, в книжке, о которой вы говорите достаточно много неточностей. Я думаю что лучше опираться не только на эту книжку, но и на руководство по OpenCV. Они лежат на форуме в топике "официальное руководство по OpenCV".

Что касается распознавания лиц то вот подборка ссылок:

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

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

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

И описание: метод главных компонент

обучение каскадов Хаара

Share this post


Link to post
Share on other sites

Smorodov спасибо за ответ.

С детектором лиц и других частей лица я разобрался.

У меня теперь другой вопрос:

Как сравнивать два лица ? Может быть в OpenVC существуют какиенибуть функции для сравнения изображений ?

Share this post


Link to post
Share on other sites
Smorodov спасибо за ответ.

С детектором лиц и других частей лица я разобрался.

У меня теперь другой вопрос:

Как сравнивать два лица ? Может быть в OpenVC существуют какие ни будь функции для сравнения изображений ?

Сравнению лица с набором фоторграфий (поиску по фото) посвящены как раз 2 и третья ссылки из моего предыдущего поста.

А именно:

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

Теория обсуждалась здесь: http://www.compvision.ru/forum/index.php?showtopic=71

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

Сделан на основе примера, ответы на некоторые вопросы для меня еще не очевидны (например, выбор начений некоторых параметров),

что понял - откомментировал.

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

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

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

Share this post


Link to post
Share on other sites

Smorodov во общем рассмотрел я твою программу распознания лиц методом главных компонент.

Спасибо за предоставленный материал!!!

Возник такой вопрос :

В случае если загружать фотографию лица не содержащуюся в базе данных фотографий

то как программа определит что такой фотографии не содержится в базе данных картинок ?

и песните пожалуйста код :

double leastDistSq = DBL_MAX;//Что это за константа и откуда она взялась ?

int iTrain,iNearest =0;


for (iTrain=0;iTrain<N_Samples;iTrain++)

{

double distSq=0;

 for (i=0;i<nEigens;i++)

 {

 float d_i = projectedTestFace[i] - coeffs[iTrain][i];// как я понял здесь мы вычисляем наименьшее отклонение 

 distSq += d_i*d_i/EigenVals->data.fl[i]; //а здесь нормируем и суммируем нормы

 }

if(distSq<leastDistSq)

{

leastDistSq = distSq;

iNearest = iTrain;

}

Share this post


Link to post
Share on other sites

DBL_MAX - максимально возможное число типа double, по моему стандартная.

А функция вычисляет минимальную дистанцию между векторами (помнится по Махаланобису (Mahalanobis distance), т.к. делим на собств. число.).

Я думаю, что единственный путь, определить что фото нет в базе, это контролировать расстояние между существующими

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

Существуют методы, на основе собственных лиц, работающие на бесконечном множестве фотографий,

я их подробно не смотрел, но возможно они вам подойдут больше.

Share this post


Link to post
Share on other sites

Товарищи.вышел на диплом с темой распознаваие лиц с помощью камеры.Сложность состоит в том,чтобы по 3D изображению с камеры выявить признаки лица,развернуть лицо в 2D.Подскажите новичку,можно ли это реализовать с помощью opencv?

Share this post


Link to post
Share on other sites
Товарищи.вышел на диплом с темой распознаваие лиц с помощью камеры.Сложность состоит в том,чтобы по 3D изображению с камеры выявить признаки лица,развернуть лицо в 2D.Подскажите новичку,можно ли это реализовать с помощью opencv?

Вам наверное нужно что то подобное..

Можете для этого использовать библиотеку: http://code.google.com/p/aam-library

Share this post


Link to post
Share on other sites
На русском не нашёл описания...подскажите что к чему.спасибо

Там очень много переводить (о том как работает), технология, достаточно сложная.

Можно краткое описание посмотреть здесь: http://ru.wikipedia.org/wiki/%D0%90%D0%BA%...%80%D0%BC%D1%8B

Да и примеры там есть, run-build - это построение статистической модели на основе размеченных фотографий. Нужно построить один раз (долгая процедура). run-fit - это собственно распознавалка.

Share this post


Link to post
Share on other sites

Всем доброе утро!У меня тоже диплом но задача не много другая.Мне надо в пределах нескольких комнат сделать видео наблюдение с распознавание лиц которые входят в эти комнаты. И определять что вошел посторонний (которго нет в базе). Я пробовал использовать метод главных компонент. но он у меня дает большую ошибку. у меня получилось что вероятность распознавания не больше 70-75 %. Этого конечно мало. Подскажите еще какие можно использовать методы?

Share this post


Link to post
Share on other sites
Всем доброе утро!У меня тоже диплом но задача не много другая.Мне надо в пределах нескольких комнат сделать видео наблюдение с распознавание лиц которые входят в эти комнаты. И определять что вошел посторонний (которго нет в базе). Я пробовал использовать метод главных компонент. но он у меня дает большую ошибку. у меня получилось что вероятность распознавания не больше 70-75 %. Этого конечно мало. Подскажите еще какие можно использовать методы?

Очень хорошо работающая библиотека распознавания лиц (с определением положения головы в 3D), есть бесплатная версия, для некоммерческого использования. http://www.seeingmachines.com/product/faceapi/downloads/

Share this post


Link to post
Share on other sites

А вообще какой метод самый лучший?в плане даёт большую вероятность распознавания?.вот перерыл много статей с методами

главных компонент

фильтров Габора

метод собственных лиц

нейросетевые методы

и т.д.

но нигде не написано их сравнение.кто подскажет что лучше использовать?

Share this post


Link to post
Share on other sites

Я думаю, что самый правильный ответ: "А хрен его знает!"

Одно дело - научные статьи, совершенно другое - практика. А тестирование разных методов и есть практика.

Так вот. Я видел работу нескольких разных коммерческих (и довольно дорогих) библиотек для распознавания лиц. Некоторые библиотеки более капризны, некоторые менее., но все работают в условиях близких к идеальным: ровное и яркое освещение, никаких наклонов и поворотов лица и т.д. То есть нельзя повесить на стене дома камеру и направить на тротуар - распознавать не будет. Только помещение с искусственным освещением, хорошая видеокамера.

Не многие выдают процент распознавания выше 80, худшие около 40. Но даже лучшую, что я видел - немецкую Когнитек, можно легко обмануть, приложив к своему лицу качественную фотографию другого человека соответствующего размера.

Поэтому: "А хрен его знает!"

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

Share this post


Link to post
Share on other sites

а как на счет нейросетевых методов распознавания? кто нибудь работал с ними? какой результат они дают?можно ли с помощью них еще и определить что скажет такого человека как на картинке нет в базе?

Share this post


Link to post
Share on other sites
а как на счет нейросетевых методов распознавания? кто нибудь работал с ними? какой результат они дают?можно ли с помощью них еще и определить что скажет такого человека как на картинке нет в базе?

Вроде неплохой результат дают сверточные нейронные сети. Ссылка по теме:

http://www.masters.donntu.edu.ua/2010/fknt...rt06/index.html

Share this post


Link to post
Share on other sites
Очень хорошо работающая библиотека распознавания лиц (с определением положения головы в 3D), есть бесплатная версия, для некоммерческого использования. http://www.seeingmachines.com/product/faceapi/downloads/

А можно по подробнее? Просто я так понял эти библиотки позволяют поределить положение головы, гед располжен нос, рот, глаза. А как осуществлять распознавание?

Share this post


Link to post
Share on other sites
А можно по подробнее? Просто я так понял эти библиотки позволяют поределить положение головы, гед располжен нос, рот, глаза. А как осуществлять распознавание?

и эти библиотеки все таки платные..если хотим использовать все возможности.

для начала определите лицо..хотя бы каскадом хаара...также можно определить и глаза..теми же каскадами..

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

Share this post


Link to post
Share on other sites

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

Вообще, собираясь использовать нейросети, оцени имеющиеся мощности. Ведь, для того, чтобы нейросеть показала хороший результат - нужно ее достаточно объемно "обучить". Для выбора оптимального метода распознования, нужно учитывать такие моменты, как скорость, размер базы (объем), допустимая вероятность распознования (погрешность), количество распозноваемых образов в кадре, наличие достаточных мощностей и оборудования, времени на создание и обучение.

Как вариант, предлагаю выделять на лице уникальные части или отдельные части лица (например, уши и нос или уши, нос, форма губ или глаз) или, как было предложено выше, использовать контуры. Можно хранить в базе трехмерную модель головы персоны или развертку от уха до уха. Так снизится погрещность и увеличится вероятность правильного распознования персоны при поворотах головы. А чтобы обойти проблемму с прикрытием лица качественной фотографией - перед снятием образа подавать световспышку или оценивать фон в 3-4 точках вокруг образа.

Share this post


Link to post
Share on other sites
Я в данной теме новичек, поэтому прошу ногами не пинать. Имею небольшой опыт по работе с камерой и определением движения в кадре, распознованием образов (в основном текстаи геометрических фигур), но пришел к вопросу распознования лиц. Так, для личного развития.

Вообще, собираясь использовать нейросети, оцени имеющиеся мощности. Ведь, для того, чтобы нейросеть показала хороший результат - нужно ее достаточно объемно "обучить". Для выбора оптимального метода распознования, нужно учитывать такие моменты, как скорость, размер базы (объем), допустимая вероятность распознования (погрешность), количество распозноваемых образов в кадре, наличие достаточных мощностей и оборудования, времени на создание и обучение.

Как вариант, предлагаю выделять на лице уникальные части или отдельные части лица (например, уши и нос или уши, нос, форма губ или глаз) или, как было предложено выше, использовать контуры. Можно хранить в базе трехмерную модель головы персоны или развертку от уха до уха. Так снизится погрещность и увеличится вероятность правильного распознования персоны при поворотах головы. А чтобы обойти проблемму с прикрытием лица качественной фотографией - перед снятием образа подавать световспышку или оценивать фон в 3-4 точках вокруг образа.

По поводу вспышки мысль очень интересная.

Что касается развертки, думаю Вам стоит погуглить по фразам "Elliptical Head Model Tracking", "Cylindrical Head Model Tracking".

Найдете много интересного.

Share this post


Link to post
Share on other sites

вот программа определения лица на C#. не работает как надо.

по логике должна выделять лицо в красный прямоугольник, но нет.

DetectorFace.zip

Share this post


Link to post
Share on other sites
вот программа определения лица на C#. не работает как надо.

по логике должна выделять лицо в красный прямоугольник, но нет.

Каскад Хаара к экзешнику бросьте.

У меня она ч/б изображение лица выводит когда находит его. У Вас так же?

Думаю тут все законно, ибо обрезано и сконвертировано в серый:

pictureBox1.Image = NextFrame.Copy(faces[0].rect).Resize(250, 250, INTER.CV_INTER_AREA, false).Convert<Gray, byte>().ToBitmap();

Уберете эту строку, и будет Вам счастье :)

Share this post


Link to post
Share on other sites
Уберете эту строку, и будет Вам счастье

заработал пример. спасибо. Кстати он с# вы можете на форуме сделать отдельные темы и выложить туда такие примеры. Чтобы новичок прийдя сразу мог покруть, потестировать его на том языка на котором он работает.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×