1. Главная страница » Компьютеры » Opencv обучение каскада хаара

Opencv обучение каскада хаара

Автор: | 16.12.2019

OpenCV/Обработка и распознавание изображений

Оглавление

В данном уроке мы рассмотрим обучение каскадного классификатора в OpenCV с помощью утилит opencv_traincascade, opencv_createsamples. Каскад будем тренировать распознавать автомобили.

Для начала нам нежно скачать базу фотографий автомобилей с сайта Иллинойсского университета по ссылке. Также можно скачать данную базу с Github вместе с исходниками примера.

Распакуем архив командой:

Данный архив в папке TrainImages содержит изображения на которых мы и будем обучать наш классификатор. Файлы с позитивными изображениями (те которые содержат искомый объект) начинаются с букв pos, а файлы с негативными изображениями (те на которых искомый объект отсутствует) начинаются с neg. В папке содержится 550 изображений автомобилей и 500 изображений на которых автомобилей нет.

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

Теперь составим списки позитивных и негативных изображений. Список позитивных изображений поместим в файл pos.txt, негативных в файл neg.txt.

Посмотрим количество изображений в этих файлах.

Далее создадим файл с описанием позитивных изображений. Данный файл должен иметь следующий формат:

filename — имя файла;

# of objects — число объектов на изображении;

x, y — координаты объекта;

width, heigh — ширина и высота изображения;

Пример такого файла:

В нашем случае на каждом позитивном изображении изображен только один автомобиль, начальные координаты возьмем (0, 0), ширина и высота изображения (100, 40).

Создадим такой файл описания с именем cars.info командой:

Теперь создадим коллекцию позитивных изображений в vec формате с помощью утилиты opencv_createsamples.

Проверим правильность создания коллекции изображений командой:

Создадим папку data в которую будет помещен наш обученный каскад:

Теперь обучим наш каскад с помощью утилиты opencv_traincascade.

-data — папка в которую будет помещен обученный каскад;

-vec — vec файл позитивных изображений (созданный утилитой opencv_createsamples);

-bg — файл с описанием изображений не содержащих искомый объект;

-numPos ,-numNeg — число позитивных и негативных изображений;

-numStages — число этапов обучения;

-w , -h — ширина и высота изображений для обучения;

-featureType — тип каскада (HAAR, LBP);

-mode ALL — использовать или нет полный комплект Хаар-признаков. От этого зависит скорость работы и точность алгоритма. Но есть ситуации, когда полного комплекта признаков не нужно (например, если ваш объект не меняет ориентацию);

Работа с каскадным классификатором включает два этапа: обучение и детектирование. Детектирование вы можете посмотреть, к примеру, на обнаружении лиц. А здесь описано как обучать классификатор.

В OpenCV есть два приложения для тренировки каскадов: opencv_haartraining и opencv_traincascade (новая версия написанная на C++). Но главное различие между этими двумя приложениями является то, что opencv_traincascade поддерживает как Хаара[Paul Viola, Michael Jones. Rapid Object Detection using a Boosted Cascade of Simple Features. Conference on Computer Vision and Pattern Recognition (CVPR), 2001, pp. 511-518.], так и LBP [Shengcai Liao, Xiangxin Zhu, Zhen Lei, Lun Zhang and Stan Z. Li. Learning Multi-scale Block Local Binary Patterns for Face Recognition. International Conference on Biometrics (ICB), 2007, pp. 828-837.] особенности. LBP с точки зрения, как обучения, так и детектирования в несколько раз быстрее Хаара. Что касается достоверности распознавания, то все зависит от обучающей выборки. Можно обучить LBP так, что оно будет приближаться к Хаара особенностям.
opencv_traincascade и opencv_haartraining хранят обученные классификаторы в различных форматах. Новый интерфейс обнаружения (CascadeClassifier класса в objdetect модуле) поддерживают оба формата. opencv_traincascade может сохранять обучение каскада в старом формате. Но opencv_traincascade и opencv_haartraining не может загрузить классификатор в другом формате для дальнейшего обучения после перерыва.
opencv_traincascade приложение может использовать TBB для многопоточности. Чтобы использовать его в режиме многоядерных процессоров OpenCV должно быть откомпилировано с TBB.
Другие утилиты, используемые для обучения:
1. opencv_createsamples используется для подготовки учебного набора положительных и тестовых образцов в формате, который поддерживается как opencv_haartraining так и opencv_traincascade приложениями. На выходе получается файл с расширением *.vec, это двоичный формат, который содержит изображение.
2. opencv_performance может быть использовано для оценки качества классификаторов, но только для обученных opencv_haartraining. Она использует коллекцию размеченных изображений, запускает классификатор и сообщает так называемую производительность, т.е. количество найденных объектов, количество пропущенных объектов, количество ложных срабатываний и другую информацию.
Для обучения необходимо собрать образы. Есть два типа образов: негативные и позитивные. Негативные образы соответствуют отсутствию объекта на изображении. Положительные образы соответствуют изображением с обнаруженными объектами. Набор негативных образов должен быть подготовлен вручную, в то время как множество положительных образов создается с помощью утилиты opencv_createsamples.

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

Позитивные образы создаются утилитой opencv_createsamples. Они могут быть созданы из одного изображения с объектом или из коллекции ранее размеченных изображений.
Обратите внимание, что вам нужен большой набор положительных образов, прежде чем передать его в указанную утилиту. Например, вам, возможно, потребуется только один положительный образ для абсолютно одинаковых объектов, таких как логотипа OpenCV, но вам определенно нужны сотни и даже тысячи позитивных образов для лица.
Пусть один образ является логотипом компании. Тогда большое множество позитивных образов создаются из данного объекта изображения, случайными вращениями, изменениями интенсивности логотипа, а также размещением логотипа на произвольном фоне. Количество и диапазон случайности можно менять с помощью аргументов командной строки утилиты opencv_createsamples
Аргументы:
-vec
Имя выходного файла, содержащего позитивные образы для обучения.
-img
Источник изображения объекта (например, логотип компании).
-bg
Файл описание фона, который содержит список изображений, которые используются в качестве фона для случайно искаженных версий объекта.
-num
Количество положительных образов для генерации.
-bgcolor
Цвет фона (в настоящее время предполагается черно-белые изображения); цвет фона обозначает прозрачный цвет. Так как могут быть артефакты сжатия, количество цветов допуска может быть задано -bgthresh. Все пиксели в диапазоне [bgcolor-bgthresh, bgcolor+bgthresh] интерпретируются как прозрачные.
-bgthresh
-inv

Если указано, то цвета будут обращены.
-randinv
Если указано, то цвета будут обращены в случайном порядке.
-maxidev
Максимальное отклонение интенсивностей пикселей на переднем плане образов.
-maxxangle
-maxxangle
-maxxangle

Максимальные углы поворота должны быть предоставлены в радианах.
-show
Полезные опции отладки. Если указано, то каждый образец будет показан. Нажатие Esc даст сигнал продолжать процесс создания образов без отображения.
-w
Ширина (в пикселях) выходных примеров.
-h
Высота (в пикселях) выходных примеров.
Следующая процедура используется для создания экземпляра образа объекта: исходное изображение поворачивается случайно вокруг всех трех осей. Выбранный угол ограничен максимумами угла. Пиксели, имеющие интенсивность в диапзоне [bg_color-bg_color_threshold; bg_color + bg_color_threshold] интерпретируются как прозрачные. Белый шум добавляется к интенсивности на переднем плане. Если -inv ключ указан, то пиксели на переднем плане инвертируются. Если –randinv ключ указан, то алгоритм случайным образом выбирает, будет ли обращение пикселей применено к этому образцу. Наконец, полученное изображение помещается на произвольный фон из файла описания фона, масштабировать до нужного размера, указанного в -h и -w и сохраняется в vec-файл, заданный в параметре -vec.

Читайте также:  Divinity original sin 2 ps4 отзывы

Позитивные примеры также могут быть получены из коллекции ранее размеченных изображений. Эта коллекция, которая описывается в текстовом файле, похожа на файл описания фона. Каждая строка этого файла соответствует изображению. Первым элементом линии является имя файла. За ней следуют количество экземпляров объекта. Следующие числа являются координатами объектов ограничивающих прямоугольников (х, у, ширина, высота).
Структура каталогов:

Т.е. первое изображение дает одно положение объекта, а второе два.
Для того, чтобы создать позитивные образы из таких коллекций, -info аргумент должен быть указан вместо –img:
-info
Схема по созданию образов в данном случае заключается в следующем. Экземпляры объектов взяты из изображений. Затем они изменяются до размера целевых образов и сохраняются в выходной vec-файл. Никаких искажений не применяется, поэтому влияющие аргументы это: -w,-h,-show и -Num.
opencv_createsamples может быть использована для изучения образов, хранящихся в файле позитивных образов. Для того, чтобы сделать это только -vec,-w и -h параметры должны быть указаны.

Следующим шагом является подготовка классификатора. Как уже упоминалось выше opencv_traincascade или opencv_haartraining могут быть использованы для обучения каскада классификаторов, но только opencv_traincascade будет описан в дальнейшем.
Аргументы командной строки opencv_traincascade приложения сгруппированы по целям:
1. Общие аргументы:
-data
Где обученный классификатор должен быть сохранен.
-vec
vec-файл с позитивными образами (созданный утилитой opencv_createsamples).
-bg
Файл описания фона.
-numPos
-numNeg

Количество позитивных / негативных образов, используемых в обучении для каждого этапа классификатора.
-numStages
Количество этапов каскада для обучения.
-precalcValBufSize

Размер буфера — расчетное значение функции (в Мб).
-precalcIdxBufSize

Размер буфера для индексов расчетных функций (в Мб). Чем больше памяти у вас есть, тем быстрее процесс обучения.
-baseFormatSave
Этот аргумент является актуальным в случае Хаар-подобных функций. Если он указан, то каскад будет сохранен в старом формате.
2. Параметры каскада:
-stageType
Тип этапов. Только boosted классификаторы поддерживаются как этап типа на данный момент.
-featureType
Тип функции: HAAR — Хаара-подобные функции, LBP — местные модели двоичные.
-w
-h

Размер обучаемых образов (в пикселях). Должно быть ровно те же значения, которые используются во время создания образов обучения (opencv_createsamples).
3. Параметры Boosted-классификатора:
-bt
Тип boosted классификаторов: DAB — Дискретная AdaBoost, RAB — Real AdaBoost, LB — LogitBoost, GAB — Gentle AdaBoost.
-minHitRate
Минимальный желаемый показатель попадания на каждом этапе классификатора. Общий рейтинг популярности можно оценить как (min_hit_rate ^ number_of_stages).
-maxFalseAlarmRate
Максимальный желаемый уровень ложных тревог для каждого этапа классификатора. Общий уровень ложных тревог можно оценить как (max_false_alarm_rate ^ number_of_stages).
-weightTrimRate
Указывает, будет ли использована обрезка и ее вес. Достойный выбор 0,95.
-maxDepth
Максимальная глубина слабого дерева. Достойный выбор 1.
-maxWeakCount
Максимальное количество слабых деревьев для каждого этапа каскада. Boosted классификатор имеет так много слабых деревьев (
Выбор типа функции Хаара установлено, как используемые в обучении. Основное использование только вертикальные функции, а все использует полный набор вертикальных и 45 градусов набором функций. См. [Rainer Lienhart and Jochen Maydt. An Extended Set of Haar-like Features for Rapid Object Detection. Submitted to ICIP2002.] для более подробной информации.

Поиска объекта на цифровом изображении одна из приоритетных задач в области распознавания изображений с помощью библиотеки OpenCV.

В данной статье рассматриваются математические основы Метода Виолы-Джонса и процесс поиска и распознавания букв автомобильного номера с помощью OpenCV и детектора Хаара.

О детекторе Хаара и библиотеке OpenCV

Основное преимущество детектора Хаара: скорость. Благодаря быстрой обработки изображения, можно с лёгкостью обрабатывать потоковое видео. Детектор Хаара используется для распознавания большинства классов объектов. К ним относятся лица и другие части тела людей, номера автомобилей, пешеходы, дорожные знаки, животные и.т.д. Детектор Хаара реализован в библиотеке OpenCV . Это даёт огромное преимущество. Так как готовые реализации OpenCV есть под большинство существующих операционных систем(Android, Windows, Linux, ios).

Принцип работы

Классификатор формируется на примитивах Хаара путём расчёта значений признаков. Для обучения на вход классификатора сначала подаётся набор «правильных» изображений с предварительно выделенной областью на изображении, дальше происходит перебор примитивов и расчёт значения признака. Вычисленные значения сохраняются в файле в формате xml.

Немного математики

Принципы метода Виолы-Джонса

В настоящее время метод Виолы–Джонса является популярным методом для поиска объекта на изображении в силу своей высокой скорости и эффективности. В основу метода Виолы–Джонса положены: интегральное представление изображения по признакам Хаара, построение классификатора на основе алгоритма адаптивного бустинга и способ комбинирования классификаторов в каскадную структуру. Эти идеи позволяют осуществлять поиск объекта в режиме реального времени. Рассмотрим их более подробно.

Читайте также:  Dir 615 настройка точки доступа

Интегральное представление изображения – это матрица, одинаковая по размерам с исходным изображением. В каждом элементе матрицы хранится сумма интенсивностей всех пикселов, находящихся левее и выше данного элемента – правого нижнего угла прямоугольной области (0,0) до (x,y). Элементы матрицы L можно рассчитать по формуле:

Расчёт значений элементов матрицы проходит за время, пропорциональное числу пикселов в исходном изображении, поэтому интегральное изображение просчитывается за один проход.

Элементы матрицы рассчитываются по формуле:

L(x,y)= I(x,y)+ L(x-1,y-1) + L(x,y-1) + L(x-1,y)

С помощью интегрального представления изображения можно быстро рассчитать суммарную яркость произвольной прямоугольной области на изображении. Пример вычисления приведен в приложении 1.

На этапе обнаружения объекта в методе Виолы-Джонса используется окно определенного размера, которое движется по изображению. Для каждой области изображения, над которой проходит окно, рассчитывается признак Хаара, с помощью которого происходит поиск нужного объекта.

Признак-отображение , где Df —множество допустимых значений признака. Если заданы признаки f1,…, fn, то вектор признаков x=(f1(x),…,fn(x)) называется признаковым описанием объекта x. Признаковые описания допустимо сопоставлять с самими объектами. При этом множество X=Df1*…*Dfn называют признаковым пространством [1].

Признаки делятся на следующие типы в зависимости от множества Df:

  • бинарный признак, Df=<0,1>;
  • номинальный признак: Df — конечное множество;
  • порядковый признак: Df — конечное упорядоченное множество;
  • количественный признак: Df — множество действительных чисел.

Признак Хаара вычисляется по смежным прямоугольным областям. В стандартном методе Виолы–Джонса используются прямоугольные примитивы, изображенные на рисунке 1.

Рисунок 1 – Примитивы Хаара

Рисунок 1

Вычисляемым значением F признака Хаара будет

где X – сумма значений яркостей точек, закрываемых светлой частью примитива, Y –сумма значений яркостей точек, закрываемых темной частью. Для вычисления используется понятие интегрального изображения, рассмотренное выше, и признаки Хаара могут вычисляться быстро, за постоянное время. Использование признаков Хаара дает точечное значение перепада яркости по оси X и Y соответственно.

Поскольку признаки Хаара мало подходят для обучения или классификации, для описания объекта с достаточной точностью необходимо большее число признаков. Поэтому признаки Хаара поступают в каскадный классификатор, служащий для быстрого отбрасывания окон, где не найден требуемый объект, и выдачи результата «истина» или «ложь» относительно нахождения объекта.

Классификатор строится на основе алгоритма бустинга (от англ.boost–улучшение, усиление) для выбора наиболее подходящих признаков для искомого объекта на данной части изображения. В общем случае бустинг — это комплекс методов, способствующих повышению точности аналитических моделей. Эффективная модель, допускающая мало ошибок классификации, называется «сильной». «Слабая» же, напротив, не позволяет надежно разделять классы или давать точные предсказания, делает большое количество ошибок. Поэтому бустинг означает «усиление» «слабых» моделей и является процедурой последовательного построения композиции алгоритмов машинного обучения, когда каждый следующий алгоритм стремится компенсировать недостатки композиции всех предыдущих алгоритмов.

В результате работы алгоритма бустинга на каждой итерации формируется простой классификатор вида:

p_j– направление знака неравенства, θ_j— значение порога, f_j(z)– вычисленное значение признака, z – окно изображения размером 24×24 пикселов.

Полученный классификатор имеет минимальную ошибку по отношению к текущим значениям весов, задействованным в процедуре обучения для определения ошибки.

Для поиска объекта на цифровом изображении используется обученный классификатор, представленный в формате xml. Классификатор формируется на примитивах Хаара.

где maxWeakCount количество слабых классификаторов;

stageThereshold максимальный порог яркости;

weakClassifiers набор слабых классификаторов, на основе которых выносится решение о том, находится объект на изображении или нет;

internalNodes и leafValues параметры конкретного слабого классификатора.

Первые два значения в internalNodes не используются, третье — номер признака в общей таблице признаков (она располагается в XML-файле под тегом features), четвертое — пороговое значение слабого классификатора. Если значение признака Хаара меньше порога слабого классификатора, выбирается первое значение leafValues, если больше — второе.

На основе этого базиса строится каскад классификаторов, принимающих решение о том, распознан объект на изображении или нет. Наличие или отсутствие предмета в окне определяется разницей между значением признака и порогом, полученным в результате обучения.

Обучение каскада Хаара

Для начала поставим задачу. Например, на изображении автомобильного номера необходимо выделить символы.

Классификатор формируется на примитивах Хаара путём расчёта значений признаков. Для обучения на вход классификатора сначала подаётся набор «правильных» изображений с предварительно выделенной областью автомобильного номера, дальше происходит перебор примитивов и расчёт значения признака. Вычисленные значения сохраняются в файле в формате xml.

Утилита для обучения каскада Хаара встроена в пакет OpenCV.

Для обучения нам необходимо собрать коллекцию файлов, которые нам в дальнейшем понадобятся.

Список:
  • Реальные фотографии объекта. Чем более похожа выборка будет на то, что мы будем распознавать, тем лучше будут результаты. Если обучать распознаватель лица по фотографиям людей из студии, то на улице уровень распознавания будет ниже, чем в студии. На это влияют как тени, одежда, так и выражение лица.
  • Выборка отрицательных фотографий, на которых нет объекта распознавания. Фотографии должны быть сделаны в той же среде где будет распознавание. Если выборка контрпримеров будет сделана по фотографиям на северном полюсе, а распознавать будете в тропических джунглях, то ничего не заработает.
Сколько нужно фотографий?

Для стабильно работающего детектора лиц это 3000-4000 положительных примеров и столько же отрицательных. Из 500 положительных и 1000 отрицательных мои коллеги делали стабильный детектор номеров. Для детектора, который показан в этой статье, я взял 500 положительных и 500 негативных фотографий.
Чем больше и разнообразнее выборка, тем стабильнее работает и тем дольше обучается.

Начнём

Для начала нам нужно сформировать папку с положительными и отрицательными фотографиями. Для данной цели я использовал программу Picture Cropper скачать. Работа с программой: мышкой выделяется область которая должна быть сохранена. По «s» происходит сохранение. По «r» – сохранение и переход к следующему изображению. По пробелу — просто переход к следующему изображению.

Для обучения нам нужно иметь 2 папки с примерами. «Good» — папка с позитивными изображениями, «Bad» — с отрицательными. Стоит учесть, что OpenCV отказывается работать с точками, пробелами и спец. символами. Не используйте данные символы в названиях примеров. Идеальные названия: «0.bmp», «1. bmp» и.т.д.

Читайте также:  Ecco уходит с российского рынка

Для каждой папки с примерами необходимо иметь файл описания, в котором описаны используемые изображения. Стандартно их называют «Good.dat» и «Bad.dat».

Файлы должны лежать на одном уровне с папками.

Файлы описания для отрицательных и положительных объектов имеют разную структуру. Для файла отрицательных примеров это просто список относительных путей к изображениям:

Для файлов с положительными примерами запись чуть хитрее. Кроме пути должно быть указанно положение рассматриваемого объекта и его размер. Стоит помнить, что один кадр — один объект.

«Good .bmp» — адрес объекта относительно файла описания. «1» — количество положительных объектов на изображении. «0 0 414 148» — координаты прямоугольника на изображении в котором находится объект. Если объектов несколько, то запись приобретает вид: «Good .bmp 2 100 200 50 50 300 300 25 25».
Удобнее всего, когда каждый объект представляет собой отдельный кадр, при этом координаты объекта равны размеру кадра.

Пример создания Good.dat и Bad.dat на примере работы с Picture Cropper

  1. Создаём папку, к примеру «Learn».
  2. Создаём под папки: Good, Bad.
  3. Распаковываем Picture Cropper
  4. Перекидываем в папку Good, изображения с объектом. (Цельные, не обрезанные)

В итоге у нас должна получиться следующая структура:

Кладём в папку Good и Bad необходимые файлы.

Запускаем PictureCropper.exe.

Выбираем нужную папку и обрабатываем изображения.

Работа с программой: мышкой выделяется область которая должна быть сохранена. По «s» происходит сохранение. По «r» – сохранение и переход к следующему изображению. По пробелу — просто переход к следующему изображению.

После завершения работы у нас должен появиться Good.dat. И в папке Good папка Cropper, в которой хранятся обрезанные изображения.

Отлично. Проделываем тоже самое с папкой Bad.

После процедуры обработки фотографий в папке Bad, приведём его файл описания Bad.dat к «правильному виду».

Сейчас файл Bad.dat выглядит следующим образом:

Приводим его к нужному формату:

На этом работа с файлами описания закончена.

Переходим к обучению.

Для начала откроем командную строку и перейдём в директорию с файлом описания Good.dat, то есть в папку learn:

Для создания пачки приведённых положительных изображений запустим opencv_createsamples через консоль:

Good.dat – файл описания положительных изображений. Указывается либо полный адрес, либо относительно программы opencv_createsamples.exe.
-vec samples.vec – файл, в который будет сохранена приведённая к общему формату база положительных изображений. Адрес должен быть указан относительно программы opencv_createsamples.exe (допустим полный путь в системе).
-w 20 -h 30 — размер шаблона. Должен приблизительно отражать пропорции искомого объекта. Например, для лиц или для символа автомобильного номера наиболее подходящая пропорция высоты к ширине 1*3. Для номеров это 3*1. А для поиска карандаша логично поставить что-то вроде 8*1. Размер шаблона должен быть достаточно маленьким. Идеально ставить его таким, чтобы человек сам мог отличить изображённый объект, но не больше того. Чем больше шаблон, тем дольше обучение.
Результатом работы программы является файл samples.vec, в котором будут лежать все ваши положительные изображения в формате, близком к bmp и с размером w*h.

Если всё прошло успешно должен появиться файл samples.vec.

Созданием основного каскада:

Для подсчёта итогового каскада используется программа «opencv_traincascade.exe», лежащая в той же папке, что и opencv_createsamples.exe. Работает долго. Даже очень долго. Обучение каскада на 500-1000 объектов займёт почти целый день. Пример обучался часа 24. При вызове:

-data haarcascade — адрес папки, куда класть полученные результаты. Отсчитывается от корневой папки программы. Нужно создать заранее, а то всё вылетит.
-vec samples.vec — адрес посчитанного в прошлом пункте файла с положительными примерами
-bg Bad.dat — адрес файла-описания отрицательных примеров
-numStages 16 — количество уровней каскада, которые программа будет обучать. Чем больше уровней, тем точнее, но тем дольше. Нормальное их количество от 16 до 25.
-minhitrate 0.999 — коэффициент, определяющий качество обучения. По сути, это процент “правильных” обнаружений. Если установлено .999, то есть по исходной выборке будет не более, чем 1- 0.999 =0.1% пропусков целей. Чем выше коэффициент, тем выше уровень ложных тревог. В принципе, если выборка хорошая, можно ставить 0.99-0.999. Если плохая ( объектов мало, они смешиваются с фоном) — то следует опускать.
-maxFalseAlarmRate 0.4 — уровень ложной тревоги. AdaBoost — такой алгоритм, который может любой уровень ложной тревоги по выборке натянуть. Но лучше что-то разумное сделать. По умолчанию все ставят 0.5. Но, возможно, будет иметь смысл поиграться. В случае, если выборка очень хорошая, то уровень требуемой тревоги будет быстро достигнут, и обучение будет остановлено.
-numPos 400 — количество позитивных примеров. ВАЖНО! Казалось бы, тут должно стоять число файлов, которые у вас были. Но это не так (в большинстве руководств это не отмечено). Чем ниже коэффициент «minhitrate», тем больше ваших файлов будет считаться непригодными. В большинстве случаев достаточно поставить numPos 80% от имеющихся у вас положительных файлов. Лучше перестраховаться, чтобы через день работы программа не вылетела с ошибкой:)
-numNeg 500 — количество имеющихся у вас негативных примеров. Что есть — то и пишем.
-w 20 -h 30 — размер примитива из прошлого пункта.
-mode ALL — использовать или нет полный комплект Хаар-признаков. От этого зависит скорость работы и точность алгоритма. Но есть ситуации, когда полного комплекта признаков не нужно (например, если ваш объект не меняет ориентацию).
-precalcValBufSize 256 -precalcIdxBufSize 256 — выделяемая под процесс память. Вроде, в последней версии OpenCV, сколько я заявил, примерно столько программа и съела, но чуть более ранние версии ели где-то в 2 раза больше. Если во время обучения вы планируете пользоваться компьютером, то ставьте столько памяти, чтобы вам хватило на дальнейшую работу.

После того, как алгоритм закончит работу, у вас появится папка haarcascade и файл cascade.xml в этой папке, это и будет созданный каскад.

Пример выполнения:

Напишем простую программу на OpenCV для демонстрации работы алгоритма:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *