Aldaris 0 Жалоба Опубликовано September 26, 2009 В бете версии 1.20, добавили HOG для детекта людей, но вот беда ругается при попытке получить параметры для SVM. cv::HOGDescriptor::getDefaultPeopleDetector() вызывает внутреннюю ошибку в памяти. У всех так? Кто-нибудь уже копал? При этом Emgu уже состряпала реализацию, и у них работает. П.С. Видимо придётся сорцы править Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано September 27, 2009 В бете версии 1.20, добавили HOG для детекта людей, но вот беда ругается при попытке получить параметры для SVM. cv::HOGDescriptor::getDefaultPeopleDetector() вызывает внутреннюю ошибку в памяти. У всех так? Кто-нибудь уже копал? При этом Emgu уже состряпала реализацию, и у них работает. П.С. Видимо придётся сорцы править Не надо сорцы трогать , в папке с примерами есть peopledetect.cpp и exe - шник и все работает. #include "cvaux.h" #include "highgui.h" int main(int argc, char** argv) { cv::Mat img; if( argc > 1 ) img = cv::imread(argv[1]); if( !img.data ) { fprintf( stderr, argc == 1 ? "ERROR: no image was specified\n" : "ERROR: the specified image could not be loaded\n"); fprintf( stderr, "Usage: peopledetect <inputimage>\n" ); return -1; } cv::HOGDescriptor hog; hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector()); cv::vector<cv::Rect> found; double t = (double)cv::getTickCount(); // run the detector with default parameters. to get a higher hit-rate // (and more false alarms, respectively), decrease the hitThreshold and // groupThreshold (set groupThreshold to 0 to turn off the grouping completely). hog.detectMultiScale(img, found, 0, cv::Size(8,8), cv::Size(24,16), 1.05, 2); t = (double)cv::getTickCount() - t; printf("Detection time = %gms\n", t*1000./cv::getTickFrequency()); for( int i = 0; i < (int)found.size(); i++ ) { cv::Rect r = found[i]; // the HOG detector returns slightly larger rectangles than the real objects. // so we slightly shrink the rectangles to get a nicer output. r.x += cvRound(r.width*0.1); r.y += cvRound(r.height*0.1); r.width = cvRound(r.width*0.8); r.height = cvRound(r.height*0.8); cv::rectangle(img, r.tl(), r.br(), cv::Scalar(0,255,0), 1); } cv::namedWindow("people detector", 1); cv::imshow("people detector", img); cv::waitKey(0); return 0; }[/code] Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Aldaris 0 Жалоба Опубликовано September 27, 2009 Оказалась знакомая ошибка, в дебаге не работает, в релизе всё ок, ошибка в _HAS_ITERATOR_DEBUGGING, косяки студии, опенцв не причём,.... ну почти, Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RinOS 16 Жалоба Опубликовано March 3, 2010 Что то я даже не понял как peopledetect работает... Запустил peopledetect.exe с параметром, (передал картинку с изображением человека) peopledetect задумался на секунду и просто показал мне эту картинку... Что я не так делал? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Wildcat 2 Жалоба Опубликовано June 2, 2011 А может кто знает, как можно обучить свой детектор и встроить его вместо cv::HOGDescriptor::getDefaultPeopleDetector()? Делать это хочу в openCv 2.2 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано June 2, 2011 Теоретически: 1. создать обучающую выборку изображений, вычислить для них HOG дескрипторы (HOGDescriptor::compute); 2. обучить SMV (CvSVM::train) и сохранить результаты обучения в виде массива float; 3. загрузить результаты обучения HOGDescriptor::setSVMDetector Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Wildcat 2 Жалоба Опубликовано June 2, 2011 Говорят (точнее пишут) на многих форумах, что формат svm классификатора получаемого при CvSVM::train оказывается несовместим с форматом, классификатора нужным при загрузке в HOG дескриптор. Ну на самом деле не попробуешь не узнаешь Буду делать, а там если что хорошее получится - напишу. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано June 2, 2011 Довольно популярная библиотека - SMV-lite. Её использовали авторы статьи "Histograms of Oriented Gradients for Human Detection" Navneet Dalal and Bill Triggs Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах