Здравствуйте!:) Увидел вас в useless_faq, обрадовался, и решил задать вопрос. Не знаете ли вы о наработках в таких областях как определение лица на фотографии и координат его основных параметров, и определение положения глаз?
Я поясню. Реализацию первого алгоритма какая-то компания с год назад выставляла на веб-сайте. Всем желающим предлагалось загрузить любую фотографию и на ней система определяла, гле находятся на изображении лица, где на этих лицах находятся глаза, и тп. Мне бы хотелось почитать о том, как это устроено. Про нейросети я, ес-но, в курсе, но этого мало знать:)
Вопрос второй более размыт. Вот есть изображение лица, качественное, видеопоток или фреймы, неважно. Задача - отследить движение глаз и их направление. Реализаций алгоритма не видел и не слышал. Может, вы знаете о наработках в этой области?
Буду благодарен за подсказки и заранее спасибо! :)
Знаю:))))) Поскольку именно этим и занимаюсь :))) Лицо определяется, как правило, по признакам лица ( то бишь 2 глаза между ними прямая линия носа и ниже носа между позициями глаз рот). У меня свои алгоритмы нахождения лица, поскольку у конторы задачи несколько нестандартные, но 80% занимающихся распознаванием лиц используют для этого OpenCV - это бесплатная хорошо зарекомендовавшая себя библиотека, работает на той же основе нейронных сетей - то бишь обучение "что такое лицо", "что такое не лицо", и использование результатов:). Есть куча багов, но при определенных проверках все решаемо. Глаза определяются либо по той же схеме как и лицо, либо по каким-либо отдельным признакам глаз. Я в данном случае не могу вдаваться в детали, контракт-с :))), но можно посмотреть в интернете, есть тысячи вариантов алгоритмов, половина из них с открытыми исходниками, как правило после нахождения лица, в определенных геометрических областях ищется подобие глаз-носа-рта, ну а дальше стандартный edge detection и какая-либо проверка "оно-не оно" вот ссылки из тех, что у меня сейчас есть http://www.cs.princeton.edu/~jlawrenc/morph/ http://library.graphicon.ru/catalog/62 http://www.informatik.uni-trier.de/~ley/db/conf/fgr/fg1996.html По второму вопросу все тоже самое, за исключением, что все-таки лучше использовать нейронные сети из-за скорости обработки картинки. Один из ресурсов, вполне уважаемых, пользуется,например все той же OpenCV, у меня сейчас нет линка, дойду до конторы скину сюда же.
Ну что вам сказать... скачал на свой powerbook opencv, собрал с ffmpeg и погонял все семплы пару часиков. Под сильным впечатлением! Я понял, что делать мне нечего там, все уже сделали до меня, эх :)
Большое вам спасибо за ваш ответ. Он суперполезен для меня. Если дадите примеры прикладного использования opencv - буду благодарен:)
Позволю себе наглость задать следующий вопрос. Имея высококачественное изображение человека, найдя в нем глаза, определить положение зрачков и движение зрачков в режиме реального времени - это сложно? Или это можно сделать на основе той же eyefinder затем motion tracking?
Я поясню, к чему я. Речь идет о позиционировании, скажем, курсора мышки - глазами. Если на компьютере есть одна или две веб-камеры и этот алгоритм.
Проблема в том, что на видеоизображнениях даже на самых лучших как правило недостаточно информации, чтобы с более-менее приличной точностью получить положение зрачка.
Извиняюсь, не было раньше времени на ответ. Все зависит от качества картинки, видео как правило идет в сильно сжатом состоянии, при восстановлении не получается достоточно информации для определения позиции зрачка, но можно попробовать сделать что-то типа такого - проверить отношение позиций белок глаза - тень от ресниц - ориентировочный зрачок. Только учти, что очень тяжело диференциировать тень от ресниц со зрачком, если, конечно, у человека глаза не на выкате и он вообще с ресницами :)))) Другое дело не сжатые картинки или сжатые практически без потерь - там можно найти все, что хочешь, вплоть до отдельной реснички:)))
Ну если не нужна точность вплоть до 1 пикселя, можно сделать такую вещь - определить позицию глаза, максимально уменьшить площадь, к примеру, вычислить контур глаза и взять только внутреннюю часть, вычислить наиболее темный кусок и считать , что центр этого куска и есть зрачок :). Это будет очень грубо, но более-менее верно. Если камера будет возле глаз, во-первых будет проблема с нахождением этого самого глаза, а во-вторых, глаз крупным планом это такой ужас с позиции обработки изображений:))))))))
Я не против отвечать на вопросы, но как правило у меня есть время только в пятницу-субботу :))))) если готов ждать - спрашивай :)))
а такая задача как позиционирование курсора "мышки" одними только глазами, без самой, собственно, мышки - это теоретически реально на сегодня?
я просто не очень представляю что для этого нужно. motion detect? наврядли. курсор отъедет от точки, куда смотришь, и потом фиг его поймаешь. position detect? тогда надо точность допиксельная. задача, в общем, лежит в области юзабилити такого устройства.
А почему она должна быть нереальна? SetCursorPos никто пока не отменил, если вам есть куда его "сет", то бишь если у тебя есть точка позиции зрачка, разумеется ты можешь просчитать передвижение этого самого зрачка с последней вычисленной точки и проекцию на экран. Весь вопрос в скорости обработки видео для получения той самой точки. Самое сложное здесь другое, какую позицию зрачка ты будешь считать, если положим, человек поворачивает голову, а зрачок с точки позиции лица остается на месте, предположим человек смотрит прямо, вертит головой, но продолжает смотреть прямо. На сегодняшний день нет ни одной системы, которая может определить градус поворота головы с точностью до 1 градуса даже с допуском 20% ошибок :))) Для моей системы, например хорошая точность - 3-5 градусов, но это недостаточно, для позиционирования мыши, в проекции на экран это до 20-50 пикселей. Если ты готов разработать такой алгоритм с высокой точностью, есть куча контор, весьма именитых, готовых за него заплатить бешеные деньги :))))))))))))))))
Я думаю о целях такой системы. Цель - это переставить фокус на элемент интерфейса. Здесь допиксельная точность не нужна, и не нужно постоянно отслеживать положение зрачка. Я вполне себе представляю, например, ножную педальку, только при нажатии которой происходит смена позиции мышки. Кроме того, зная, какие элементы есть на экране, можно принять решение о том, на какой элемент хотел человек переместить фокус.
Замена же клавиш мышки педалью вызвает смех только поначалу. Эргономика знает, что очень много усилий и времени тратится на перемещение руки с клавиатуры на мышку. Поэтому-то некоторые люди и не пользуются мышками на ноутбуках - быстрее переместить палец на тачпед чем целую руку на мышь.
Потом дальше. Можно использовать моргание одним глазом как признак нажатия клавиши или, допустим, согнал для того же перемещения курсора. Поэтому и поворот головы уже не проблема, т.к. нам надо снимать не в реалтайме.
Все это пока размышлизмы. Я полагаю, что если к вопросу подойти с другой, неожиданной стороны (педаль для перемещения курсора глазами, например), то что-то может получиться:) Так. Фантазия. :)
В таком случае с точки зрения обработки картинок, гораздо проще отследить положение носа, если камера сбоку, то есть движение кончика носа, конечно, и прогнозируемость несовместима с определением положения зрачков. И в общем-то логичней, ну а отследить моргает человек или нет, если есть хотя бы одно изображение его же неморгающего, это детские игрушки.
По крайней мере в моей системе направление взгляда я определяю. Но это не OpenCV. Вам придется искать именно положение зрачков по 2-м параметрам: положение зрачков относительно самих глаз и насколько положение зрачков симметрично отностительно носа. Но для этого, разумеется, для начала неплохо бы найти глаза. А вот для этого OpenCV уже вполне подходит.
Доброе время суток. ЖЖ пока не обзавелась, поэтому буду анонимить =)
До меня никак не доходит, как с помощью нейронной сети (и только) можно найти лицо, или глаза на картинке. Т.е. как нейронная сеть может вернуть координаты. Может есть какие то особые сети? Вопрос не с потолка, просто последние пол года, для написания проекта, я перелопатила кучу статей и книг по определению лиц, и в части из них просто загоняли картинку в сеть и все ... ну а затем на результате искали глаза, нос и т.д.
В моем проекте, я использовала среднее лицо для конвлюции с картинкой, затем искала подозрительные точки, вырезала часть картинки вокруг, и это дело загоняла в сеть. Все это работает великолепно, только время выполнения хотелось бы уменьшить..
**как с помощью нейронной сети (и только) можно найти лицо, или глаза на картинке** Зависит от того как эти сети обучить :))) Вообще это вопрос для 3-часовой лекции :))) Посмотрите что ли исходники OpenCV функция cvHaarDetectObjects как само нахождение и сопровождающее ее обучение чтобы было понятно.
немного не так... нейронные сети, по крайней мере те, которые я видела, и те, которые встроены в матлаб, дают только оценку твоей картинке, в соответствии с тем, как их обучили. Но они не возвращают координат...
От суда и вопрос, есть сети, которые да, возвращают координаты? Понятное дело, что обучает на лицах и на не лицах ...
Все зависит от того как вы эти сети используете. Разумеется есть. какую собсвенно вообще проблему вы видите после того как сеть "опознала" объект вернуть координаты места где она это сделала. Что именно вас смущает? Я работаю, например, вот с этой библиотекой http://leenissen.dk/fann/
По книжкам, сеть берет инпут, и прогоняет его по 1-му уровню сети. Где инпут превысил требуемый минимум, там и прошел на 2-й уровень сети. Затем смотрим, до скольких выходов дошел наш инпут (или до какого именно выхода, в зависимости от сети). И из этого считается оценка нашей картинке. Или от -1 до 1, или от 0 до 1.
Но если искать координаты, нужно взять окно, и двигать его по всей картинке (для того, что бы найти координаты, да и размеры этого окна должны меняться)... и именно этот факт, у меня не соединяется с осознанием того, что в каждом нейроне сидит тупая функция, которая решает только пропустить сигнал дальше или нет.
Тобишь, где то внутри,должна сидеть фея, которая перебирает все возможные окна, всех возможных размеров и засовывает это дело в инпут. А затем возвращает инфу об окне с максимальной оценкой.
Ну более-менее правильно, именно что определенная маска двигается по картинке и оценивается в соответствии с пониманием сети что есть искомый объект, при движении масштабируется. Я до сих пор не понимаю что именно не нравится.
вот именно маска и не нравится ... Kак она встраивается в сеть? Или просто написана оболочка для сети? Есть некая внешняя функция, которая создает маску и посылает ее в сеть а затем обрабатывает результаты? И она не находится внутри сети... Просто для простоты использования всю эту систему объединили в одну ф-ю и назвали ее сетью.. ?
Я не понимаю, как с помощью нейронов делают эту маску, если она таки на самом деле внутри сети. Т.е. как можно обучить сеть, создавать эти маски, и результат вырезания засовывать в эту же сеть ... ведь сеть умеет делать только одну конкретную вещь, которой ее обучили... Значит, или резать (не понимаю как, но предположим), или определять лицо это или нет. Получается, что речь идет о 2-х разных сетях... ???
Понятно :)) Если очень грубо, то это делается так 1 - сеть обучается. Цель - заложить в сеть информацию, что например круг и два круга по бокам это чебурашка. Результат - некий сторадж, где каким-то образом описано что есть чебурашка для конкретно этой сети. 2 - в сеть с чебурашкой подкидывается некая матрица, и сеть проверяет - а насколько подходит то что ей подкинули тому определению чебурашки которой у нее уже есть. Результат - крик "ура, чебурашка", если его нашли
Другими словами грубо говоря сеть не может сказать - а пойду ка я погуляю и поищу чебурашек, она только может ответить на вопрос - наколько похож на чебурашку тот чебурашка которого мы ей в данный момент подкинули.
У меня подозрение что вы в своей логике пропускаете момент "обучения", а это собственно главное для сети.
Если мы даем картинку размером с картинками, на которых проходило обучение. Бинго, сеть находит чебурашку или нет. Но если мы даем картинку в 20 раз больше тех, на ком сеть обучалась. Тогда начинается игра с окнами ... Если чебурашка в левом верхнем углу, его кто то должен от туда вырезать, и спросить у сети, есть он там или нет ... В обычной ситуации, это делают ручками ... то есть, вырезают кусок, и спрашивают есть ли на нем чебурашка.
Но есть какие то мифические сети, которые сами могут вырезать картинки из первоначальной фотографии, и на них искать чебурашку. И в результате сказать, где нужно было вырезать и сколько, что бы его найти. В итоге, эта мифическая сеть выполняет 2 функции и вырезание всех возможных окон и проверку этих окон... Эти задачи принципиально разные. Отсюда и непонятки.
(картинки для обучения одинакового размера) Если вопрос все таки не понятен, то проехали =)
**Тогда начинается игра с окнами ** Да нету никакой игры с окнами. Есть игра с масштабированием. Просто сети бывают разные и стораджи их тоже. При чем здесь размер картинки-то?? Я не знаю ни одной сети, которой можно дать имя файла и она прибежит виляя хвостиком и принесет в зубах чебурашку. Везде надо давать нечто для сравнения "оно-не оно" Или же давайте определимся что именно каждый из нас считает нейронной сетью :))
утверждается в некоторых статьях, что есть чудо сеть, которая виляя хвостиком принесет чебурашку в зубах. И меня это очень настораживало, и не давало спокойно спать =) Потому, как такая чудо сеть, улучшает в 1000 раз время выполнения поиска ... но ни в одной книге, я на это чудо не наткнулось.
Разновидностью этого утверждения, являлось нахождение положения глаз. (Опять таки, утверждения из статей по нахождению лица и его составляющих найденных мною в сети) Забабахаем картинку в сеть, а она нам сама обведет глаза, потом забабахаем в другую сеть, она нам обведет рот и т.д. Не жизнь а сказка, которую огорчает только факт того, что базы данных с неба не падают.
И ни один человек, мне не смог внятно сказать, это правда, или байки.
Это не правда и не байки, это из разряда "что мы понимаем под определением" Если считать нейронной сетью саму по себе нейронную сеть - в ее функции не входит бегать искать что либо. Но как правило над нейронной сетью пишутся всевозможные надстройки, во многих случаях их тоже называют тем же словом. Например есть такой известный класс EyeFinder, которого все хором зовут нейронной сетью, хотя он всего лишь навсего набор функций по по использованию. Вполне возможно что речь идет о чем-то подобном.
В продолжение темы... Каким еще образом можно найти "подозрительные" точки (те в которых может быть лицо)? Kроме: 1. конволюции с средне статистическим лицом и поиска цветовых пиков в результирующей картинке (где пик, там самое маленькое расстояние до лица)?
2. Есть опция поиска кандидатов на глаза (переворачивает в черно белый рисунок с порогом равным средне статистическому цвету кожи). Но тогда, во 1-х уже не нужна сеть, а во вторых, это не работает при разных условиях освещения + разница слишком велика у чернокожих и белых.
Искать я хочу ручками, просто, что бы научиться, а не с помощью готовой библиотеки (на уровне хобби)
1 С сетями - вы все таки посмотрите реализацию этого дела в OpenCV, однозначно сложно придумать что-то более умное. Если без сетей - я например работаю в колор спэйс HSL, очень помогает для определения кожи и не зависит от ее цвета.
2 Я не могу делиться рабочими секретами как именно ищутся глаза, но попробуйте отойти от идеи черно-белого изображения И - таки у меня есть 2 варианта поиска глаз - с сетью и без сети, без сети однозначно быстрее и точнее. Вне зависимости отцвета кожи.
Очень похоже на определение глаз, но полегче =) Есть картинка с множеством кружочков и овалов. Часть из них накладывается друг на друга, а у части не четкие края. + есть блики на самих кружочках.
Нужно найти как можно больше объектов. Я начала с коректирования цвета, затем размывка по гаусу, коррекция контрастности и гистограмы.
Результат в черно-белое изображение, и преобразование Хафа ....
В результате, нахожу только около 70% ... да и после перевода в чб режим, часть границ улетает...
Не идеально круглые объекты вообще не находятся... =(
Можешь что то подсказать? Я игралась с матлабом. Может в openCV есть готовые решения?
Посмотри в OpenCV пример fitellipse, там же есть его сурсы, если я правильно понимаю это как раз то что тебе надо. И еще очень полезная функция оттуда же - cvHoughCircles Смысл - найти окружность по ее части, то бишь то овалы она тебе найдет, но как круги, а потом уже простейшим edge detection отыщешь внутри сам овал.
offtopic
on 2006-02-11 07:59 am (UTC)Я поясню. Реализацию первого алгоритма какая-то компания с год назад выставляла на веб-сайте. Всем желающим предлагалось загрузить любую фотографию и на ней система определяла, гле находятся на изображении лица, где на этих лицах находятся глаза, и тп. Мне бы хотелось почитать о том, как это устроено. Про нейросети я, ес-но, в курсе, но этого мало знать:)
Вопрос второй более размыт. Вот есть изображение лица, качественное, видеопоток или фреймы, неважно. Задача - отследить движение глаз и их направление. Реализаций алгоритма не видел и не слышал. Может, вы знаете о наработках в этой области?
Буду благодарен за подсказки и заранее спасибо! :)
Re: offtopic
on 2006-02-11 08:32 am (UTC)Поскольку именно этим и занимаюсь :)))
Лицо определяется, как правило, по признакам лица ( то бишь 2 глаза между ними прямая линия носа и ниже носа между позициями глаз рот).
У меня свои алгоритмы нахождения лица, поскольку у конторы задачи несколько нестандартные, но 80% занимающихся распознаванием лиц используют для этого OpenCV - это бесплатная хорошо зарекомендовавшая себя библиотека, работает на той же основе нейронных сетей - то бишь обучение "что такое лицо", "что такое не лицо", и использование результатов:).
Есть куча багов, но при определенных проверках все решаемо.
Глаза определяются либо по той же схеме как и лицо, либо по каким-либо отдельным признакам глаз. Я в данном случае не могу вдаваться в детали, контракт-с :))), но можно посмотреть в интернете, есть тысячи вариантов алгоритмов, половина из них с открытыми исходниками, как правило после нахождения лица, в определенных геометрических областях ищется подобие глаз-носа-рта, ну а дальше стандартный edge detection и какая-либо проверка "оно-не оно"
вот ссылки из тех, что у меня сейчас есть
http://www.cs.princeton.edu/~jlawrenc/morph/
http://library.graphicon.ru/catalog/62
http://www.informatik.uni-trier.de/~ley/db/conf/fgr/fg1996.html
По второму вопросу все тоже самое, за исключением, что все-таки лучше использовать нейронные сети из-за скорости обработки картинки.
Один из ресурсов, вполне уважаемых, пользуется,например все той же OpenCV, у меня сейчас нет линка, дойду до конторы скину сюда же.
Re: offtopic
on 2006-02-11 09:30 pm (UTC)Большое вам спасибо за ваш ответ. Он суперполезен для меня. Если дадите примеры прикладного использования opencv - буду благодарен:)
Re: offtopic
on 2006-02-12 02:26 pm (UTC)http://wwwradig.in.tum.de/people/wimmerm/se/project.eyefinder/index_e.html
Re: offtopic
on 2006-02-12 08:11 pm (UTC)Позволю себе наглость задать следующий вопрос. Имея высококачественное изображение человека, найдя в нем глаза, определить положение зрачков и движение зрачков в режиме реального времени - это сложно? Или это можно сделать на основе той же eyefinder затем motion tracking?
Я поясню, к чему я. Речь идет о позиционировании, скажем, курсора мышки - глазами. Если на компьютере есть одна или две веб-камеры и этот алгоритм.
Re: offtopic
on 2006-02-13 08:27 am (UTC)Re: offtopic
on 2006-02-13 09:03 am (UTC)Re: offtopic
on 2006-02-15 07:51 am (UTC)Все зависит от качества картинки, видео как правило идет в сильно сжатом состоянии, при восстановлении не получается достоточно информации для определения позиции зрачка, но можно попробовать сделать что-то типа такого - проверить отношение позиций белок глаза - тень от ресниц - ориентировочный зрачок.
Только учти, что очень тяжело диференциировать тень от ресниц со зрачком, если, конечно, у человека глаза не на выкате и он вообще с ресницами :))))
Другое дело не сжатые картинки или сжатые практически без потерь - там можно найти все, что хочешь, вплоть до отдельной реснички:)))
Re: offtopic
on 2006-02-15 09:25 am (UTC)А если, скажем, камера будет закреплена в непосредственной близости от глаза, но сбоку. Типа как гарнитура телефонная.
Я прошу прощения что отбираю время. Все это пока досужие разговоры, так что если у вас нет времени на них - сразу скажите:)
Re: offtopic
on 2006-02-17 06:39 pm (UTC)Если камера будет возле глаз, во-первых будет проблема с нахождением этого самого глаза, а во-вторых, глаз крупным планом это такой ужас с позиции обработки изображений:))))))))
Я не против отвечать на вопросы, но как правило у меня есть время только в пятницу-субботу :)))))
если готов ждать - спрашивай :)))
Re: offtopic
on 2006-02-18 11:09 pm (UTC)а такая задача как позиционирование курсора "мышки" одними только глазами, без самой, собственно, мышки - это теоретически реально на сегодня?
я просто не очень представляю что для этого нужно. motion detect? наврядли. курсор отъедет от точки, куда смотришь, и потом фиг его поймаешь. position detect? тогда надо точность допиксельная. задача, в общем, лежит в области юзабилити такого устройства.
как считаете?
Re: offtopic
on 2006-02-19 08:12 am (UTC)SetCursorPos никто пока не отменил, если вам есть куда его "сет", то бишь если у тебя есть точка позиции зрачка, разумеется ты можешь просчитать передвижение этого самого зрачка с последней вычисленной точки и проекцию на экран.
Весь вопрос в скорости обработки видео для получения той самой точки.
Самое сложное здесь другое, какую позицию зрачка ты будешь считать, если положим, человек поворачивает голову, а зрачок с точки позиции лица остается на месте, предположим человек смотрит прямо, вертит головой, но продолжает смотреть прямо.
На сегодняшний день нет ни одной системы, которая может определить градус поворота головы с точностью до 1 градуса даже с допуском 20% ошибок :)))
Для моей системы, например хорошая точность - 3-5 градусов, но это недостаточно, для позиционирования мыши, в проекции на экран это до 20-50 пикселей.
Если ты готов разработать такой алгоритм с высокой точностью, есть куча контор, весьма именитых, готовых за него заплатить бешеные деньги :))))))))))))))))
Re: offtopic
on 2006-02-19 03:04 pm (UTC)Замена же клавиш мышки педалью вызвает смех только поначалу. Эргономика знает, что очень много усилий и времени тратится на перемещение руки с клавиатуры на мышку. Поэтому-то некоторые люди и не пользуются мышками на ноутбуках - быстрее переместить палец на тачпед чем целую руку на мышь.
Потом дальше. Можно использовать моргание одним глазом как признак нажатия клавиши или, допустим, согнал для того же перемещения курсора. Поэтому и поворот головы уже не проблема, т.к. нам надо снимать не в реалтайме.
Все это пока размышлизмы. Я полагаю, что если к вопросу подойти с другой, неожиданной стороны (педаль для перемещения курсора глазами, например), то что-то может получиться:) Так. Фантазия. :)
Re: offtopic
on 2006-02-25 07:56 am (UTC)И в общем-то логичней, ну а отследить моргает человек или нет, если есть хотя бы одно изображение его же неморгающего, это детские игрушки.
Re: offtopic
on 2007-12-17 09:46 am (UTC)Re: offtopic
on 2007-12-17 10:20 am (UTC)Но это не OpenCV.
Вам придется искать именно положение зрачков по 2-м параметрам: положение зрачков относительно самих глаз и насколько положение зрачков симметрично отностительно носа.
Но для этого, разумеется, для начала неплохо бы найти глаза.
А вот для этого OpenCV уже вполне подходит.
Re: offtopic
on 2007-12-17 11:04 am (UTC)Теперь хотя бы известно, куда копать :-).
no subject
on 2007-08-30 08:12 pm (UTC)Определение лица
on 2009-07-22 08:21 am (UTC)До меня никак не доходит, как с помощью нейронной сети (и только) можно найти лицо, или глаза на картинке. Т.е. как нейронная сеть может вернуть координаты.
Может есть какие то особые сети?
Вопрос не с потолка, просто последние пол года, для написания проекта, я перелопатила кучу статей и книг по определению лиц, и в части из них просто загоняли картинку в сеть и все ... ну а затем на результате искали глаза, нос и т.д.
В моем проекте, я использовала среднее лицо для конвлюции с картинкой, затем искала подозрительные точки, вырезала часть картинки вокруг, и это дело загоняла в сеть. Все это работает великолепно, только время выполнения хотелось бы уменьшить..
(речь идет о Matlab)
Спасибо, Оля
Re: Определение лица
on 2009-07-22 08:28 am (UTC)Зависит от того как эти сети обучить :)))
Вообще это вопрос для 3-часовой лекции :)))
Посмотрите что ли исходники OpenCV функция cvHaarDetectObjects как само нахождение и сопровождающее ее обучение чтобы было понятно.
Re: Определение лица
on 2009-07-22 08:39 am (UTC)нейронные сети, по крайней мере те, которые я видела, и те, которые встроены в матлаб, дают только оценку твоей картинке, в соответствии с тем, как их обучили.
Но они не возвращают координат...
От суда и вопрос, есть сети, которые да, возвращают координаты?
Понятное дело, что обучает на лицах и на не лицах ...
Re: Определение лица
on 2009-07-22 08:41 am (UTC)Тогда я вам не помощник, я с матлабом не работаю.
Re: Определение лица
on 2009-07-22 08:47 am (UTC)Есть в принципе такие сети?
Re: Определение лица
on 2009-07-22 09:08 am (UTC)Разумеется есть.
какую собсвенно вообще проблему вы видите после того как сеть "опознала" объект вернуть координаты места где она это сделала. Что именно вас смущает?
Я работаю, например, вот с этой библиотекой
http://leenissen.dk/fann/
Re: Определение лица
on 2009-07-22 09:28 am (UTC)По книжкам, сеть берет инпут, и прогоняет его по 1-му уровню сети. Где инпут превысил требуемый минимум, там и прошел на 2-й уровень сети.
Затем смотрим, до скольких выходов дошел наш инпут (или до какого именно выхода, в зависимости от сети). И из этого считается оценка нашей картинке. Или от -1 до 1, или от 0 до 1.
Но если искать координаты, нужно взять окно, и двигать его по всей картинке (для того, что бы найти координаты, да и размеры этого окна должны меняться)... и именно этот факт, у меня не соединяется с осознанием того, что в каждом нейроне сидит тупая функция, которая решает только пропустить сигнал дальше или нет.
Тобишь, где то внутри,должна сидеть фея, которая перебирает все возможные окна, всех возможных размеров и засовывает это дело в инпут. А затем возвращает инфу об окне с максимальной оценкой.
Re: Определение лица
on 2009-07-22 09:37 am (UTC)Я до сих пор не понимаю что именно не нравится.
Re: Определение лица
on 2009-07-22 10:20 am (UTC)Kак она встраивается в сеть?
Или просто написана оболочка для сети? Есть некая внешняя функция, которая создает маску и посылает ее в сеть а затем обрабатывает результаты? И она не находится внутри сети...
Просто для простоты использования всю эту систему объединили в одну ф-ю и назвали ее сетью.. ?
Я не понимаю, как с помощью нейронов делают эту маску, если она таки на самом деле внутри сети.
Т.е. как можно обучить сеть, создавать эти маски, и результат вырезания засовывать в эту же сеть ... ведь сеть умеет делать только одну конкретную вещь, которой ее обучили... Значит, или резать (не понимаю как, но предположим), или определять лицо это или нет.
Получается, что речь идет о 2-х разных сетях... ???
Re: Определение лица
on 2009-07-22 10:48 am (UTC)Если очень грубо, то это делается так
1 - сеть обучается. Цель - заложить в сеть информацию, что например круг и два круга по бокам это чебурашка.
Результат - некий сторадж, где каким-то образом описано что есть чебурашка для конкретно этой сети.
2 - в сеть с чебурашкой подкидывается некая матрица, и сеть проверяет - а насколько подходит то что ей подкинули тому определению чебурашки которой у нее уже есть.
Результат - крик "ура, чебурашка", если его нашли
Другими словами грубо говоря сеть не может сказать - а пойду ка я погуляю и поищу чебурашек, она только может ответить на вопрос - наколько похож на чебурашку тот чебурашка которого мы ей в данный момент подкинули.
У меня подозрение что вы в своей логике пропускаете момент "обучения", а это собственно главное для сети.
Re: Определение лица
on 2009-07-22 11:01 am (UTC)Если мы даем картинку размером с картинками, на которых проходило обучение. Бинго, сеть находит чебурашку или нет.
Но если мы даем картинку в 20 раз больше тех, на ком сеть обучалась. Тогда начинается игра с окнами ...
Если чебурашка в левом верхнем углу, его кто то должен от туда вырезать, и спросить у сети, есть он там или нет ...
В обычной ситуации, это делают ручками ... то есть, вырезают кусок, и спрашивают есть ли на нем чебурашка.
Но есть какие то мифические сети, которые сами могут вырезать картинки из первоначальной фотографии, и на них искать чебурашку.
И в результате сказать, где нужно было вырезать и сколько, что бы его найти.
В итоге, эта мифическая сеть выполняет 2 функции и вырезание всех возможных окон и проверку этих окон... Эти задачи принципиально разные.
Отсюда и непонятки.
(картинки для обучения одинакового размера)
Если вопрос все таки не понятен, то проехали =)
Re: Определение лица
on 2009-07-22 11:12 am (UTC)Да нету никакой игры с окнами.
Есть игра с масштабированием.
Просто сети бывают разные и стораджи их тоже. При чем здесь размер картинки-то??
Я не знаю ни одной сети, которой можно дать имя файла и она прибежит виляя хвостиком и принесет в зубах чебурашку.
Везде надо давать нечто для сравнения "оно-не оно"
Или же давайте определимся что именно каждый из нас считает нейронной сетью :))
Re: Определение лица
on 2009-07-22 11:25 am (UTC)утверждается в некоторых статьях, что есть чудо сеть, которая виляя хвостиком принесет чебурашку в зубах.
И меня это очень настораживало, и не давало спокойно спать =)
Потому, как такая чудо сеть, улучшает в 1000 раз время выполнения поиска ... но ни в одной книге, я на это чудо не наткнулось.
Разновидностью этого утверждения, являлось нахождение положения глаз. (Опять таки, утверждения из статей по нахождению лица и его составляющих найденных мною в сети)
Забабахаем картинку в сеть, а она нам сама обведет глаза, потом забабахаем в другую сеть, она нам обведет рот и т.д. Не жизнь а сказка, которую огорчает только факт того, что базы данных с неба не падают.
И ни один человек, мне не смог внятно сказать, это правда, или байки.
Re: Определение лица
on 2009-07-22 11:32 am (UTC)Если считать нейронной сетью саму по себе нейронную сеть - в ее функции не входит бегать искать что либо.
Но как правило над нейронной сетью пишутся всевозможные надстройки, во многих случаях их тоже называют тем же словом.
Например есть такой известный класс EyeFinder, которого все хором зовут нейронной сетью, хотя он всего лишь навсего набор функций по по использованию.
Вполне возможно что речь идет о чем-то подобном.
Re: Определение лица
on 2009-07-22 11:49 am (UTC)В продолжение темы...
Каким еще образом можно найти "подозрительные" точки (те в которых может быть лицо)?
Kроме:
1. конволюции с средне статистическим лицом и поиска цветовых пиков в результирующей картинке (где пик, там самое маленькое расстояние до лица)?
2. Есть опция поиска кандидатов на глаза (переворачивает в черно белый рисунок с порогом равным средне статистическому цвету кожи). Но тогда, во 1-х уже не нужна сеть, а во вторых, это не работает при разных условиях освещения + разница слишком велика у чернокожих и белых.
Искать я хочу ручками, просто, что бы научиться, а не с помощью готовой библиотеки (на уровне хобби)
Re: Определение лица
on 2009-07-22 12:27 pm (UTC)Если без сетей - я например работаю в колор спэйс HSL, очень помогает для определения кожи и не зависит от ее цвета.
2 Я не могу делиться рабочими секретами как именно ищутся глаза, но попробуйте отойти от идеи черно-белого изображения
И - таки у меня есть 2 варианта поиска глаз - с сетью и без сети, без сети однозначно быстрее и точнее. Вне зависимости отцвета кожи.
Re: Определение лица
on 2009-07-22 12:31 pm (UTC)Обязательно посмотрю исходники!
Определение овалов и окружностей
on 2009-09-22 07:53 am (UTC)Есть картинка с множеством кружочков и овалов. Часть из них накладывается друг на друга, а у части не четкие края. + есть блики на самих кружочках.
Нужно найти как можно больше объектов.
Я начала с коректирования цвета, затем размывка по гаусу, коррекция контрастности и гистограмы.
Результат в черно-белое изображение, и преобразование Хафа ....
В результате, нахожу только около 70% ... да и после перевода в чб режим, часть границ улетает...
Не идеально круглые объекты вообще не находятся... =(
Можешь что то подсказать?
Я игралась с матлабом. Может в openCV есть готовые решения?
Спасибо, Оля.
Re: Определение овалов и окружностей
on 2009-09-22 08:06 am (UTC)И еще очень полезная функция оттуда же - cvHoughCircles
Смысл - найти окружность по ее части, то бишь то овалы она тебе найдет, но как круги, а потом уже простейшим edge detection отыщешь внутри сам овал.