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

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

Recommended Posts

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

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

А именно:

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

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

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

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

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

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

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

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

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


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

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;

}

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


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

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

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

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

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

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

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

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


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

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

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


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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
Вам наверное нужно что то подобное..

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

На русском не нашёл описания...подскажите что к чему.спасибо

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


Ссылка на сообщение
Поделиться на других сайтах
На русском не нашёл описания...подскажите что к чему.спасибо

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

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

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

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


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

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

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


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

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

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


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

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

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

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

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

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

и т.д.

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

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


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

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

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

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

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

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

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

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


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

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

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


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

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

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

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


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

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

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


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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

DetectorFace.zip

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


Ссылка на сообщение
Поделиться на других сайтах
вот программа определения лица на C#. не работает как надо.

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

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

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

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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
Уберете эту строку, и будет Вам счастье

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×