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

count0

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

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

  • Посещение

Сообщения, опубликованные пользователем count0


  1. А в новой версии opencv нет реализации hmm?
    Нашёл реализации LBPH и SVM, там вообще модель в 3 строки инициализируется, в 2 - сохраняется-загружается. Но HMM показывает самые лучшие результаты. 

    Гоняю сейчас на выборке в 300 человек, по 3 фото. И модель строится долговато, минуты 3. Ей бы загрузку-сохранение допилить - будет красота. 

     


  2. Где-то в коде загрузки, или сохранения модели закрался косячек. 

    Сохранять сохраняет, грузит, но потом при ComputeLikeHood вываливается в segfault после 1го сравнения. Причем значение выдает правильное, как при обычном обучении. Сообщение об ошибке в opencv_legacy, а в какой функции - не говорит. Куда копать - пока не знаю. 

    Опытным путем установлено, что ошибка возникает тут: cvEstimateObsProb( info, &tmplEhmm ); // Here!!
    Однако, если эту строку закомментировать, она всё равно вывалится. Значит, cvEViterbi( info, &tmplEhmm ); работает некорректно. Что-то в загруженной модели не так. 
    Накосячить я мог только в одном месте - размере vecSize, который передается HMM_Save при сохранении. Пробовал значения vecSizeM = NO_DCT_COEFF_X * NO_DCT_COEFF_Y - 1; Без -1. Просто от балды. Не работает. 

    Кто-нибудь делал загрузку и сохранение модели?


  3. Господа, пример с HMM грешит утечками, как чиновник взятками.

    Часть вроде поправил, сейчас бьюсь с этим куском:

    // Рассчитываем, сколько нужно произвести ДКП (DCT)
            noObs.width = ( img->width - dctSize.width + stepSize.width ) / stepSize.width;
        noObs.height = ( img->height - dctSize.height + stepSize.height ) / stepSize.height;
    
             info = cvCreateObsInfo( noObs, obsVecLen ); <<--- Большая, жирная утечка. По мегабайту-двум за 1 выполнение.
             assert( info != 0 );

     

    И далее:

    if( SUPPRESS_INTESITY )
        {
            float *observations = new float[ noObs.height * noObs.width * ( obsVecLen + 1 ) ];
            cvImgToObs_DCT( img, observations, dctSize, noDCTCoeff, stepSize );
            ExtractDCT( observations, info->obs, noObs.height * noObs.width, obsVecLen ); <<---  Маленькая утечка, по 0.5 Мб за проход.
            if ( observations )
            {
                delete( observations);
            }
        }
        else
        {
            cvImgToObs_DCT( img, info->obs, dctSize, noDCTCoeff, stepSize );
        }
        cvEstimateObsProb( info, &tmplEhmm );


    Добавил в конце функции распознавания (после return)

    cvReleaseObsInfo(&info);
    delete info;

    Не помогло особо. Есть мысли? Версия опенцв 1я вроде.

    -----------------------

    P. S. Вроде нашёл как правильно память чистить.

    В конце Compute...:

      float temp;
            temp=cvEViterbi( info, &tmplEhmm );
            cvReleaseObsInfo(&info);
            delete info;
        return temp;

    Теперь память не утекает.


  4. Топикстартер, а логи кто выкладывать будет?

    dmesg, cat /var/log/syslog ?

    Что пишет в момент слетания камеры. Пришли бы на ночь поставили, и смотрели по удаленке.

    У меня похожая Logitech снимала в 1280 круглосуточно в паре с ZoneMinder на openSUSE 11.4, если память не изменяет. "Ни единого разрыва". Может ядро хреновое, поставьте постарее. В убунтах оно через раз. То сеть отвалится, то ещё какая железяка на ноуте. Хотя вроде 14.04, стабильный релиз... Поэтому без нужды его вообще не обновляю.
     

×