ProgerX 0 Жалоба Опубликовано July 6, 2009 Запускаю сэмпл facedetect из пакета OpenCV вот так: ./facedetect --cascade=../../haarcascades/haarcascade_frontalface_alt2.xml 0 Помимо моего лица, он находит штуки два на обоях, дверях. Не очень радуют меня эти сбои, покуда есть подозрения, что такие сбои только из-за моей вебкамеры (Logitech QuickCam Communicate Deluxe). Кто-нибудь пробовал работать с этим приложением? Часто ли оно даёт у Вас подобные сбои? На самом деле, камера просто отвратительно нечёткая. Вот пример её съёмки: http://rapidshare.de/files/47770677/capture2.avi.html далее я поднимаю насыщенность. Видно что пиксели так и не могут усидеть на месте В этом-то и проблема Вдруг, если именно по аналогии камера и "создаёт" фейковые лица, что opencv путается постоянно.. Кстати, а никто не знает ли как там происходит распознавание лица? По одному кадру или анализируются и предыдущие? Если первое - то проблема не в камере, а в алгоритме OpenCV, а если второе.. то вполне возможно, что logitech подвёл своей дорогой, но некачественной камерой. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано July 6, 2009 Запускаю сэмпл facedetect из пакета OpenCV вот так: ./facedetect --cascade=../../haarcascades/haarcascade_frontalface_alt2.xml 0 Помимо моего лица, он находит штуки два на обоях, дверях. Не очень радуют меня эти сбои, покуда есть подозрения, что такие сбои только из-за моей вебкамеры (Logitech QuickCam Communicate Deluxe). Кто-нибудь пробовал работать с этим приложением? Часто ли оно даёт у Вас подобные сбои? На самом деле, камера просто отвратительно нечёткая. Вот пример её съёмки: http://rapidshare.de/files/47770677/capture2.avi.html далее я поднимаю насыщенность. Видно что пиксели так и не могут усидеть на месте В этом-то и проблема Вдруг, если именно по аналогии камера и "создаёт" фейковые лица, что opencv путается постоянно.. Кстати, а никто не знает ли как там происходит распознавание лица? По одному кадру или анализируются и предыдущие? Если первое - то проблема не в камере, а в алгоритме OpenCV, а если второе.. то вполне возможно, что logitech подвёл своей дорогой, но некачественной камерой. С опцией CV_HAAR_FIND_BIGGEST_OBJECT, команда cvHaarDetectObjects находит наибольший по размеру объект проходящий по классификаторам. Если хотите избавиться от помех камеры, можно попробовать накапливать кадры, используя видеоаккумулятор, например, так (это фрагмент): // Grab - изображение, поступивше с камеры if(!gray) {gray = cvCreateImage(cvSize(Grab->width,Grab->height), IPL_DEPTH_8U, 1);} if(!gray_f){gray_f = cvCreateImage(cvSize(Grab->width,Grab->height), IPL_DEPTH_32F, 1);} if(!accum_f){accum_f = cvCreateImage(cvSize(Grab->width,Grab->height), IPL_DEPTH_32F, 1);} cvCvtColor(Grab, gray, CV_BGR2GRAY); // Получаем серый цвет cvConvertScale( gray, gray_f); // Это усреднитель 0.3 - коэффициент вклада каждого кадра cvRunningAvg( gray_f,accum_f,0.3); cvConvertScale( accum_f, gray);[/code] Что касается распознавания, то используется один кадр (алгоритм Виолы-Джонса (он-же каскады Хаара, правда не совсем)). И еще, точность алгоритма, составляет порядка 80-95% так что ложные срабатывания (в небольшом количестве) допустимы. Для улучшения качества распознавания можно также применять пирамиду cvPyrDown (кажется), хотя я пробовал, эффект не очень заметный. Можно использовать результаты распознавания Хааром, как промежуточный результат для другого метода, например PCA (метод главных компонент (собственные лица) (на форуме есть), нужно правда его тогда подправить), или другим. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ProgerX 0 Жалоба Опубликовано July 6, 2009 На самом деле распознаёт лица оно достаточно хорошо! Я бы даже сказал - очень хорошо. Ну подумаешь, раз в 7 секунд бывает вот так: http://i041.radikal.ru/0907/72/9341b1d8177e.png т.е. помимо лиц он видит ещё какое-то, которое я не вижу Ну зато как накодить там надо, чтобы он лица аж на коробке разглядывал! Это ж превосходная работа! Причём те 5 лиц он находит постоянно! (это каскад, который *_alt_tree.xml - он даёт меньше сбоев). PS смотрю на скриншот.. а всё-таки изображение с камеры - полный отстой. Плюс к этому ещё я слишком близко поднёс коробку - не в фокусе получилось. Кстати, по поводу того, что искать окружность наибольшего радиуса.. мне кажется такое не прокатит, покуда оно видит лица на стене, которые явно больше моего, моей окружности Мне сходу приходит такое решение - основанное на том, что быстро ты не сможешь переместится по кадру - просто помнить позицию центра окружности, если на следующем кадре центр очень далеко (задать фиксированно), то считать это фейком и не реагировать (на следующем кадре появится лучше результат ). Но такое прокатит только, если в кадре одно лицо.. Двум будет просто некуда перемещаться Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
goodkat 0 Жалоба Опубликовано August 31, 2009 Существуют ли в свободном доступе наборы изображений, на которых OpenCV с заданной моделью распознавателя из стандартной комплектации (например, haarcascade_frontalface_alt2.xml) гарантированно находит лица? Возникла проблема проверки правильности подключения OpenCV в проект. Попутно другой вопрос - какая модель предпочтительней для изображений низкого и среднего качества (любительские фото в интернете)? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 31, 2009 Существуют ли в свободном доступе наборы изображений, на которых OpenCV с заданной моделью распознавателя из стандартной комплектации (например, haarcascade_frontalface_alt2.xml) гарантированно находит лица? Возникла проблема проверки правильности подключения OpenCV в проект. Попутно другой вопрос - какая модель предпочтительней для изображений низкого и среднего качества (любительские фото в интернете)? Излюбленный пример при демонстрациях машинного зрения и обработки изображений C:\Program Files\OpenCV\samples\c\lena.jpg Что касается разрешения, то HaarClassfiers не особо к нему чувствительны, насколько я понял, они все равно уменьшают окно сканирования до 24х24 см. здесь http://www.cs.utexas.edu/~grauman/courses/...la_cvpr2001.pdf Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TotenSie 0 Жалоба Опубликовано October 30, 2009 Опишите плз, как сгенерировать на основе одного эталонного объекта заданное количество случаев с помощью createsamples. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано October 30, 2009 Опишите плз, как сгенерировать на основе одного эталонного объекта заданное количество случаев с помощью createsamples. Вот тут есть: Обучение каскадов Хаара 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TotenSie 0 Жалоба Опубликовано October 30, 2009 Спасибки Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TotenSie 0 Жалоба Опубликовано January 15, 2010 Можно ли с помощью каскада Хаара находить автомобильные номера или лутше использовать какой нибудь другой метод? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RinOS 16 Жалоба Опубликовано April 14, 2010 Всем привет! Пытался обучать классификатор Хаара, использовал haarkit. Но вышло как то не очень... Почему то детектируется фон, Куча разноцветных кружочков) - npos <number_of_positive_samples>, - nneg <number_of_negative_samples> количество положителных/отрицательных образцов используемых при обучении каждого уровня классификатора. Разумные значения: npos = 7000 и nneg = 3000. Это значит что должно быть столько картинок (7000, 3000)? и причем у положительных должны быть выделены объекты типа: rawdata/0018.bmp 1 90 22 55 68 rawdata/0019.bmp 1 81 19 59 76 rawdata/0020.bmp 1 83 19 53 73 ? http://www.iem.pw.edu.pl/~domanskj/haarkit.rar Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано April 14, 2010 Это значит что должно быть столько картинок (7000, 3000)?Да, именно так. rawdata/0018.bmp 1 90 22 55 68 rawdata/0019.bmp 1 81 19 59 76 rawdata/0020.bmp 1 83 19 53 73 Это означает, что на изображении 0018.bmp присутствует 1 искомый объект, причём его кординаты: x = 90, y = 22, width = 55, height = 68. Всё просто! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RinOS 16 Жалоба Опубликовано April 14, 2010 Это означает, что на изображении 0018.bmp присутствует 1 искомый объект Это я понял, я в смысле, должно быть 7000 картинок с описаниями (0018.bmp 1 90 22 55 68) объектов? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано April 14, 2010 Это я понял, я в смысле, должно быть 7000 картинок с описаниями (0018.bmp 1 90 22 55 68) объектов? Должно быть 7000 объектов, а не картинок. А описаний столько, сколько самих картинок. Если на одном изображении присутствует, например 2 объекта, то описание будет выглядеть так:4_0344.bmp 2 295 153 9 17 349 153 10 18 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RinOS 16 Жалоба Опубликовано April 14, 2010 Должно быть 7000 объектов мля это полный ппц... даже если 2 сек на 1 картинку.. то 7000 объектов это 4 часа.... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
andrew smirnov 0 Жалоба Опубликовано April 14, 2010 мля это полный ппц... даже если 2 сек на 1 картинку.. то 7000 объектов это 4 часа.... Вот-вот! И я про то же! Я где-то сотни три для положительных сэмплов использовал - что-то похожее получается. А негативные сэмплы - просто чтобы не содержали искомый образец. Так потом эта программулина, которая обучает каскад, еще очень долго работает, чтобы достичь нужного порога распознавания. Причем не всегда получается. Короче, долго и нудно. Лучше всего это делают китайцы ... З.Ы. Кроме того, как показывает опыт использования, каскад плохо отрабатывает поворот изображения - мне пришлось делать это вручную: детект - нет результата - поворот - детект - и т.д. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RinOS 16 Жалоба Опубликовано April 14, 2010 А имеет значение размер изображения? К примеру если я обучаю каскад на картинках 320x240, а использовать буду на 160х120. И имеет ли значение поворот объекта? К примеру я обучу распознавать профиль человека который смотрит налево, будет ли он так же хорошо работать с профилем повернутым направо? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано April 14, 2010 мля это полный ппц... даже если 2 сек на 1 картинку.. то 7000 объектов это 4 часа....Гхм!!! У нас ребята неделю сидели, выбирали. К примеру если я обучаю каскад на картинках 320x240, а использовать буду на 160х120Мой личный опыт (но никак не знание теории) подсказывает, что лучше обучать на минимальных объектах. Впрочем, здравый смысл говорит мне о том же. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RinOS 16 Жалоба Опубликовано April 16, 2010 Млин... опять не получилось... обводит кружочками фон( Как же правильно делать Какой фон предпочтительнее? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 16, 2010 Млин... опять не получилось... обводит кружочками фон( Как же правильно делать Какой фон предпочтительнее? Тут есть исходник, позволяющий набирать положительные примеры из видеопоследовательности: http://www.tutorialized.com/view/tutorial/...Resources/43410 И кое-какие ресурсы по теме. Еще один ресурс: http://note.sonots.com/SciSoftware/haartraining.html Там автор говорит, что тренировал каскад неделю. Есть ссылки на файлы фона. Правда статьи на англ., но основное можно понять и так. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Headmast 0 Жалоба Опубликовано April 18, 2010 Я пытаюсь тренировать каскад на четырёх положительных и 5 негативных образцах. Но при этом объект не находится даже на фотографии с положительным образцом? aartraining -data handcascade -vec hand10.vec -bg PH\bg.dat -nstages 10 -nsplits 2 -minhitrate 0.999 -maxfalsealarm 0.5 -npos 4 -nneg 5 -w 10 -h 10 -nonsym -mem 128 -mode ALL Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
andrew smirnov 0 Жалоба Опубликовано April 18, 2010 Я пытаюсь тренировать каскад на четырёх положительных и 5 негативных образцах. Но при этом объект не находится даже на фотографии с положительным образцом? aartraining -data handcascade -vec hand10.vec -bg PH\bg.dat -nstages 10 -nsplits 2 -minhitrate 0.999 -maxfalsealarm 0.5 -npos 4 -nneg 5 -w 10 -h 10 -nonsym -mem 128 -mode ALL маловато будет, наверное. на хабре (www.habrahabr.ru - тема про поиск НЛО - http://habrahabr.ru/blogs/artificial_intelligence/67937/) есть пример, где тренируют на одном положительном сэмпле, а вот негативных должно быть все равно много. негативные при этом выступают, если я не ошибаюсь, в качестве фона, куда помещаются положительные сэмплы. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
andrew smirnov 0 Жалоба Опубликовано April 18, 2010 Млин... опять не получилось... обводит кружочками фон( Как же правильно делать Какой фон предпочтительнее? Фон - чем больше вариантов, тем лучше для обучения - меньше ложных детектов будет. Главное, чтобы негативные изображения точно не содержали искомый объект. А что ищещь, если не секрет? Плюс еще можно поиграться с параметрами процедуры поиска объектов: алгоритм поиска, порог принятия решения. Я процент ложных срабатываний убирал так: cvHaarDetectObjects( PCvArr(SrcImage), Cascade, Storage, 1.1, 4, CV_HAAR_DO_CANNY_PRUNING , ImSize ); 1.1 - параметр, который определяет шаг приращения масштаба при поиске объектов (10%, как я понял); 4 - порог срабатывания - чем ниже, тем больше детектов, но выше процент ложных срабатываний; я для поиска лиц у себя использовал это значение; CV_HAAR_DO_CANNY_PRUNING - алгоритм, который используется в процессе выделения признаков - почему выбрал не помню, но вроде с ним получились наилучшие результаты. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RinOS 16 Жалоба Опубликовано April 19, 2010 а вот негативных должно быть все равно много. В общем что бы не детектировал фон я решил по пробывать отсекать его (заливать белым) оставляя только объект. получается негативные мне почти совсем не нужны? хм... что получится из этого позже отпишу. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RinOS 16 Жалоба Опубликовано April 21, 2010 Ничего не получается... Кто тренировал и у кого получилось, покажи плиз какого вида картинки вы использовали в negative и positive Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано April 21, 2010 Фон отсекать как раз нельзя, каскад должен знать типичные отрицательные признаки. Грубо говоря, при проходе по каскаду подсчитывается сумма весов для каждой haar-feature. Значение очередной haar-feature сверяется с некоторым порогом. Если оно больше порога, то к сумме прибавляется один вес, если меньше - другой. Веса могут быть либо отрицательными, либо положительными в зависимости от того, удовлетворяет значение искомому объекту или нет. Веса и пороги формируются при обучении. Если ты затираешь фон, то значения весов, соответствующие ложной сработке, будут равны нулю (или почти нулю). А они должны быть отрицательными. Соответственно сумма всех весов будет больше, чем должна; отсюда ложные сработки. Следовательно, что для корректной работы необходимо выбрать большую выборку разнообразных положительных образов, а также большую выборку разнообразных отрицательных. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах