BashOrgRu
-
Количество публикаций
18 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные пользователем BashOrgRu
-
-
Не пойму почему у вас не работает пример с совой, у меня работал хорошо. Файл с каскадом поместили в папку проекта и включили в solution explorer(не знаю как он на русском)? Добавлю также код кнопки из моего проекта, которая работает с Каскадом и выделяет найденную область как новое изображение, может пригодится.
upd. Также посмотрите в сети как создать проект с библиотеками EmguCV(проверьте, работают ли самые простые программы), в некоторых статьях забывают упомянуть что нужно в bin/Debug вашего проекта хранить не только библиотеки emgucv, но и opencv. Хотя, может и по-другому можно на них ссылаться, но так проще всего, как мне кажется.
я его скачиваю, распаковываю, открываю как проект в вижуалке (2013), пытаюсь запустить, и он выдает разные ошибки. Их приводить нет смысла, идея в том, что он не может найти каскад. Или ему не нравится битность операционки или дебаггера (ставил разные). Не совсем понял вашу строчку "Файл с каскадом поместили в папку проекта и включили в solution explorer", каскад в папку проекта клал, а как "включить в solution explorer "?
-
Либо как вариант, помогите запустить проект с совой из статьи...Это тоже было бы отличным решением.
-
Ну, тогда не понятно выражение "с моим каскадом программа не работает". Не запускается? Падает с какой-то ошибкой? С какой? В каком месте? Как и чем обучался каскад? Точно ли он дообучился?
Программа запускает форму, даже пытается инициализировать камеру (на ней загорается лампочка), затем программа просто схлопывается. С каскадом по лицам такого не происходит.
Первый этап обработки исключения типа "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) пройдены..Вроде успех..Мой каскад почти копия (только числа другие), каскада с совой из статьи с хабра... -
Я говорю о том, что ты мог обучить свой каскад на очень маленькой выборке. Каскад из OpenCV обучался на тысячах, а то и десятках тысяч лиц.
в таком случае это повлияло бы на точность а не на сам факт работы каскада? я не очень разбираюсь, но подозреваю что дело не в этом..
-
Очевидно, что важна обучающая выборка и число этапов обучения, критерий остановки.
Файлы разнятся на столько, что я уже думаю не нужно ли как то запустить 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 HbitmapBitmapSource bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(ptr,IntPtr.Zero,Int32Rect.Empty,System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());DeleteObject(ptr); //release the HBitmapreturn bs;}}}} -
Здравствуйте. Создал каскад, cascade.xml, вроде обучение завершилось. Написал программу, работает, но с каскадом распознавания лиц от emgu. с моим каскадом программа не работает. Прикладываю свой каскад и каскад от эмгу. Видно, что они сильно разнятся. Как мне сделать каскад как у них? У них даже структура каскада другая. Как сделать такую же?
-
да ну...
матрица пикселей жеж.... если размер матрицы не превышает кол-ва фоток то как усечь?)
-
Есть более быстрый алгоритм поиска собств. значений
потому как якоби я запустил на матрице 2500х2500 он что-то завис глухо... хотя если поставить брекпоинт то считает... т.е работает но долго(
-
Это матлаб ?
-
может есть что-то по алгоритму фишера в opencv? я чет не нашел
-
прикол в том, что в opencv есть все для PCA(
-
Напоследок, если в курсе, подскажи:
1) я выбираю 5 векторов которым соотвествуют 5 макс собс значений.. (после сортировки)
2) далее мне надо фотку разложить на эти вектора (как)
3) спроектировать ее в этот базис (как?)
я честно говоря не дружил с алгеброй... по этому сори(
-
Да, это ок (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++, якоби, якоби
-
Собственно другой ветки куда бы моя тема подходила не нашел, по этому пишу здесь как более...
Итак, моя задача состоит в реализации алгоритма линейный дискриминантный анализ фишера..
Т.е насколько я понял из теории это почти тот же метод главных компонент + доп. проектирование...
Почитав теорию у меня сложился такой алгоритм:
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..
спасибо(!)
-
подскажи более подробней....потому как я попытался доступится как avg[x][y] мне писало ероры...
как вытянуть мин/макс? cvMin?
-
А аутпуты черные... почти черные... иногда видно что там чтото есть но настколько темное что трудно рассмотреть.. такое ощущение что картинку затемнили специально может параметр гдето попустил
-
Возвращает белый квадрат
// 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);
//Все, белый лист, непойму в чем дело
Все, не могу понять почему так... помогите)
Сравнение движения двух объектов
в OpenCV
Опубликовано · Report reply
Помогите пожалуйста. История такова - сделал по мануалам всяким вот такую штуку - она находит на фотографии центры кругов (планируется использовать их как метки на реальном объекте, выделять в какой то цветовой гамме). Но мне нужно сделать это для видео - то есть снимается видео-эталон и видео-пример, найти надо степень расхождения координат между собой. Условно можно представить, что они допустимо разнятся в некотором диапазоне, который не критичен, затем уже считать разницу. Посмотрите пожалуйста код, скажите, много ли надо поменять, что бы перейти к видео? не очень разбираюсь в вопросе, однако хоть что-то написал. Может какие то примеры подскажете, или шаблон. И по общей структуре тоже, если есть мысли, нужен ли массив для хранения данных с каждого кадра (я так себе это представляю, возможно ошибаюсь).
forforum.txt