Алгоритмы поиска похожих лиц?
Я делаю личный проект, пытаясь найти внешний вид человека, учитывая базу данных фотографий других людей, сделанных в последовательной манере-люди, смотрящие прямо в камеру, нейтральное выражение лица и без наклона головы (думаю, паспорт фото).
У меня есть система для размещения маркеров для 2d-координат на гранях, и мне было интересно, есть ли какие-либо известные подходы для поиска похожего лица с учетом этого подхода?
Я нашел следующий лицевой алгоритмов распознавания : http://www.face-rec.org/algorithms/
но никто не занимается конкретной задачей поиска похожего.
Спасибо за ваше время.
3 ответов
Я считаю, что вы также можете попробовать найти "проверку лица", а не просто "распознавание лиц". Это может дать вам более важные результаты.
строго говоря, 2 на самом деле разные вещи в научной литературе, но иногда объединяются под распознавание лиц. Подробные сведения о их отличия и некоторые примеры кода, посмотри здесь: http://www.idiap.ch/~marcel/labs/faceverif.php
однако для ваших целей, что другие, такие как Эдвард и Ари любезно предложили тоже работать. В основном они предлагают классификатор распознавания лиц в стиле K-ближайшего соседа. Для начала, вы можете попробовать. Во-первых, вычислите вектор объектов для каждого изображения лица в базе данных. Одной из возможных функций является локальный двоичный шаблон (LBP). Вы можете найти код, погуглив его. Сделайте то же самое для образа запроса. Теперь пройдите через все векторы объектов и сравните их с изображением вашего запроса с помощью euclidean расстояние и вернуть K ближайших.
хотя вышеуказанный метод легко кодировать, он, как правило, не будет таким надежным, как некоторые из более сложных, потому что они обычно терпят неудачу, когда лица не выровнены (известный как неограниченная поза. Поиск "помеченные лица в дикой природе", чтобы увидеть результаты для состояния искусства для этой проблемы.) или приняты в различных условиях окружающей среды. Но если лица в вашей базе данных выровнены и взяты в аналогичных условиях, как вы упомянули, тогда это может сработать. Если они не выровнены, вы можете использовать ключевые точки граней, которые вы упомянули, что можете вычислить, для выравнивания граней. В целом, сравнение несогласованных граней является очень сложной проблемой в компьютерном зрении и по-прежнему является очень активной областью исследований. Но если вы считаете, что лица, которые выглядят одинаково и в одной и той же позе, похожи (т. е. похожи по позе, а также внешности), это не должно быть проблемой.
на ваш сайт дал ссылки на код для собственных лиц и Fisherfaces. Это, по сути, 2 метода вычисления векторов признаков для ваших изображений лица. Грани идентифицируются путем поиска k ближайших соседей для граней в базе данных с векторами объектов (вычисленными с использованием PCA и LDA соответственно), ближайшими к изображению запроса.
Я, вероятно, также должен упомянуть, что в методе Fisherfaces вам нужно будет иметь "метки" для лиц в вашей базе данных, чтобы идентифицировать лица. Этот потому что линейный Дискриминантный анализ (LDA), метод классификации, используемый в Fisherfaces, нуждается в этой информации для вычисления проекционной матрицы, которая будет проецировать векторы признаков для похожих граней близко друг к другу и несхожих далеко друг от друга. Затем производится сравнение этих проецируемых векторов. Вот в чем разница между распознаванием лиц и проверкой лиц: для распознавания вам нужно иметь "метки" ваших обучающих изображений в вашей базе данных, т. е. вам нужно их идентифицировать. Для проверка, вы только пытаетесь сказать, являются ли какие-либо 2 Данные лица одного и того же человека. Часто вам не нужны "помеченные" данные в традиционном смысле (хотя некоторые методы могут использовать вспомогательные данные обучения, чтобы помочь в проверке лица).
код для вычисления Eigenfaces и Fisherfaces доступны в OpenCV, в случае, если вы используете его.
в качестве примечания: Вектор объектов на самом деле является просто вектором в вашем смысле линейной алгебры. Это просто n чисел упакованы вместе. Слово " функция "относится к чему-то вроде" статистики", т. е. вектор объектов-это вектор, содержащий статистику, характеризующую объект, который он представляет. Например, для задачи распознавания лиц простейшим вектором признаков будут значения интенсивности изображения лица в оттенках серого. В этом случае я просто изменяю 2D-массив чисел в n строк на 1 вектор столбца, каждая запись содержит значение одного пикселя. Значение пикселя здесь является "функцией", а n x 1 вектор значений пикселей-это вектор признаков. В случае LBP, грубо говоря, он вычисляет гистограмму на небольших участках пикселей в изображении и объединяет эти гистограммы вместе в одну гистограмму, которая затем используется в качестве вектора объектов. Поэтому местные бинарных шаблон статистики и гистограмм объединились-это векторный объект. Вместе они описали "текстуру" и рисунок Вашего лица.
надеюсь, что это помогает.
эти два кажутся эквивалентной проблемой, но я не работаю в этой области. У вас по существу есть следующие две проблемы:
распознавание лиц: возьмите лицо и попробуйте сопоставить его с человеком.
найти похожие лица: Возьмите лицо и попробуйте найти похожие лица.
разве это не равнозначно? В (1) вы начинаете с изображения, которое хотите сопоставить с владельцем, и сравниваете его с базой данных эталонные фотографии для каждого человека, которого вы знаете. В (2) вы выбираете изображение в своей справочной базе данных и запускаете (1) для этого изображения против других изображений в базе данных.
поскольку алгоритмы, похоже, дают вам меру того, насколько вероятно, что две картины принадлежат одному и тому же человеку, в (2) вы просто сортируете меры в порядке убывания и выбираете верхние хиты.
Я предполагаю, что вы должны сначала проанализировать всю картину в своей базе данных с любым подходом, который вы используете. Затем у вас должен быть набор метрик для каждого изображения, с которым вы можете сравнить конкретное изображение и статистически найти ближайшее совпадение.
например, если вы можете измерить расстояние между глазами, вы можете найти лица, которые имеют такое же расстояние. Затем вы можете найти лицо, которое имеет общий ближайший матч, и вернуть его.