Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
дипломчик.docx
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆

3.2.7 Распознавание

После обучения на тестовой выборке имеется обученная база знаний из T слабых классификаторов. Для каждого классификатора известны: признак Хаара, использующийся в этом классификаторе, его положение внутри окна размером 24х24 пикселя и значение порога E.

На вход алгоритму поступает изображение I(r,c) размером WхH, где I(r,c) – яркостная составляющая изображения. Результатом работы алгоритма служит множество прямоугольников R(x,y,w,h), определяющих положение лиц в исходном изображении I.

Алгоритм сканирует изображение I на нескольких масштабах, начиная с базовой шкалы: размер окна 24х24 пикселя и 11 масштабов, при этом каждый следующий уровень в 1.25 раза больше предыдущего, по рекомендации авторов. Алгоритм распознавания выглядит следующим образом:

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

Структура классификатора:

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

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

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

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

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

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

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

3.3 Программная реализация

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

CvHaarClassifierCascade *cascade_frontal_face = (CvHaarClassifierCascade *)cvLoad("D:/openCV/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml", 0, 0, 0);

CvHaarClassifierCascade *cascade_profile_face = (CvHaarClassifierCascade *)cvLoad("D:/openCV/opencv/sources/data/haarcascades/haarcascade_profileface.xml", 0, 0, 0);

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

Захватив изображение с камеры переводим в градации серого:

cvCvtColor(frame, gray, CV_RGB2GRAY);

  • frame – входное изображение,

  • gray – выходное,

  • CV_RGB2GRAY– конвертирование из RGB-пространства в оттенки серого (значение интенсивности вычисляется как взвешенная линейная свертка интенсивностей по всем трем каналам R,G,B):

Y = 0.3R + 0.59G + 0.11B

Далее полученное изображению передаем в функцию, реализующую детектор лица Виолы-Джонса:

cvHaarDetectObjects(gray, cascade, MemStorage, 1.1, 3, CV_HAAR_FIND_BIGGEST_OBJECT|CV_HAAR_SCALE_IMAGE , cvSize(50, 50))

  1. gray - целевое изображение, к которому применяется каскад;

  2. cascade – обученная модель

  3. MemStorage – хранилище памяти

  4. 1.1 - коэффициент увеличения масштаба

  5. 3 - минимальный соседний порог

  6. CV_HAAR_FIND_BIGGEST_OBJECT – находит наибольшее лицо

  7. CV_HAAR_SCALE_IMAGE

  8. cvSize(50, 50) - минимальный размер, по которому производится поиск, нужно задать как можно меньше, так как какой масштаб лица будет – не определено.

На выходе функции получаем минимальный ограничивающий прямоугольник, содержащий лицо человека и передаем его модулю слежения:

CvRect (x,y,width,height),

где (x,y) – координаты нижней левой точки прямоугольника, width – ширина, height – высота.

В общем, алгоритм в цикле while() можно представить следующими шагами:

  1. Получение нового изображения.

  2. Детектирование лица в фронтал

  3. Если лицо не найдено, то используется другая модель для поиска лица в профиль.

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