Для этого типа применения распознавания лиц оно обычно делится на несколько этапов:
-
Распознавание лиц. Область, в которой распознается лицо. и ряд исправлений.
-
Выравнивание лица. Калибровка лица относится к поиску таких мест, как нос, глаза, рот и т. д. на изображении.
Как показано на рисунке, красный прямоугольник выполняет обнаружение, а белая точка выполняет калибровку. -
Распознавание информации. Анализируйте и идентифицируйте информацию, такую как пол и возраст.
Каждый из этих трех вопросов, возможно, представляет собой очень широкую область исследований, над которой стоит проделать большую работу. В этой статье представлены лишь некоторые краткие сведения.
Распознавание лиц
Метод Виолы-Джонса
Традиционным алгоритмом распознавания лиц является алгоритм Виолы-Джонса. Функция распознавания лиц в OpenCV также использует этот алгоритм. Он состоит из трех основных этапов: функции, подобные Хаару, классификатор Adaboost и каскадный классификатор Cascade.
Хаар-подобные черты
Так называемая особенность Хаара на самом деле хорошо изучена. Хаар-подобные функции напоминают следующее изображение:
Так называемое Хаар-подобное собственное значение представляет собой сумму значений белых пикселей на рисунке, и получается разница между суммой и значением черного пикселя. который
feature=sum(white)-sum(black)
Но таких черт в картине много. Согласно статье Виолы-Джонса, в изображении 24*24 будет целых 180 000 признаков, подобных Хаару (конкретный метод расчета будет обсуждаться позже). Итак, мы можем представить технику интегрального изображения. Интегральное изображение — это изображение того же размера, что и исходное изображение, за исключением того, что значение пикселя каждой точки представляет собой сумму всех значений пикселя ее верхнего левого угла. Как показано
На таком изображении мы записываем значение пикселя определенной точки как ii(x), затем, когда мы хотим вычислить сумму всех пикселей в области D, используем ii(4)-ii(2)-ii(3 )+ ii(1) достаточно. Это может значительно сократить время вычислений и повысить эффективность.
Адабуст метод
С функциями очень легко получить отличительную функцию. Это могут сделать обычные методы SVM и методы KNN. Но хотя сам расчет не сложен, особенностей Хаара все же слишком много. Особенно сейчас, когда разрешение картинок исчисляется тысячами. Очень важно выбрать из этих признаков подходящие. Практический результат разработки состоит в том, что мы можем объединить множество слабых классификаторов в один сильный классификатор. Это метод Adaboost. Математически это можно выразить так:
F(x) =Σαf(x)
где F — сильный классификатор, а f — слабый классификатор. x — вектор признаков, а α — вес. Adaboost — это способ сериализации, который должен пройти много шагов. Возьмите пример.
На изображении выше каждая точка данных имеет метку класса, поэтому давайте установим красный цвет на 1, а зеленый на -1. Каждая точка данных также имеет вес wt. Все начальные веса равны 1.
Давайте посмотрим на это по желанию.
Кажется, совсем неправильно. Мы можем выбрать относительно хороший после нескольких переводов. Хотя выглядит как бардак.
Это лучший результат, когда есть только одна линейная статистическая сумма, но все еще есть много неправильных результатов, мы могли бы также увеличить их вес.
В это время была обнаружена новая проблема Аналогично мы классифицируем точки данных под текущими весами.
После этого вес ошибочно разделенных точек увеличивается, и деление выполняется снова.
После нескольких повторений на основе нескольких линейных классификаторов (или слабых классификаторов) может быть построен нелинейный классификатор (сильный классификатор). Более того, этот классификатор также относительно хорошо справился с задачей классификации.
Я также сделал гифку, чтобы показать эффект.
Каскадный классификатор
Третьим важным моментом в методе VJ является использование каскадных классификаторов. Проще говоря, это сначала отсортировать несколько сильных классификаторов, полученных методом Adaboost, а принцип сортировки просто поставить на первое место. Поскольку лица обычно занимают лишь небольшую часть, безопасно отбрасывать большинство областей, не относящихся к лицам, в первых нескольких слоях классификаторов. Пока предыдущий уровень отклоняет его, он не переходит к классификатору следующего уровня, что может значительно повысить скорость. Его суть — вырожденное дерево решений.
результат
В статье Виолы и Джонса для обнаружения фронтальных лиц построено в общей сложности 38 слоев классификаторов. Было использовано 4916 лиц, размеченных вручную и настроенных на разрешение 24*24. Результаты теста следующие: