BashOrgRu 0 Жалоба Опубликовано May 13, 2015 Здравствуйте. Создал каскад, cascade.xml, вроде обучение завершилось. Написал программу, работает, но с каскадом распознавания лиц от emgu. с моим каскадом программа не работает. Прикладываю свой каскад и каскад от эмгу. Видно, что они сильно разнятся. Как мне сделать каскад как у них? У них даже структура каскада другая. Как сделать такую же? my.xmlhaarcascade_frontalface_alt_tree.xml Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано May 13, 2015 Очевидно, что важна обучающая выборка и число этапов обучения, критерий остановки. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
iskees 32 Жалоба Опубликовано May 13, 2015 Вместо HaarCascade попробуйте CascadeClassifier и должны будут загрузится оба каскада Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BashOrgRu 0 Жалоба Опубликовано May 13, 2015 Очевидно, что важна обучающая выборка и число этапов обучения, критерий остановки. Файлы разнятся на столько, что я уже думаю не нужно ли как то запустить 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; } } } } Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано May 13, 2015 Файлы разнятся на столько, что я уже думаю не нужно ли как то запустить concert_cascade.c, правда я пока не понял как это сделать Я говорю о том, что ты мог обучить свой каскад на очень маленькой выборке. Каскад из OpenCV обучался на тысячах, а то и десятках тысяч лиц. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BashOrgRu 0 Жалоба Опубликовано May 13, 2015 Я говорю о том, что ты мог обучить свой каскад на очень маленькой выборке. Каскад из OpenCV обучался на тысячах, а то и десятках тысяч лиц. в таком случае это повлияло бы на точность а не на сам факт работы каскада? я не очень разбираюсь, но подозреваю что дело не в этом.. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано May 13, 2015 Ну, тогда не понятно выражение "с моим каскадом программа не работает". Не запускается? Падает с какой-то ошибкой? С какой? В каком месте? Как и чем обучался каскад? Точно ли он дообучился? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BashOrgRu 0 Жалоба Опубликовано May 13, 2015 Ну, тогда не понятно выражение "с моим каскадом программа не работает". Не запускается? Падает с какой-то ошибкой? С какой? В каком месте? Как и чем обучался каскад? Точно ли он дообучился? Программа запускает форму, даже пытается инициализировать камеру (на ней загорается лампочка), затем программа просто схлопывается. С каскадом по лицам такого не происходит. Первый этап обработки исключения типа "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) пройдены..Вроде успех..Мой каскад почти копия (только числа другие), каскада с совой из статьи с хабра... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BashOrgRu 0 Жалоба Опубликовано May 13, 2015 Либо как вариант, помогите запустить проект с совой из статьи...Это тоже было бы отличным решением. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
barsukov 0 Жалоба Опубликовано May 13, 2015 (изменено) Не пойму почему у вас не работает пример с совой, у меня работал хорошо. Файл с каскадом поместили в папку проекта и включили в solution explorer(не знаю как он на русском)? Добавлю также код кнопки из моего проекта, которая работает с Каскадом и выделяет найденную область как новое изображение, может пригодится. upd. Также посмотрите в сети как создать проект с библиотеками EmguCV(проверьте, работают ли самые простые программы), в некоторых статьях забывают упомянуть что нужно в bin/Debug вашего проекта хранить не только библиотеки emgucv, но и opencv. Хотя, может и по-другому можно на них ссылаться, но так проще всего, как мне кажется. ButtonRun.txt Изменено May 13, 2015 пользователем barsukov Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
iskees 32 Жалоба Опубликовано May 13, 2015 Я имел ввиду заменить ваше private HaarCascade haarCascade; на CascadeClassifier как у barsukov написано, разумеется весь остальной код править тоже надо под эот класс, но там не большая разница Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BashOrgRu 0 Жалоба Опубликовано May 13, 2015 Не пойму почему у вас не работает пример с совой, у меня работал хорошо. Файл с каскадом поместили в папку проекта и включили в solution explorer(не знаю как он на русском)? Добавлю также код кнопки из моего проекта, которая работает с Каскадом и выделяет найденную область как новое изображение, может пригодится. upd. Также посмотрите в сети как создать проект с библиотеками EmguCV(проверьте, работают ли самые простые программы), в некоторых статьях забывают упомянуть что нужно в bin/Debug вашего проекта хранить не только библиотеки emgucv, но и opencv. Хотя, может и по-другому можно на них ссылаться, но так проще всего, как мне кажется. я его скачиваю, распаковываю, открываю как проект в вижуалке (2013), пытаюсь запустить, и он выдает разные ошибки. Их приводить нет смысла, идея в том, что он не может найти каскад. Или ему не нравится битность операционки или дебаггера (ставил разные). Не совсем понял вашу строчку "Файл с каскадом поместили в папку проекта и включили в solution explorer", каскад в папку проекта клал, а как "включить в solution explorer "? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
barsukov 0 Жалоба Опубликовано May 13, 2015 На картинке слева от кр.линии- как выглядит проект с добавленным .xml файлом, справа- как добавляется(Пр. кнопка на проекте, Добавить-Существующий элемент) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
barsukov 0 Жалоба Опубликовано May 13, 2015 Если вы скачали этот проект, то заметьте, что на странице скачивания написано "If you can't run your project, just build it and make sure all opencv_xxxx.dll files and haarcascade_frontalface_alt_tree.xml in the same directory with your executable file. You can find those files inside C:\Emgu\emgucv-windows-x86 2.2.1.1150\bin.", что значит вам нужно внести все emgucv и opencv библиотеки в каталог bin/Debug, как я и писал выше. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
barsukov 0 Жалоба Опубликовано May 13, 2015 (изменено) Сделал по своим советам выше, проект запускается(хотя я не могу точно проверить, нет вебкамеры). Могу скинуть папку со всеми файлами, хотя она весит под 500мб(не в архиве). upd.Пока вас ждал уже запаковал и выложил, попробуйте. Изменено May 13, 2015 пользователем barsukov Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
iskees 32 Жалоба Опубликовано May 13, 2015 ваш код крашится на загрузке каскада так работает, и что то фиксирует но не очень хорошо: using System; using System.IO; using System.Windows; using System.Windows.Controls; using System.Windows.Media.Imaging; using System.Windows.Threading; using Emgu.CV.Structure; using Emgu.CV; using System.Runtime.InteropServices; namespace WpfFaceDetectionTest { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { private Capture capture; private Emgu.CV.CascadeClassifier haarCascade; DispatcherTimer timer; public MainWindow() { InitializeComponent(); } private void Window_Loaded(object sender, RoutedEventArgs e) { capture = new Capture(); if (File.Exists("haarcascade_frontalface_alt_tree.xml")) haarCascade = new CascadeClassifier(@"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 = haarCascade.DetectMultiScale(grayFrame,1.1,5,new System.Drawing.Size(20,20), System.Drawing.Size.Empty); foreach (var face in detectedFaces) currentFrame.Draw(face, 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; } } } } Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах