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

Storm

Пользователи
  • Количество публикаций

    10
  • Зарегистрирован

  • Посещение

Все публикации пользователя Storm

  1. Тренировка каскадов Хаара

    Это мало для полного обучения каскада, но для хотя бы одной итерации обучения одной секции, суток более чем достаточно, как мне кажется. У меня обучение также стопорилось без каких-либо дополнительных сообщений (и висело так около недели на 3GHz). Я не понял в чём конкретно проблема, обходил увеличением базы изображений, изменением количества секций обучаемого каскада, изменением -minhitrate и -maxfalsealarm. Да, это накладно по времени Сейчас вот подумал, что может помочь уменьшение -weighttrimming. Потому что загрузка процессора в таких случаях если падает, то незначительно - программа продолжает что-то считать. Возможно, изменяя веса слишком сильно, программа перескакивает искомый минимум функции то в одном, то в другом направлении и получается если не бесконечный, то очень продолжительный цикл. А может кто-нибудь подскажет, что означает EXP. ERR в выводе haartraining? Вот в этом документе даётся такое пояснение: +----+----+-+---------+---------+---------+---------+ | N |%SMP|F| ST.THR | HR | FA | EXP. ERR| +----+----+-+---------+---------+---------+---------+ | 1|100%|-|-0.857040| 1.000000| 1.000000| 0.082075| +----+----+-+---------+---------+---------+---------+ | 2|100%|+|-1.702127| 1.000000| 1.000000| 0.102168| +----+----+-+---------+---------+---------+---------+ N The iteration number of feature selection training. %SMP The percentage of original samples left. F + indicates the feature is flipped. Related to -sym (default) option. ST.THR Stage threshold HR Hit rate FA False alarm rate. FYI: (HR, FA) = (1.0, 1.0) means the detector simply alarms every time for everything. EXP.ERR Expected (misclassification) error. Если имеется в виду частота ошибок второго рода, то почему это число не совпадает с (1 - HR)? Если это какие-то другие ошибки, то какие? Поискал там и тут, не получается найти еще какие-нибудь пояснения.
  2. Собственно первый вопрос: какой метод лучше подойдет для распознавания в кадре людей (в полный рост, с разных ракурсов)? Классификатор Хаара, HOG, или что-то еще?
  3. Тренировка каскадов Хаара

    Спасибо. Еще такой вопрос: возможна ли такая ситуация, что обучение каскада утилитой haartraining "зайдет в тупик" (например, заданы недостижимые вероятности для данного набора изображений или что-то вроде этого )? И, если такое возможно, сообщит ли программа об этом? Просто обучение вот с такими параметрами opencv_haartraining \ -data classifier2\ -vec vecfile\ -bg negatives.txt\ -npos 2032\ -nneg 7650\ -nstages 12\ -nsplits 2\ -mem 4096\ -nonsym\ -minhitrate 0.999900\ -maxfalsealarm 0.300000\ -weighttrimming 0.950000\ -mode ALL\ -w 12\ -h 24 выполняется уже порядка недели на достаточно мощной машине, а этап обучения не меняется. Подозреваю, что 0,3 - слишком мало. При этом процессор загружен на 100%, т.е. программа видимо что-то делает.
  4. Тренировка каскадов Хаара

    Господа, никто не поделится ссылкой на материал, где можно было бы поподробнее ознакомится с алгоритмом самого обучения каскада? Хочу понять что делает haartrainig с картинками, которые мы ей даем. То, что до сих пор встречалось описывает больше как подготовить изображения, какие указать параметры командной строки, а хотелось бы узнать как само обучение происходит. Как я понимаю, это похоже на обучение нейронной сети?
  5. OpenCV и видеофайлы

    Наверняка у кого-нибудь есть опыт использования OpenCV под Linux? Вопрос вот в чем: После установки (с ней вроде все нормально) компилирую пример lkdemo. Картинка с камеры отображается, точки находятся. Исходник предусматривает возможность получать видео не только с камеры, но и из файла, для этого надо имя файла передать аргументом командной строки. Здесь и возникает проблема: Проявляется при OpenCV 2.1 и 2.2. Ранее под Windows с OCV 2.1 чтение из того же файла работало. Формат видео - MJPG. Наткнулся вот на эту страницу. Правильно ли я понял, что проблема связана с ffmpeg? Пакет ffmpeg уже был установлен в системе на момент установки OpenCV. Из параметров при установке OCV указывал только WITH_QT=ON. Может быть еще какие-нибудь пакеты нужны? Дистрибутив openSUSE 11.2.
  6. OpenCV и видеофайлы

    Поставил пакет libffmpeg-devel, cmake после этого показывал, что нашел ffmpeg (там единицы стояли, где раньше были нули). Но make не мог собрать libhighgui.so, жаловался, что у /lib/libbz2.so.1 неправильный формат файла и его не удается прочитать. После этого я решил еще раз поискать уже собранный пакет здесь (почему-то был уверен, что уже искал, но ничего не нашел). На этот раз нашлось достаточно много, поставил opencv-devel. В целом вроде заработало. lkdemo теперь может получать видео и с камеры и из файла, но в терминал валятся чьи-то сообщения при чтении файла вот такие: и повторяются, пока программа работает. При работе с камерой вот такие (выводятся в начале работы один раз):
  7. OpenCV и видеофайлы

    Хорошо, я отпишу, если добьюсь чего-нибудь.
  8. OpenCV и видеофайлы

    А не подскажете где можно посмотреть более подробную и актуальную информацию о том как это сделать? Вот здесь, например, вопрос поднимается, но в той версии OCV используется конфигурационный скрипт. Ни в 2.1, ни в 2.2 мне не удалось его найти, а в руководстве по установке соответствующий параметр cmake не упоминается.
  9. Здравствуйте. В процессе изучения OpenCV попробовал запустить программу, которая читает один файл и пишет в другой. Её код: #include "stdafx.h" #include "highgui.h" #include "cv.h" int main(int argc, char** argv[]) { CvCapture* capture = cvCreateFileCapture("f.avi"); if( !capture ) { return -1; } IplImage* bgr_frame = cvQueryFrame( capture ); double fps = cvGetCaptureProperty( capture, CV_CAP_PROP_FPS); CvSize size = cvSize((int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH), (int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT)); CvVideoWriter* writer = cvCreateVideoWriter("1.avi", CV_FOURCC('M','J','P','G'), fps, size); IplImage* logpolar_frame = cvCreateImage( size, IPL_DEPTH_8U, 3); while( (bgr_frame=cvQueryFrame(capture)) != NULL ) { cvLogPolar( bgr_frame, logpolar_frame, cvPoint2D32f(bgr_frame->width/2, bgr_frame->height/2), 40, CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS ); cvWriteFrame( writer, logpolar_frame ); } cvReleaseVideoWriter( &writer ); cvReleaseImage( &logpolar_frame ); cvReleaseCapture( &capture ); return(0); } Компилируется без ошибок. Но на стадии выполнения на инструкции cvWriteFrame( writer, logpolar_frame ) появляется исключение Как по-вашему в чем может быть дело? Кодеки в системе установлены, сомневаюсь, что причина в них, т.к. пример с простым выводом видео в окно работает нормально. Вызов cvLogPolar тоже исключал, cvWriteFrame( writer, bgr_frame ) в этом случае приводит точно к тому же исключению.
  10. Да, действительно, fps и size были равны 0. Но программу из первого поста мне так и не удалось заставить работать Однако работает немного другая: // // Программа получает видео с камеры и записывает в avi файл // #include "stdafx.h" #include "cv.h" #include "highgui.h" #include "stdio.h" int main(int argc, char* argv[]) { cvNamedWindow("capture"); // получаем любую подключённую камеру CvCapture *capture = cvCreateCameraCapture(CV_CAP_ANY); assert(capture!=0); const char *filename = "capture.avi"; // частота кадров double fps = 10; // размер картинки CvSize size = cvSize(640, 480); CvVideoWriter *writer = cvCreateVideoWriter(filename, CV_FOURCC('X','V','I','D'), fps, size, 1); assert(writer!=0); IplImage *frame = 0; //int abc = 1; //bool er2 = true; //char ame3 = 'c'; //IplImage *frame1 = 0; bool flag = true; while(flag) { // получаем кадр frame = cvQueryFrame( capture ); cvFlip(frame,frame,0); // сохраняем в файл cvWriteFrame(writer, frame); char c = cvWaitKey(33); switch (c) { case 27: // если нажата ESC - выходим flag = false; break; default: break; } // показываем cvShowImage("capture", frame); } // освобождаем ресурсы cvReleaseCapture( &capture ); cvReleaseVideoWriter(&writer); cvDestroyWindow("capture"); return 0; } Не могу понять: почему если раскомментировать любую из строк //int abc = 1; //bool er2 = true; //char ame3 = 'c'; //IplImage *frame1 = 0; программа начинает падать. Причем если закомментировать cvWriteFrame(writer, frame); исключения уже не появляются. Как объявление переменных, которые нигде потом и не используются, может приводить к таким последствиям?
×