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

Трекинг объектов.

Recommended Posts

с какой версии блобтрэк? раньше помоему простой был всего лишь по цвету.

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

мы нашли нос и руку

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

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


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

http://experienceopencv.blogspot.com/2011/03/blob-tracking-video-surveillance-demo.html

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

вот тут более менее описаны параметры, за остальным надо либо смотреть комментарии в коде(аля "Adaptive background mixture models for real-time tracking. CVPR1999" ) и гуглить по названиям алгоритмов и пейперов.

ну и крутить параметры-экспериментировать.

http://graphics.cs.msu.ru/en/science/research/machinelearning/hough

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

The original annotations provided include only the pedestrians occluded by no more than 50%. As we were interested in the performance of the method under significant overlap, we reannotated the data by marking all pedestrians whose head and at least one leg were clearly visible.

возможно стоит погуглить на тему pedestrian detection\people detection

вот тут вроде есть программа http://www.vision.ee.ethz.ch/~bleibe/code/ism.html

по этим материалам

http://www.vision.ee.ethz.ch/~bleibe/papers/pubs.html

видимо есть еще вариант загорожденного за человека не считать

PennPed00015_1.png

вот еще какой то проект, но вроде не особо интересный.

http://code.google.com/p/opencv-feature-tracker/

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


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

тааак уже ближе, большое спасибо, буду прорабатывать всю литературу +

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

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

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


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

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

http://www.vision.ee.ethz.ch/~bleibe/papers/leibe-interleaved-ijcv07final.pdf

про стандартный HOG

http://www.cs.brown.edu/courses/cs143/proj4/papers/dalal_triggs_cvpr_2005.pdf

и еще

http://www.mmp.rwth-aachen.de/publications/pdf/breitenstein-detectorconfidencefilter-iccv09.pdf

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


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

читаю...

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

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

1) grab_cut алгоритм сегментации служащий для выделения одинаковых областей. недостаток в том. что у человека рубашка одного цвета а волосы другого

2) HOG или гистограммы градиента, к сожалению у меня нет примера кода который реализовывал бы это

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

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

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

1) медленные

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

ПОЭТОМУ

давайте про hog поговорим. Я думаю это реальный способ разрешить проблему трекинга. по этой ссылке я увидел что оказывается в opencv все реализовано уже для того чтобы быстро присобачить этот метод в программу. даже класс есть

HOGDescriptor hog;

hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());

http://stackoverflow.com/questions/10769519/hog-object-detection-opencv

еще коды нужны или инфа где прочитать про реализацию hog в opencv

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


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

p.s.

насчет блобов ВЕЛИКОЛЕПНО написано в E:\OpenCV2.1\doc\vidsurv (на всяк случай прикрепляю сюда)

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

А вот и код HOG отлично !!! "ларчик просто открывался..."

https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/peopledetect.cpp?rev=2314

Blob_Tracking_Modules.doc

Blob_Tracking_Tests.doc

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


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

Кто нибудь пытался обучать HOG-детектор?

Процедура в предыдущей ссылке описана:

Шаг 1) Подготовить изображения объектов, которые хотим искать (положительные образцы).

Также нужно подготовить изображения на которых нет объектов интереса (отрицательные образцы)

Шаг 2) Найти HOG-признаки образцов и обучить SVM классификатор (который так-же есть в OpenCV)

Шаг 3) Использовать коэффициенты обученной SVM-ки в методе HOGDescriptor::setSVMDetector().

Вопрос - кто-нибудь это пробовал?

Что там с точностью получается?

Если никто не пробовал, то сам попробую :)

UPD: Еще бумажку подкину http://limin81.cn/li_omega_camera_ready.pdf

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

Снабдил описанием, того что понял.

#include "opencv2/core/gpumat.hpp"
#include "opencv2/core/opengl_interop.hpp"
#include "opencv2/gpu/gpu.hpp"
#include "opencv2/ml/ml.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/contrib/contrib.hpp"
#include "opencv2/video/tracking.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/objdetect/objdetect.hpp"
using namespace std;
using namespace cv;
using namespace cv::gpu;

// -----------------------------------------------------------------
// MAIN
// -----------------------------------------------------------------
// http://experienceopencv.blogspot.com/2011/02/hog-descriptor.html
// Каждый вектор признаков вычисляется по содержимому скользящего по
// изображению окна размером 64x128 пикселей (128 высота 64 ширина - пропорции объекта).
// Каждый элемент вектора, это гистограмма ориентаций градиентов (9 столбцов в интервале 0-180 градусов,
// направления с разными знаками, считаются совпадающими).
// Гистограмма собирается в ячейке 8x8 пикселей.
// Контрастность нормализуется локально по блокам 2x2 ячейки (16x16 пикселей).
// Нормализация является важным этапом.
// Блок перемещается шагами по 8-пикселей (половина размера блока).
// Соответственно каждая ячейка учитывается в 4 различных блоках.
// В качестве классификатора применяется машина опрных векторов (SVM) с линейным ядром .
// Выходом обучнной SVM является множество коэффициентов для каждого элемента вектора признаков.

// 'hitThreshold' аргумент должен быть отрицательным.
// 'winStride' аргумент (по умолчанию 8x8) - как окно сканирует входное изображение (шаг по x и y).
// detectMultiScale() аргумент
// 'groupThreshold' передается в cv::groupRectangles() API - non-Max-Suppression?
// 'scale0' controls how much down-sampling is performed on the input image before calling 'detect()'.
// It is repeated for 'nlevels' number of times. Default is 64. All levels could be done in parallel.


// Описание алгоритма и таблица параметров для различных типов объектов приведена в документе:
// http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2006/slides/dalal.pdf

int main(int argc, char * argv[])
{
vector <float> desc;
Mat img;
setlocale(LC_ALL, "Russian");
// Читаем изображение
img = imread("C:\\ImagesForTest\\lena.jpg",0);
namedWindow("Image",CV_WINDOW_KEEPRATIO | CV_WINDOW_AUTOSIZE);
imshow("Image", img);

// ---------------------------------------------
//Вычислим дескрипторы
// ---------------------------------------------
// параметры - см. выше
Size winSize(64,128);
Size blockSize(16,16);
Size blockStride(8,8);
Size cellSize(8,8);

int nbins=9;
int derivAperture=1;
double winSigma=-1;
int histogramNormType=cv::HOGDescriptor::L2Hys;
double L2HysThreshold=0.2;
bool gammaCorrection=true;
int nlevels=cv::HOGDescriptor::DEFAULT_NLEVELS;
// Соорудили экземпляр класса с описанием дескрипторов
cv::HOGDescriptor HD(winSize,
blockSize,
blockStride,
cellSize,
nbins,
derivAperture,
winSigma,
histogramNormType,
L2HysThreshold,
gammaCorrection,
nlevels);
// Посчитали дескрипторы изображения
HD.compute(img,desc,Size(8,8),Size(0,0)); // шаг 8 по x и 8 по y ; отступ 0 по x и 0 по y
// Дескрипторы размером HD.getDescriptorSize() теперь хранятся в переменной desc
cout <<"Размер дескриптора:"<< HD.getDescriptorSize()<< endl;

// размер дескриптора вычисляется так:
//DescSize=(size_t)nbins*
//(blockSize.width/cellSize.width)*
//(blockSize.height/cellSize.height)*
//((winSize.width - blockSize.width)/blockStride.width + 1)*
//((winSize.height - blockSize.height)/blockStride.height + 1);




cout <<"Всего дескрипторов:"<< desc.size()/HD.getDescriptorSize() << endl;

desc.clear();
waitKey(0);
return 0;
}[/code]

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


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

Smorodov, все необходимые программы и действия также описаны вот по этой ссылке

http://szproxy.blogspot.com/2010/12/testtest.html

там есть ссылка на какую то обучающую программку svm_light.

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

64x128 пикселей (128 высота 64 ширина - пропорции объекта).

Как Вы считаете сколько надо фотографий и какого размера они должны быть?

  • Like 2

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


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

Спасибо, за обучалку, поковыряю на досуге.

По поводу пропорций и др. параметров в листинге выше есть ссылка, а по ссылке открывается документ, в котором есть интересная таблица :)

http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2006/slides/dalal.pdf

post-1-0-86398800-1341420479_thumb.png

По этим данным можно заключить, что при обучении HOG детектора без бубна или кроссвалидации не обойтись. Если с размерами окна (характерные пропорции объекта, стороны кратны 8 (или значению blockStride), конкретный размер определяется мощностью компа (см. размер дескриптора выше в листинге)) - более менее понятно, то с другими параметрами все не так очевидно.

Количество фотографий - чем больше, тем лучше. Обычно от несколькх сотен, до пары тысяч.

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


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

я так и не понял, как решается проблема с размером окна, объекты как бы разного размера же, или там окно одно и то же, а просто картинка сжимается т.е. ищется на разных масштабах?

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


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

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

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

Для поиска объектов разных размеров, меняется масштаб изображения.

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


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

Уважаемые форумчане, мне кажется в моей проблеме трекинга голов я повернул тему не в то русло. Пообщавшись с автором сайта http://recog.ru/ , видеоаналитиком и просто хорошим человеком Александром Кручининым, хотелось бы вставить его цитату:

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

Таким образом по сути я возвращаюсь к анализу темы http://www.compvision.ru/forum/index.php?showtopic=630&st=0 созданную пользователем ale-ivan

Сейчас опробовав следующий фильтры tophat и blackhat (спасибо теме http://www.compvision.ru/forum/index.php?showtopic=411&view=findpost&p=2270)

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

Вопрос к Smorodov :

Cмотрели демо retinaDemo.cpp, которое появилось в новой версии opencv?

Сайт проекта с картинками здесь: https://sites.google.com/site/benoitalexandrevision/demonstrations

И еще, может быть оптический поток использовать?

я открыл сайт но у меня из картинок только часть открывается! Вы можете вкратце объяснить в чем суть retinaDemo ?

Приложение: мой код


		cvCopy(colourImage,segment_picture,mask);

			cvShowImage("segment_picture",segment_picture);



// 			cvZero(greyImage);

// 			cvConvertImage(segment_picture,greyImage);


		cvMorphologyEx(segment_picture, tophat, Temp, Kern, CV_MOP_TOPHAT, iterations);

		cvMorphologyEx(segment_picture, blackhat, Temp, Kern, CV_MOP_BLACKHAT, iterations);


			//cvMorphologyEx(colourImage, tophat, Temp, Kern, CV_MOP_TOPHAT, iterations);

			//cvMorphologyEx(colourImage, blackhat, Temp, Kern, CV_MOP_BLACKHAT, iterations);




		cvShowImage("CV_MOP_TOPHAT", tophat);

		cvShowImage("CV_MOP_BLACKHAT", blackhat);

		//CV_SWAP(tophat,blackhat,difference);

		cvZero(greyImage);

		//cvConvertImage(tophat,greyImage);

		cvConvertImage(segment_picture,greyImage);

		cvCanny(greyImage,greyImage,50,100);

/*

		for (unsigned char *ib = (unsigned char *)greyImage->imageData, *stopb = (unsigned char *)(greyImage->imageData + greyImage->imageSize); ib != stopb; ++ib)

		{

			*ib = 255- *ib;

		}*/

		cvShowImage("invert", greyImage);




		{


			CvMemStorage *storage = cvCreateMemStorage(0);

			CvContourScanner cs = cvStartFindContours(greyImage, storage, sizeof(CvContour), CV_RETR_LIST , CV_CHAIN_APPROX_NONE);


			CvSeq *mContour = 0;

			for (CvSeq *contour = cvFindNextContour(cs); contour; contour = cvFindNextContour(cs))

			{

				if (contour->total >= 400)

				{

					CvBox2D box = cvFitEllipse2(contour);

					CvPoint center = cvPointFrom32f(box.center);

					CvSize size = cvSize(cvRound(box.size.width * 0.5), cvRound(box.size.height * 0.5));

					cvEllipse(colourImage, center, size, -box.angle, 0, 360, CV_RGB(0, 0, 255), 2, CV_AA, 0);

				}

			}

post-4978-0-53744300-1341833652_thumb.jp

post-4978-0-09915900-1341833658_thumb.jp

post-4978-0-29973200-1341833663_thumb.jp

post-4978-0-55284900-1341833668_thumb.jp

post-4978-0-73932000-1341833672_thumb.jp

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


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

С retina demo играл давно, помню что после применения алгоритма, улучшается детализация изображения и подсвечивается область движения.

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

http://www.ivpe.com/freak.htm

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


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

что если

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

(хотя прически\шляпы понятное дело не всё испортят)

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


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

что если

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

(хотя прически\шляпы понятное дело не всё испортят)

окей, мне нравится этот план! По поводу сегментации по цвету - можете сказать какой функцией это делатЬ?)

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


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

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

на каждом слое я нахожу контуры и выделяю их на моем основном изображении - colour image . Картинки я прикрепляю.

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

или

Как по цвету сделать? какой функцией?

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

	cvConvertImage(segment_picture,greyImage);


			for(int thresh=5;thresh<255;thresh+=3)

			{

			cvThreshold(greyImage,mask2,thresh,255,CV_THRESH_BINARY);

			cvThreshold(greyImage,mask1,thresh-3,255,CV_THRESH_BINARY);

			cvAbsDiff(mask2,mask1,mask3);

			//cvAnd(mask1,mask2,mask3);

			cvShowImage("mask",mask);


		{


				CvMemStorage *storage = cvCreateMemStorage(0);

				CvContourScanner cs = cvStartFindContours(mask3, storage, sizeof(CvContour), CV_RETR_LIST , CV_CHAIN_APPROX_NONE);

				CvSeq *mContour = 0;

				for (CvSeq *contour = cvFindNextContour(cs); contour; contour = cvFindNextContour(cs))

				{

					if (contour->total >=400 &&contour->total <= 4000)

					{

						CvBox2D box = cvFitEllipse2(contour);

						CvPoint center = cvPointFrom32f(box.center);

						CvSize size = cvSize(cvRound(box.size.width * 0.5), cvRound(box.size.height * 0.5));

						cvEllipse(colourImage, center, size, -box.angle, 0, 360, CV_RGB(0, 0, 255), 2, CV_AA, 0);

					}

				}


				cvEndFindContours(&cs);

				cvReleaseMemStorage(&storage);

			}

// 			cvShowImage("thresh",mask3);

// 			cvWaitKey(1);

			}





		cvShowImage("result", colourImage);

post-4978-0-92182500-1341920067_thumb.jp

post-4978-0-93287400-1341920071_thumb.jp

post-4978-0-06435400-1341920076_thumb.jp

post-4978-0-93430200-1341920079_thumb.jp

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


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

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

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


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

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

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

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

void cvWatershed(

    const CvArr* image,

    CvArr* markers

);
коврик контрастный не всегда есть возможность положить) код
cvConvertImage(segment_picture,greyImage);



			cvCanny(greyImage,mask3,10,200,3);

			cvShowImage("canny",mask3);

		{


				CvMemStorage *storage = cvCreateMemStorage(0);

				CvContourScanner cs = cvStartFindContours(mask3, storage, sizeof(CvContour), CV_RETR_TREE , CV_CHAIN_APPROX_SIMPLE);

				CvSeq *mContour = 0;

				for (CvSeq *contour = cvFindNextContour(cs); contour; contour = cvFindNextContour(cs))

				{

					if (cvContourArea(contour)>600 )

					{

						double area = fabs(cvContourArea(contour));

						double perim = cvContourPerimeter(contour);


						// 1/4*CV_PI = 0,079577

						if ( area / (perim * perim) > 0.06 && area / (perim * perim)< 0.1 ){ 

							// нарисуем контур

							cvDrawContours(colourImage,contour, CV_RGB(255,216,0), CV_RGB(0,0,250),10,2,8);

						}


						//cvShowImage("222",frame);

						//cvWaitKey(0); 

					}

				}


				cvEndFindContours(&cs);

				cvReleaseMemStorage(&storage);

			}

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


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

Вот примитивный детектор симметрии состряпал(чтобы было понятно что я имел ввиду):

(порядок изображений: исходное, грани, результат)

post-1-0-75017800-1341937014_thumb.png

(порядок изображений: исходное, результат, грани)

post-1-0-14420800-1341937247_thumb.png

Исходник:

SymmetryDetector.cpp

Вот что для вашего случая получается (немного поправил исходник, алгоритм нуждается в серъезном допиливании (например прикрутить направления градиентов), но вроде все не безнадежно):

SymmetryDetector2.cpp

post-1-0-36022200-1341938412_thumb.png

Считает долго, но хорошо распараллеливается и на GPU думаю в реалтайме пойдет.

Также существенное ускорение (на CPU) даст утоньшение границ.

PS: Тут еще методы намного круче но, я правда пока не осилил :) : Computational Symmetry in Computer Vision and Computer Graphics

  • Like 1

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


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

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

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

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

про сегментацию с обучением

http://www.compvision.ru/forum/index.php?showtopic=861&view=findpost&p=6146

http://splab.cz/en/research/data-mining/articles/trainable-segmentation

http://www.vision.caltech.edu/marco/archive/ClusteringPage.html

есть программа

  • Like 1

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


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

еще по поиску частей людей

http://groups.inf.ed.ac.uk/calvin/calvin_upperbody_detector/

вот тут стоит обратить внимание

http://www.cs.utexas.edu/~grauman/courses/fall2011/schedule.html

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


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

даже есть онлайн демо, но всё таки наверно для детектора это скорее роскошь, чем необходимость.

http://www.vision.ee.ethz.ch/~hpedemo/

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

еще о pose estimation с кодом

http://phoenix.ics.uci.edu/software/pose/

http://www.robots.ox.ac.uk/~vgg/data/stickmen/

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


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

вот это пробую ! :thumbsu:

насчет симметрии тоже не очень понимаю - просто по сути edges становится выделеннее чем оriginal. но явного выделения головы все равно не происходит.

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

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


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

Ну тогда уж и это: http://www.compvision.ru/forum/index.php?showtopic=821

Простой детектор симметрии чувствителен к помехам, сложный не делал.

Детектор должен выделять оси симметрии.

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

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

И человек тоже, ориентируется на этот признак, а не только на цвет.

Есть еще один параметр, по которому можно фильтровать - это размер (пропорции описанного эллипса).

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

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

От простого к сложному.

  • Like 2

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×