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

BashOrgRu

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

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

  • Посещение

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


  1. Помогите пожалуйста. История такова - сделал по мануалам всяким вот такую штуку - она находит на фотографии центры кругов (планируется использовать их как метки на реальном объекте, выделять в какой то цветовой гамме). Но мне нужно сделать это для видео - то есть снимается видео-эталон и видео-пример, найти надо степень расхождения координат между собой. Условно можно представить, что они допустимо разнятся в некотором диапазоне, который не критичен, затем уже считать разницу. Посмотрите пожалуйста код, скажите, много ли надо поменять, что бы перейти к видео? не очень разбираюсь в вопросе, однако хоть что-то написал. Может какие то примеры подскажете, или шаблон. И по общей структуре тоже, если есть мысли, нужен ли массив для хранения данных с каждого кадра (я так себе это представляю, возможно ошибаюсь).

    forforum.txt


  2. Не пойму почему у вас не работает пример с совой, у меня работал хорошо. Файл с каскадом поместили в папку проекта и включили в solution explorer(не знаю как он на русском)? Добавлю также код кнопки из моего проекта, которая работает с Каскадом и выделяет найденную область как новое изображение, может пригодится.

    upd. Также посмотрите в сети как создать проект с библиотеками EmguCV(проверьте, работают ли самые простые программы), в некоторых статьях забывают упомянуть что нужно в bin/Debug вашего проекта хранить не только библиотеки emgucv, но и opencv. Хотя, может и по-другому можно на них ссылаться, но так проще всего, как мне кажется.

    я его скачиваю, распаковываю, открываю как проект в вижуалке (2013), пытаюсь запустить, и он выдает разные ошибки. Их приводить нет смысла, идея в том, что он не может найти каскад. Или ему не нравится битность операционки или дебаггера (ставил разные). Не совсем понял вашу строчку "Файл с каскадом поместили в папку проекта и включили в solution explorer", каскад в папку проекта клал, а как "включить в solution explorer "?


  3. Ну, тогда не понятно выражение "с моим каскадом программа не работает". Не запускается? Падает с какой-то ошибкой? С какой? В каком месте? Как и чем обучался каскад? Точно ли он дообучился?

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

    Первый этап обработки исключения типа "Emgu.CV.Util.CvException" в Emgu.CV.dll
    Программа "[416] WpfApplication1.vshost.exe" завершилась с кодом -1073741819 (0xc0000005) 'Access violation'.
    Программа "[416] WpfApplication1.vshost.exe: Трассировка программы" завершилась с кодом 0 (0x0).
     
    вот такое вот пишет Visual studio 2013 при моем каскаде..
     
    Обучал по инструкции из вот этой статьи, шаг в шаг - http://habrahabr.ru/post/208092/
    но его код у меня так и не заработал и я вот этот (приведенный выше) взял. По завершению обучения просто все прекратилось, все стадии (16) пройдены..Вроде успех..Мой каскад почти копия (только числа другие), каскада с совой из статьи с хабра...

  4. Я говорю о том, что ты мог обучить свой каскад на очень маленькой выборке. Каскад из OpenCV обучался на тысячах, а то и десятках тысяч лиц.

    в таком случае это повлияло бы на точность а не на сам факт работы каскада? я не очень разбираюсь, но подозреваю что дело не в этом..


  5. Очевидно, что важна обучающая выборка и число этапов обучения, критерий остановки.

    Файлы разнятся на столько, что я уже думаю не нужно ли как то запустить concert_cascade.c, правда я пока не понял как это сделать

     

    Вместо HaarCascade попробуйте CascadeClassifier и должны будут загрузится оба каскада

    Вы имели ввиду в коде?

    Вот мой код, при замене в нем HaarCascade на CascadeClassifier выдает всякие ошибки, где именно заменить, если вы про код..?

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.Windows.Threading;
    using Emgu.CV.Structure;
    using Emgu.CV;
    using System.Runtime.InteropServices;
     
     
     
    namespace WpfApplication1
    {
        /// <summary>
        /// Логика взаимодействия для MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            private Capture capture;
            private HaarCascade haarCascade;
            DispatcherTimer timer;
            public MainWindow()
            {
                InitializeComponent();
            }
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                capture = new Capture();
                haarCascade = new HaarCascade(@"haarcascade_frontalface_alt_tree.xml");
                timer = new DispatcherTimer();
                timer.Tick += new EventHandler(timer_Tick);
                timer.Interval = new TimeSpan(0, 0, 0, 0, 1);
                timer.Start();
            }
            void timer_Tick(object sender, EventArgs e)
            {
                Image<Bgr, Byte> currentFrame = capture.QueryFrame();
     
                if (currentFrame != null)
                {
                    Image<Gray, Byte> grayFrame = currentFrame.Convert<Gray, Byte>();
     
                    var detectedFaces = grayFrame.DetectHaarCascade(haarCascade)[0];
     
                    foreach (var face in detectedFaces)
                        currentFrame.Draw(face.rect, new Bgr(0, double.MaxValue, 0), 3);
     
                    image1.Source = ToBitmapSource(currentFrame);
                }
     
            }
            [DllImport("gdi32")]
            private static extern int DeleteObject(IntPtr o);
     
            public static BitmapSource ToBitmapSource(IImage image)
            {
                using (System.Drawing.Bitmap source = image.Bitmap)
                {
                    IntPtr ptr = source.GetHbitmap(); //obtain the Hbitmap
     
                    BitmapSource bs = System.Windows.Interop
                      .Imaging.CreateBitmapSourceFromHBitmap(
                      ptr,
                      IntPtr.Zero,
                      Int32Rect.Empty,
                      System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
     
                    DeleteObject(ptr); //release the HBitmap
                    return bs;
                }
            }
        }
    }

  6. Здравствуйте. Создал каскад, cascade.xml, вроде обучение завершилось. Написал программу, работает, но с каскадом распознавания лиц от emgu. с моим каскадом программа не работает. Прикладываю свой каскад и каскад от эмгу. Видно, что они сильно разнятся. Как мне сделать каскад как у них? У них даже структура каскада другая. Как сделать такую же?

    my.xml

    haarcascade_frontalface_alt_tree.xml


  7. Напоследок, если в курсе, подскажи:

    1) я выбираю 5 векторов которым соотвествуют 5 макс собс значений.. (после сортировки)

    2) далее мне надо фотку разложить на эти вектора (как)

    3) спроектировать ее в этот базис (как?)

    я честно говоря не дружил с алгеброй... по этому сори(


  8. Да, это ок (http://www.cyberguru.ru/programming/programming-theory/matrix-vectors-values-page6.html) внизу написано:

    /* Программа eigsrt, получая на входе собственные значения d[1...n] и соответствующие

    собственные векторы v[1...n][1...n], сортирует собственные значения в нисходящем

    порядке, делая соответствующие преобразования в массиве векторов. Метод сортировки

    прямая вставка

    */

    Итак, ключевые слова для поисковиков:(

    Якоби исходник, якоби собственные значения исходник, собственные вектора, якобы, eigenvectors, eigenvalues, jacobi, source++, якоби, якоби

    :)


  9. Собственно другой ветки куда бы моя тема подходила не нашел, по этому пишу здесь как более...

    Итак, моя задача состоит в реализации алгоритма линейный дискриминантный анализ фишера..

    Т.е насколько я понял из теории это почти тот же метод главных компонент + доп. проектирование...

    Почитав теорию у меня сложился такой алгоритм:

    1) Создать Базу фоток

    2) найти ковариционную матрицу

    3) найти собственные вектора и значения

    4) спроектировать базу фотографий в пространство собс векторов (? так ли это? )

    5) найти проекцию такую, которая бы удовлетворяла идеи Фишера

    6) загнать новую фотку, спроектировать в полученное пространство и сравнить

    А теперь как я это понял и начал делать:

    1) У нас имется N фотография (серая, 8 битова) размерами WxH,

    2) Формируем матрицу X которая состоит из фотографий. Каждый ряд - вектор размерностью (WxH). Т.е если у меня 10 фоток размерами 100х100 то матрица Х = 10000х10.

    3) Необходимо найти ковариционую матрицу.

    Я ее ищу таким образом:

    3.1) Нахожу среднее по столбцам матрицы Х

    3.2) Отнимаю от каждого столбца его среднее

    3.3) Полученную матрицу транспонирую, умножаю ее на себя же и умножаю на коефициент. То есть матрица А = это матрица Х - среднее.

    C = А' * A * (1/(N-1))

    где ' - символ транспонирования

    Получаю симетричную матрицу, которая является ковариционной.

    Дальше, насколько я понял, надо найти собственные вектора, которые ищутся так:

    S = F' * C * F

    Где

    S - собственные значения

    F - собственные вектора

    C - ковариционная матрица

    (отсюда у меня возникает вопрос: Получается собственные вектора получаются из ВСЕЙ матрицы Х? Т.е из всех наборов фоток???)

    Разве не должно быть что у каждого набора фотографий - свои собственные лица?)

    Как теперь найти собственные значения и вектора? Все методы что не нахожу все аналитические, которые мне не подходят в силу размерности.

    Итерационный метод есть, вроде Мизес наз. но я не могу найти описание

    В общем я тут застрял.

    Дальше пока не могу представить как спроектировать фотки на полученные вектора

    Если кто прочел и знает как помочь - напишите, спасибо, жду.

    Возможно в openCV Есть ф-ция поиска собственных векторов и значений, мне нужны первые 5..

    спасибо(!)


  10. А аутпуты черные... почти черные... иногда видно что там чтото есть но настколько темное что трудно рассмотреть.. такое ощущение что картинку затемнили специально:( может параметр гдето попустил


  11. Возвращает белый квадрат :(

      // 2 картинки инпута

    IplImage **input = new IplImage*[2];

    input[0] = new IplImage;

    input[1] = new IplImage;

    // преобразовываю картинки в ЧБ цвет

    IplImage *temp;

    temp=cvLoadImage("image1.jpg",1);

    input[0]=cvCreateImage(cvSize( 160,120 ), IPL_DEPTH_8U, 1);

    cvCvtColor(temp, input[0], CV_BGR2GRAY);

    cvReleaseImage(&temp);

    temp=cvLoadImage("image2.jpg",1);

    input[1]=cvCreateImage(cvSize( 160,120), IPL_DEPTH_8U, 1);

    cvCvtColor(temp, input[1], CV_BGR2GRAY);

    // ГОТОВЛЮ output'ы

    IplImage **output = new IplImage*[2];

    for(int i=0;i<2;i++) {output=new IplImage; output=cvCreateImage(cvSize(160,120), IPL_DEPTH_32F, 1); }

    // сюда в avg поидее придет то что мне нужно(!)

    IplImage *avg=cvCreateImage(cvSize(160,120), IPL_DEPTH_32F, 1);

    // готовлю

    CvTermCriteria term;

    term.type= CV_TERMCRIT_ITER | CV_TERMCRIT_EPS;

    term.max_iter=10;

    term.epsilon=0.1;

    float vals[2];

    cvCalcEigenObjects(2, input, output, 0, 0, 0, &term, avg, vals);

    cvSaveImage("image0.jpg", avg);

    //Все, белый лист, непойму в чем дело

    Все, не могу понять почему так...:) помогите)

×