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

Распознавание лиц HMM (Скрытые марковские модели)

Recommended Posts

Я не знаю как в SVN версии, но в 2.0 и 2.1 это открытая проблема, о которой уже известно разработчикам:

http://sourceforge.net/tracker/index.php?f...amp;atid=376677

Попробую построить SVN версию, и проверю, осталась-ли ошибка.

В версии с SVN программа работает. В октябре должен выйти релиз.

HMM_svn.RAR

Для компиляции в C++ Builder 6 , нужно переписать с заменой, директории modules и include в папке с opencv.

DLL и LIB файлы в архиве.

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


Ссылка на сообщение
Поделиться на других сайтах
В версии с SVN программа работает. В октябре должен выйти релиз.

HMM_svn.RAR

Для компиляции в C++ Builder 6 , нужно переписать с заменой, директории modules и include в папке с opencv.

DLL и LIB файлы в архиве.

Большое спасибо за высокую оценку ответить, я буду стараться, и пусть вы знаете,

Еще раз спасибо

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


Ссылка на сообщение
Поделиться на других сайтах
Большое спасибо за высокую оценку ответить, я буду стараться, и пусть вы знаете,

Еще раз спасибо

дорогой Smorodov

Большое спасибо за Вашу помощь, я попытался OpenCV2.1, но я до сих пор вопрос

с

CV_Assert (src.type () == dst.type () и и src.size () == dst.size ());

Сообщение об ошибке "Ошибка утверждение удалось не могли бы вы советы мне в этом

вопрос

заранее спасибо

Хамам

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


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

Please write in English better :D

You have to use SVN version (https://code.ros.org/svn/opencv/trunk/opencv) of OpenCV, and if you use Borland C++ Builder, just replace some files I wrote above.

There is a bug in 2.1, thats why you can't compile it in this version.

If you use SVN version, just trace code (F8 in BCB6) and try to catch line that throw this exception, this exception mean that some function must get source and destination images of same size, but the sizes is not equal. It may be function like cvCopy, cvConvert or something like this.

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


Ссылка на сообщение
Поделиться на других сайтах
Please write in English better :D

You have to use SVN version (https://code.ros.org/svn/opencv/trunk/opencv) of OpenCV, and if you use Borland C++ Builder, just replace some files I wrote above.

There is a bug in 2.1, thats why you can't compile it in this version.

If you use SVN version, just trace code (F8 in BCB6) and try to catch line that throw this exception, this exception mean that some function must get source and destination images of same size, but the sizes is not equal. It may be function like cvCopy, cvConvert or something like this.

Dear Sir

First of all sorry for my poor Russian but i thought it is more respectful to write in your language. thanks a lot for your highly appreciated reply and support....

the problem is as following i downloaded the latest version of opencv (2.1) VC++ (VS08) in order to wrap it with your code but i stuck with an issue

CV_Assert( src.type() == dst.type() && src.size() == dst.size() ); "Assertion failed " because of the function CVExp called by cvEstimateObsProb in the training phase, for that reason i commented out this line and compile the opencv again the code looked as working fine but i faced an issue in the recognition part which is all the likelihood values of the five trained faces "Sergy , vldimir ,....." are negative value when they compared with any tested image.

regards and sorry for disturbance

thanks in advance

Hamam

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


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

First of all sorry for my poor Russian but i thought it is more respectful to write in your language. thanks a lot for your highly appreciated reply and support....

the problem is as following i downloaded the latest version of opencv (2.1) VC++ (VS08) in order to wrap it with your code but i stuck with an issue

CV_Assert( src.type() == dst.type() && src.size() == dst.size() ); "Assertion failed " because of the function CVExp called by cvEstimateObsProb in the training phase, for that reason i commented out this line and compile the opencv again the code looked as working fine but i faced an issue in the recognition part which is all the likelihood values of the five trained faces "Sergy , vldimir ,....." are negative value when they compared with any tested image.

regards and sorry for disturbance

thanks in advance

Hamam

I see that you dowload your version not from svn. To get latest version you need to use any svn client program, TortoiseSVN for example.

Path for download svn version of opencv: https://code.ros.org/svn/opencv/trunk/opencv

Just make a folder then right-click on it and select "SVN update", then input address I put a line above.

Dowload sources, build configuration with cmake, and then build binaries of opencv with MSVC2008.

If you want use it with BCB6 you must convert your libraries using borland tool COFF2OMF.

Some headers must be corrected to compile with bcb.

PS: You can use these lib's and dll's I post above and headers from the same archive too. That is enough for program compilation.

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


Ссылка на сообщение
Поделиться на других сайтах
I see that you dowload your version not from svn. To get latest version you need to use any svn client program, TortoiseSVN for example.

Path for download svn version of opencv: https://code.ros.org/svn/opencv/trunk/opencv

Just make a folder then right-click on it and select "SVN update", then input address I put a line above.

Dowload sources, build configuration with cmake, and then build binaries of opencv with MSVC2008.

If you want use it with BCB6 you must convert your libraries using borland tool COFF2OMF.

Some headers must be corrected to compile with bcb.

PS: You can use these lib's and dll's I post above and headers from the same archive too. That is enough for program compilation.

thanks a lot for your support, it is working after your amazing comments

10000000000000000000000 thanks

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


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

Ребята, объясните пожалуйста - у меня в начале выдает:

ERROR: Could not load classifier cascade

тут я так прописал:

const char* cascade_name =

"--cascade=C:\Program Files\OpenCV2.1\data\haarcascades\haarcascade_frontalface_alt.xml";

Подскажите пожалуйста, что нужно делать?

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


Ссылка на сообщение
Поделиться на других сайтах
Ребята, объясните пожалуйста - у меня в начале выдает:

ERROR: Could not load classifier cascade

тут я так прописал:

const char* cascade_name =

"--cascade=C:\Program Files\OpenCV2.1\data\haarcascades\haarcascade_frontalface_alt.xml";

Подскажите пожалуйста, что нужно делать?

cascade_name ="C:\Program Files\OpenCV2.1\data\haarcascades\haarcascade_frontalface_alt.xml"

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


Ссылка на сообщение
Поделиться на других сайтах
cascade_name ="C:\Program Files\OpenCV2.1\data\haarcascades\haarcascade_frontalface_alt.xml"

Спасибо, что ответил, но также выдается:

Could not load classifier cascade

Вот по коду:

const char* cascade_name ="C:\Program Files\OpenCV2.1\data\haarcascades\haarcascade_frontalface_alt.xml" ;

....

int main( int argc, char** argv )

{

....

    int optlen = strlen("--cascade=");

....

cascade_name = cascade_name+optlen;


    cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );


    if( !cascade )

    {

        fprintf( stderr, "ERROR: Could not load classifier cascade\n" );

        return -1;

    }

Эти строчки отвечают за каскад, но не пойму, почему не работает

Вот значение переменной cascade_name , после cascade_name = cascade_name+optlen:

+ cascade_name 0x0041674a "FilesOpenCV2.1datahaarcascadeshaarcascade_frontalface_alt.xml" const char *

Есть еще мысли, подскажите пожалуйста.

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


Ссылка на сообщение
Поделиться на других сайтах
Спасибо, что ответил, но также выдается:

Could not load classifier cascade

Вот по коду:

const char* cascade_name ="C:\Program Files\OpenCV2.1\data\haarcascades\haarcascade_frontalface_alt.xml" ;

....

int main( int argc, char** argv )

{

....

int optlen = strlen("--cascade=");

....

cascade_name = cascade_name+optlen;

cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );

if( !cascade )

{

fprintf( stderr, "ERROR: Could not load classifier cascade\n" );

return -1;

}

Эти строчки отвечают за каскад, но не пойму, почему не работает

Вот значение переменной cascade_name , после cascade_name = cascade_name+optlen:

+ cascade_name 0x0041674a "FilesOpenCV2.1datahaarcascadeshaarcascade_frontalface_alt.xml" const char *

Есть еще мысли, подскажите пожалуйста.

Замените \ на \\

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


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

Спасибо за ответ.

Меня вот, что еще интересует, я немного вашу программу облегчил.

Она находит лицо, сохраняет его, но в темном фоне или это так и должно быть? (кажется разобрался с этим)

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

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


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

Меня вот, что еще интересует, я немного вашу программу облегчил.

Она находит лицо, сохраняет его, но в темном фоне или это так и должно быть? (кажется разобрался с этим)

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

Облегчили , это значит убрали приведение матриц к видимому виду, то есть к диапазону значений 0-255 :)

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

Я не использовал эту программу таким образом.

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


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

Доброго времени суток. Хотелось бы выяснить вопрос - после изучения литературы он остался невыясненным. Является ли распознавание лиц с помощью СММ масшатбонезависимым? По моим экспериментам, выяснилось, что результат зависит разницы масштабов исходных и сравниваемых изображений. Для исключения такой ситуации на данный момент у меня в работах происходит нормализация изображений по масштабу. Масштабирую я приведением коэффициентов DCT. Пока что это просто нормализация по отношению размеров. Вот хотелось бы знать, правилен ли этот подход. Если направление правильно, то как найти более оптимальную зависимость коэффициентов DCT от масштаба изображения? Заранее благодарен.

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


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

Может кто знает пытаюсь запустить проект автора темы (на С++ bilder 2009 но это наверно не важно) вылазит такая вот ошибка

1b9b49d78357t.jpg

ну ошибка понятна но как ее решить не знаю пробовал libPNG.dll версии 1.2.5 и 1.2.4 но ошибка та же

Заранее спасибо

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


Ссылка на сообщение
Поделиться на других сайтах
Может кто знает пытаюсь запустить проект автора темы (на С++ bilder 2009 но это наверно не важно) вылазит такая вот ошибка

1b9b49d78357t.jpg

ну ошибка понятна но как ее решить не знаю пробовал libPNG.dll версии 1.2.5 и 1.2.4 но ошибка та же

Заранее спасибо

Указать при конфигурировании проекта библиотеки opencv, что хотите LibPNG использовать, и он её встроит. После компиляции будет lib и dll.

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


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

Здравствуйте, я скачиваю архив с исходником из первого поста и приходит битый архив. Не могли бы вы выложить еще раз или выслать на емейл. Или это проблемы у меня ? Спасибо )

п.с. кстати, файлы ПДФ, выложенные в теме тоже не читаются...

Изменено пользователем SilAs

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


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

Спасибо за найденный битый файл. Я его перезалил. По поводу оставшихся ссылок, проверю еще раз вечером.

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


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

И еще вопрос, есть ли возможность произвести обучение только один раз, получив параметры, сохранить их где-нибудь (БД, файл и тд), и при следующем запуске программы не проводить обучение еще раз, а прочитать уже обученные параметры? И есть ли возможность дообучить, если появляется еще один индивид? Судя по коду, это надо модифицировать переменную Ehmms, добавив полученные параметры обучения.

Спасибо.

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


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

А можно аналог функции ExtractDCT() на C#? Спасибо

Получилось так.


        private void ExtractDCT(float[] src, IntPtr dst, int numVec, int dstLen)

        {

            int tmpSrc = 1;

            int tmpDst = 0;

            float[] dstArr = new float[dstLen * numVec];


            for (int i = 0; i < numVec; i++)

            {

                int l = src.Length - tmpSrc > dstLen  ? dstLen : src.Length - tmpSrc;

                Array.Copy(src, tmpSrc, dstArr, tmpDst, l);

                tmpSrc += dstLen + 1;

                tmpDst += dstLen;

            }

            Marshal.Copy(dstArr, 0, dst, dstArr.Length);

        }

Не знаю насколько правильно, но работает

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


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

Пытаюсь реализовать на .NET сохранение и восстановление данных на диске. Для этого нужно работать со структурой CvEHMM.

typedef struct CvEHMM

{

    int level; /* 0 - lowest(i.e its states are real states), ..... */

    int num_states; /* number of HMM states */

    float*  transP;/*transition probab. matrices for states */

    float** obsProb; /* if level == 0 - array of brob matrices corresponding to hmm

                        if level == 1 - martix of matrices */

    union

    {

        CvEHMMState* state; /* if level == 0 points to real states array,

                               if not - points to embedded hmms */

        struct CvEHMM* ehmm; /* pointer to an embedded model or NULL, if it is a leaf */

    } u;


} CvEHMM;

У меня возникают проблемы с тем, чтобы прочитать параметры transP и obsProb. В обертке для C# эти переменные имеют тип IntPtr. Есть ли возможность узнать размерность этих данных? или хотя бы как из данных, что передаются функции icvCreate2DHMM узнать требуемую размерность параметров?

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


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

cvSave-ом не сохраняется?

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


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

cvSave-ом не сохраняется?

именно эти элементы структуры нет. Говорит: "External component has thrown an exception.". В качестве враппера использовал этот

Пробовал сохранять матрицы, правда созданные в коде C#, они нормально сохраняются. Что с этим делать хз. Вразумительного ответа в информации об исключении не нашёл.

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


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

Этот файл раньше вместе с проектом в первом топике шел, после перезаливки я наверное его забыл прицепить, а может он там еще, лень проверять, поэтому прицепляю отдельно. Там нужно смотреть hmmfaces/FaceRecognition/Ehmm.h и Ehmm.cpp.

HMMFacesAlpha0_1.zip

  • Like 1

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×