Сам процес роботи з OpenCV передбачає попередні танці з бубном, про яких є досить докладних описів:
в тому числі і на Хабре:
Налаштування проекту під OpenCV від користувача skynoname. за які йому окреме спасибі!
Проба пера.
Перші плоди.
Подальше комбінування цих методів зайняло кілька хвилин, в результаті чого вийшов наступний
Показавши цю картинку в web-камеру, ви побачите спливаюче вікно зі знаком.
Знак поступися дорогою
Додам ще параметри середовища, з якими працює проект:
VC ++ Directories> Library Directories> C: OpenCV2.4.4opencvbuildx86vc10lib;
C / C ++> AdditionalIncludeDirectories> C: OpenCV2.4.4opencvbuildincludeopencv; C: OpenCV2.4.4opencvbuildinclude
Linker> General> Enable Incremental Linking> No (/ INCREMENTAL: NO)
Linker> Input>
opencv_video244d.lib;
opencv_ml244d.lib;
opencv_legacy244d.lib;
opencv_imgproc244d.lib;
opencv_highgui244d.lib;
opencv_core244d.lib;
opencv_objdetect244d.lib;
Муки творчості.
Домігшись виявлення одного знака, приступив до додавання розпізнавання другого знака. І тут почалися помилкові спрацьовування, програма плутала знаки і робота вкрай нестабільно. Додавав інші знаки просто копіюючи частина коду від поточного знака, і змінюючи змінні. Хотів зробити процедуру, але як то руки не дійшли, тому що зрозумів, що цей метод мені не цікавий. Вдаватися до порівняння за кількістю пікселів в контурі і подібних методів не став.
Другий акт танців з бубном.
У підсумку повернули в сторону тренування каскадів. «Покуривши» в цьому напрямку зрозумів що мені потрібні два інструменти createsampes і haartraining. Але їх exe`шнікі у мене були відсутні, а компілюватиметься відмовлялися. На той момент версія OpenCV у мене була 2.4.4, налаштована по першій статті. у другій же статті я вперше прочитав про використання Cmake при установці. У підсумку вирішив завантажити версію 2.3.1 і перевстановити бібліотеку. Після чого мені вдалося запустити потрібні інструменти через командний рядок і постало питання як з ними працювати. Всі крапки над «і» розставили статті, в яких показані параметри з якими потрібно запускати createsampes і haartraining з докладним описом цих параметрів.
Код з чистого аркуша.
Остаточно відмовившись від старого методу, код був переписаний для підстановки навчених каскадів.
Середу налаштовуємо точно так само як і в минулому проекті.
Повторення - батьки вчення.
Справа за «малим» навчити каскади.)
Тут починається найцікавіше. Після чого я вирішив писати про всі ці поневіряння на Хабре і просити поради.
Я заготовив 500 зображень розміром 1600х1200. і одне зображення зі знаком поступися дорогою розміром 80х80. Одного зображення буде досить, тому що ми детектуючи певний об'єкт, а не величезна різноманітність осіб.
Отже, заготовивши картинки і створивши файл neg.dat зі структурою
запускаємо файл opencv_createsamples.exe через CMD з наступними параметрами
Тобто утиліта обрізає bg-картинку під розмір позитивної картинки. Зміна параметрів -w і -h результату не дають і заднього фону все одно майже не видно. Якщо раптом хто знає в чому тут справа, поділіться міркуваннями. Розмір негативних зображень зменшував до 800х600 - результат той же.
Ну далі необхідно запустити opencv_haartraining.exe з параметрами
після чого ви отримаєте довгоочікуваний xml-файл, який можна довантажувати в вихідний код програми.
В результаті каскад злегка навчається і, з великою кількістю помилкових спрацьовувань, реагує на, любиться мені, картинку знака поступися дорогою.
Але я не можу домогтися точних спрацьовувань, як мені здається, через те що обрізається задній фон в позитивних зображеннях. І ніяк не вдаються картинки як в мануалах. Але залишається ще варіант збільшити кількість етапів навчання і, навантаживши свій комп'ютер на весь день, дочекатися поки каскад буде більш «освіченим». Чим я і планую зайнятися до появи інших ідей.