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

Находим в кадре лица, человеческие фигуры, и т.д. и т.п

Recommended Posts

По первому вопросу, я как раз пытался показать это на картинке.

Все множество точек состоит из красных и синих.

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

Дисперсия внутри классов, это разброс признака для заданного цвета.

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

По поводу второго вопроса, я подумал что мы имеем дело с обучением с учителем (ссылка на Хаара).

мы имеем набор лиц, некоторые из которых немного повернуты, некоторые засвечены или затемнены и т.д.

и если это всё свалить в кучу, то детектор плохой получится.

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

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

так почему нельзя делить не линией? (или это всего лишь вопрос представления)

Детектор Хаара работает не так уж и плохо

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

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


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

да

мы имеем набор лиц, некоторые из которых немного повернуты, некоторые засвечены или затемнены и т.д.

и если это всё свалить в кучу, то детектор плохой получится.

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

Вопрос внутренней структуры детектора. В результате-то все равно выходы объединять придется.

так почему нельзя делить не линией? (или это всего лишь вопрос представления)

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

Впрочем, это конечно вопрос представления.

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

Видимо инструментарием и определяется используемое представление.

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


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

Обнаружил еще некий soft cascade, пишут что очень быстрый и точный:

http://docs.opencv.org/trunk/modules/objdetect/doc/soft_cascade.html

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

Ну и может детектор людей в полный рост тоже интересен будет (исходники на Matlab):

The Fastest Pedestrian Detector in the West

Ну и тут слайды по теме:

http://www.slideshare.net/ktoshik/fast-pedestrian-detection?ref=http://graphics.cs.msu.ru/study/seminars/vision

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


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

Говорят, что в новых версиях traincascade может работать с Haar,Hog,LBP. и LBP самый быстрый как по обучению так и по детектированию.

http://docs.opencv.org/doc/user_guide/ug_traincascade.html

Ну и может детектор людей в полный рост тоже интересен будет

ну это как раз pedestrian detection в opencv это есть через HOG.

только не знаю как это поможет для детектирования лиц.

а еще есть Deformable Parts Model. есть несколько реализаций, возможно можно его использовать, вроде как там объект можно задавать частями(т.е. наверно и при частичном перекрытии будет работать).

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

еще классификация детекторов

Image_01-11-2012%20%5B15-18-06%5D.png

Image_02-11-2012%20%5B11-01-08%5D.png

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


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

нашел здесь:

http://stackoverflow.com/questions/4813975/why-is-visual-studio-2010-not-able-to-find-open-pdb-files

Не проверял, т.к. с подобной проблемой не сталкивался.

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

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


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

Какую ошибку выдает программа?

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

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


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

Какую ошибку выдает программа?

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

http://opencv.willowgarage.com/wiki/FaceDetection

попробуй этот код проверить, может у тебя все работать нормально будет

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


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

Конечно работает, он же вроде из стандартных примеров.

post-1-0-85846000-1359718768_thumb.png

Не смотри на имя екзешника, просто вставил код в первый удобный проект.

В директории с экзешником лежат:

haarcascade_frontalface_alt.xml

и

lena.jpg

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


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

Конечно работает, он же вроде из стандартных примеров.

post-1-0-85846000-1359718768_thumb.png

Не смотри на имя екзешника, просто вставил код в первый удобный проект.

В директории с экзешником лежат:

haarcascade_frontalface_alt.xml

и

lena.jpg

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

вот что пишет в отладке:

Программа "[5720] first.exe: Машинный код" завершилась с кодом -1 (0xffffffff).

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


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

ну правильно, запускать-то надо с параметрами (имя каскада и имя изображения или номер камеры), см. скрин (там есть консоль). И еще, для того чтобы картинка не сразу исчезла я дописал в конце программы cvWaitKey(); (перед строчкой:

  // Destroy the window previously created with filename: "result"
cvDestroyWindow("result");[/code]

)

для того, чтобы работало из студии, надо рабочую директорию задать (сменить ту что по умолчанию, на ту, где находится exe-шник)

post-1-0-96348800-1359723745_thumb.png

($(ProjectDir) поменять на .\Debug)

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


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

ну правильно, запускать-то надо с параметрами (имя каскада и имя изображения или номер камеры), см. скрин (там есть консоль). И еще, для того чтобы картинка не сразу исчезла я дописал в конце программы cvWaitKey(); (перед строчкой:

  // Destroy the window previously created with filename: "result"

    cvDestroyWindow("result");

)

для того, чтобы работало из студии, надо рабочую директорию задать (сменить ту что по умолчанию, на ту, где находится exe-шник)

post-1-0-96348800-1359723745_thumb.png

($(ProjectDir) поменять на .\Debug)

а что значит, запускать с параметрами? т.е. в коде дописать полный адрес .xml и картинки?

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


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

оффтоп конечно, но... :

post-1-0-65284300-1359724975_thumb.png

туда вписать адрес xml, и картинки или номер камеры.

Можно просто в коде вбить пути жестко (я обычно так и делаю).

убери это:

   // Check for the correct usage of the command line
if( argc > 1 && strncmp( argv[1], "--cascade=", optlen ) == 0 )
{
cascade_name = argv[1] + optlen;
input_name = argc > 2 ? argv[2] : 0;
}
else
{
fprintf( stderr,
"Usage: facedetect --cascade=\"<cascade_path>\" [filename|camera_index]\n" );
return -1;
/*input_name = argc > 1 ? argv[1] : 0;*/
}[/code]

и задай:

cascade_name и input_name

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


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

оффтоп конечно, но... :

post-1-0-65284300-1359724975_thumb.png

туда вписать адрес xml, и картинки или номер камеры.

Можно просто в коде вбить пути жестко (я обычно так и делаю).

убери это:

   // Check for the correct usage of the command line

    if( argc > 1 && strncmp( argv[1], "--cascade=", optlen ) == 0 )

    {

        cascade_name = argv[1] + optlen;

        input_name = argc > 2 ? argv[2] : 0;

    }

    else

    {

        fprintf( stderr,

        "Usage: facedetect --cascade=\"<cascade_path>\" [filename|camera_index]\n" );

        return -1;

        /*input_name = argc > 1 ? argv[1] : 0;*/

    }

и задай:

cascade_name и input_name

заработало! спасибо большущее!

получается в name_input и прописывать камеру или видео/фото файл?

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


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

ну да (только видеофайлы здесь не прокатят, надо модифицировать код), "0", или "picture.jpg", например. Первый вариант откроет первую доступную камеру, второй картинку.

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


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

а отчего зависит быстрота работы камеры? при запуске программы жестко тормозит

кстати, видео воспроизводит, только что проверил, но тормозит сильно, получается слайд-шоу))

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


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

добавь в ключам FIND_BIGGEST_OBJECT.

Напиши вместо CV_HAAR_DO_CANNY_PRUNING

так

CV_HAAR_DO_CANNY_PRUNING | FIND_BIGGEST_OBJECT

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

И еще, запускай релиз, он намного быстрее дебага.

ЗЫ: по-моему haarcascade_frontalface_alt2.xml работает лучше чем haarcascade_frontalface_alt.xml.

ЗЫЗЫ: по поводу avi не досмотрел, есть там такой кусок

    // Find whether to detect the object from file or from camera.
if( !input_name || (isdigit(input_name[0]) && input_name[1] == '\0') )
capture = cvCaptureFromCAM( !input_name ? 0 : input_name[0] - '0' );
else
capture = cvCaptureFromAVI( input_name );
// дальше если источники видео не открылись, то попытка открыть изображение.
[/code]

Он и определяет что открывать.

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


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

Есть ли обученные каскады для распознавания лица с углом около 45 градусов над лицом, т.е. если камера висит выше лица где-то на метр-полтора?

И если нет, то дайте пожалуйста почитать литературу по обучению каскадов в opencv.

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


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

Вот тут почитайте:

http://note.sonots.com/SciSoftware/haartraining.html

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


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

Мде, печально. Чувак убил кучу времени, причём он имел готовые базы из инета.

То есть самому на собственных экспериментах в отдельно взятом помещении сделать такое практически нереально...(

А были ли какие то источники самообучающихся программ по распознаванию? Или это из жанра фантастики?

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


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

См. тему

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

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

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


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

И еще проект ( активные контуры (ASM) переделанный (на чистый OpenCV 2.X) мной проект одного китайца, который переделал его из STASM :) ):

В архиве конвертер моделей STASM в файл с матрицами OpenCV, и солюшн для студии с двумя проектами: библиотекой и демкой. Надеюсь на дальнейшее развитие проекта.

ASMCompvisionEdition.rar

post-1-0-36044500-1322321849_thumb.png

у меня вопрос. Что должно поменяться в проекте, если нужен поиск других объектов?

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


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

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

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


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

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×