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

ShurikEv

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

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

  • Посещение

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


  1. Можно вопрос по программе PCA_recognition, там есть папка faces, в ней 40 папок s1-s40, в каждой по 10 файлов. Я так понял это обучающие фотки для системы, выборки, что значит число 40 и 10? Формат фоток .pgm, это же картинка обычная? Тоесть я хочу открыть программу со своими фотками, мне просто нужно их заменить ?

    40 - количество людей

    10 - количество фото каждого человека

    Т.е. фото каждого человека обучается на массиве из 10 фото. Ясно, что можно обучаться на разных массивах, но чем больше фото, тем лучше.

    .pgm - это формат изображения. Можно использовать и jpg. Как я понял, необходимо на фото найти область лицы (каскады Хаара), перевести фото в чб-режим, и уже по полученному изображению обучаться.

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


  2. Smorodov, щас ваш проект билдеровский скомпилировал под рабочим компом с линуксом (opensuse 12.1 kde 4.8)в консольном QT проекте на чистом C++, и что то оно гораздо быстрее работает с теми же самыми выборками, чем у меня дома в винде на си шарпе с использованием того враппера что ShurikEV предлагал. Прям в разы.

    А дома комп гораздо быстрее :) что то тут не то :) попробую дома скомпилить под C++ в студии.

    Правда под линем библиотека 2.4 а дома 2.3.1, и и на лине консольный проект а дома виндовый под GUI.

    Неужели сишный код настолько быстрее :)

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

    Я в итоге реализовал на С++, а на С# написал враппер на некоторые функции. На плюсах действительно все быстрее работает, главное избегать утечек памяти


  3. Не подскажите, в теории какими фотографиями лучше оперировать? В примерах используются полутоновые изображения лица (ч/б). Можно ли подсовывать данному алгоритму цветное фото, на котором лицо не обязательно занимает основную область фотографии (далеко расположено)? Или нужно с помощью каскадов Хара определить лицо на фото, вырезать его, преобразовать в ч/б? И уже потом с этими обработанными фотографиями работать.

    И насколько мелкими могут быть фотографии? Или под какой размер лучше подгонять изображения? Используя ваш код, при попытке загрузки фото размером 35х43 я получал ошибку доступа к памяти (не может быть прочитана). Есть ли смысл увеличивать изображение до нужного минимального размера?


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

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

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


  5. Пытаюсь реализовать на .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 узнать требуемую размерность параметров?


  6. А можно аналог функции 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);
    
            }
    
    

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


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

    Спасибо.

×