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

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

Recommended Posts

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

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

ASMCompvisionEdition.rar (4,55Мб)

Файл main.exe запускается нормально, все работает. А вот когда пытаюсь собрать проект из исходников, сам код компилируется, но в процессе работы возникает ошибка:


OpenCV Error: Assertion failed (type == v2.type() && type == icovar.type() && sz == v2.size() && len == icovar.rows && len == icovar.cols) in unknown function, file c:\Users\vp\work\ocv\opencv\modules\core\src\matmul.cpp, line 2172

Эта ошибка вылезает при расчете расстояния махаланобиса. Конкретно в функции GetProfDist() файла asm.cpp:

static double GetProfDist (const IplImage* SearchImgs,

                           const int iPoint, const int ix,

                           const tAsmLev &AsmLev, const SHAPE &Shape)

{

    const unsigned iSub = 0;

    cv::Mat Prof(1, AsmLev.Profs[iPoint][iSub].cols,CV_64F);

    Get1dProf(Prof, iPoint, ix);



    double dist = cv::Mahalanobis(Prof, AsmLev.Profs[iPoint][iSub], AsmLev.Covars[iPoint][iSub]);

    return dist;

}

В чем причина? Смущает то, что аргументы SearchImgs и Shape в теле функции не используются.

Проект очень интересный, хочу его расширить до Active Apperance и прикрутить идентификацию по лицу. Но хоьелось бы до конца с этими исходниками разобраться с минимальными затратами времени))))

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


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

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

Поставил OpenCV

Взял пример по определению лица http://opencv.itseez.com/doc/tutorials/objdetect/cascade_classifier/cascade_classifier.html

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

Если пример быстро работающей программы по определению лица на MSVC?

P.S. пробовал предкомпилированную версию 2.31 и собственно компилированную версию 2.40, результат одинаковый :(

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


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

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

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

вроде видел что то на куде что работало в реальном режиме времени для видео, вообщем поищите что то типа

http://www.cs264.org/2009/projects/web/Dai_Yi/Hsiao_Dai_Website/Project_Write_Up.html

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

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

по лицам в опенцв

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

кожа и детектор лиц

http://www.codeproject.com/Articles/21110/Face-Detection-C-Library-with-Skin-and-Motion-Anal

про руки и активные контуры AAM,ASM

http://www.mathworks.com/matlabcentral/fileexchange/authors/29180

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


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

кстати созрел такой вопрос

можно ли каскады хаара сделать итеративными, т.е. как бы обучаемым на ходу?

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

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

опять же вопрос может ли объект сильно отличаться внутри своего класса?

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

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


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

возможно уже было

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

там по первой ссылке много интересного

http://www.face-rec.org/source-codes/

http://www.face-rec.org/algorithms/

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


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

Занятные картинки получил, экспериментируя с банками фильтров Габора:

post-1-0-86270700-1337889788_thumb.jpg

gabor_extract.cpp

1.TIFF

Запускать так

сначала (генерирует банки)

your_project b
затем (процессит изображение)
your_project e 1.tiff
Работает медленно (несколько десятков секунд), но думаю должно хорошо параллелиться на GPU. чем рулить (не обязаловка :) ): количеством кластеров здесь 7.

kmeans(samples,7, labels, TermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 1000, 0.010), 3, KMEANS_PP_CENTERS, centers);
[/code] параметрами фильтра здесь (10/512.0 и 0.3):
[code]
gabor_kernel(N_scales,N_orientations,img_size,10/512.0,0.3, "gabor");

Исходники сыроваты, он масштабирует любое изображение всегда до 512 на 512, там используется быстрое преобразование Фурье (для свертки) отсюда и 512, в общем пока нестабильная экспериментальная версия.

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


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

Добрый день, Всем!

Тут задачка возникла: посчитать количество зрителей в 3D кинотеатре. Камера стоит примерно под 45 градусов от сидений по горизонтали и ~30 градусов выше по вертикали. Т.е. съёмка сполубоку сверху. Зрители крутят головами, периодически перекрывают лицо рукой, держатся за очки чуть ли не весь сеанс, сзади сидящего перекрывает периодически впереди сидящий, и так далее.

Думаю, что самое простое привязаться к 3D очкам. Но тут возникает проблема с переменным углом поворота и наклона головы, которого например Каскады хаара не любят. Или просто у меня обучить не получилось?

По какому алгоритму стоит вычислять количество человек в данном случае? Каскады хаара? HOG? Ещё что-то? Скорость мне особо не важна. Даже если вычисляться будет секунд за 10-15 - это терпимо. Главное качество.

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


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

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

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


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

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

Забыл уточнить, что это 5D кино. Т.е. людей мотает туда-сюда на динамической платформе и простой разницей с пустым залом тут не обойтись. :(

Хотя "ловить" платформу в точке покоя и вычитать - это идея. Надо попробовать... Но всё-таки интереснее решить задачу через нахождение лиц. Просто интереснее. :)

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


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

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

Можно попробовать шаблоны движения использовать, как вариант.

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


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

http://grail.cs.washington.edu/photobios/

интересный проект.

похоже то, что использует фэйс.ком http://www.stat.ucla.edu/~sczhu/Courses/UCLA/Stat_231/Project_II/Multi_view_RealBoost.pdf

http://libccv.org/doc/doc-bbf/

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

http://www.shervinemami.info/imageBasedSearch.html

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


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

http://betaface.com/Technology.aspx

очень приятная технология, есть демо.

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

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


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

есть какие либо (биометрические)стандарты разметки лица которые несут в себе наибольшее кол-во информации? (не хочется придумывать свой велосипед)

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

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


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

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

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

вот это уже интереснее

http://www.visagetechnologies.com/products_sdk_vision-d.html

хотя похоже ограничения

The image should contain a face in frontal pose and with a neutral expression.

пробовал тут недавно FaceApi

http://www.seeingmachines.com/product/faceapi/

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

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

но всё равно это интересно и повод к размышлению.

Традиционный подход к распознаванию во многом основывается на использовании алгоритмов выделения контура. Считается, что контур является инвариантом при различных условиях освещения. В контексте биологического распознавания лиц, контурные (векторные) изображения обычно бывают достаточны для узнавания лиц. Карандашные наброски и карикатуры часто легко узнаваемы. Означает ли это, что высокочастотные пространственные образы критически важны, или хотя бы достаточны для распознавания лиц? Результаты исследований опровергают это. Конкретно для «векторных» рисунков показано, что изображения, которые содержат только контуры, плохо поддаются распознаванию (правильное распознавание в 47% векторных рисунков против 90% исходных фотографий)

забавно, т.е. получается, что биометрическая разметка несёт в себе еще меньше информации.

http://habrahabr.ru/post/136483

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


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

Есть задача, стоит мигающий диод, довольно яркий, моргает с разной частотой, ну то есть например зажегся на 0.3 сек или на 0.7. Как бы с потока видео достать это в виде текста например? Какие функции смотреть? Возможно ли такое реализовать в риал-тайме?

Пример- мигнул диод на 0.3 сек, записался с файл 0, мигнул подольше - еденичка. Ну и т.д.

Подскажите что почитать?

Ах да, еще момент распознования источника света в кадре - он не стационарен, возможны вибрации камеры и т.д.

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


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

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

1) Захватываете кадр.

2) Отсеиваете все точки с компонентами (RGB) яркости равными 255 (светодиод обычно дает засветку всех каналов).

(Можно сделать либо в цикле, покомпонентно, либо разбить по каналам (cvSplit) отсечь по порогу (cvThreshold), и результат объединить по "и".)

3) Ищите сумму ненулевых точек. (cvCountNonZero).

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

Ну а дальше думаю и сами сообразите.

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


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

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

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

еще можно ли со временем наращивать каскад, т.е. обучили на 10 фото посмотрели работает плохо, добавили в обучение еще 10 смотрим опять и так до насыщения.

еще вопрос, что считать лицом только область с кожей на фото или всё таки расширить эту область?

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

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


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

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

еще есть какие то работы о 3д модели из точек и что типа эта модель проецируется на 2д и накладывается на лицо, но там видимо все те же проблемы со схождением не в тот локальный максимум.

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

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


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

Нет, я в двух средах не делал.

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


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

Без GUI здесь:

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

с GUI не делал.

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×