Обнаружение данного лица в базе данных изображений лица

110

Я работаю над небольшим проектом с участием лиц пользователей твиттера через их фотографии в профиле.

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

Чтобы отфильтровать их, как я могу программно определить, является ли изображение Джастина Бибера?

ʞɔıu
источник
17
Какая у вас платформа разработки? Это легко сделать в .NET, потому что он превосходит все остальные среды программирования. Просто вызовите функцию Page.EradicateBieber (). Microsoft предвидела эту необходимость и любезно предоставила ее нам из коробки в .NET 4.5. (Тем из вас, кто работает на старых версиях, придется подождать.) (Это, конечно, все насмешливо.)
32
Я думаю, что могу смело утверждать, что ТАК не нужен [justin-bieber]тег.
Скаффман
2
Я могу с уверенностью утверждать, что люди тратят больше голосов на комментарии и этот вопрос, чем на закрытый вариант (тот, который заслуживает голосов).
20
Аудиофильтр Джастина Бибера тоже подойдет

Ответы:

49

Лучшей идеей может быть удаление всех изображений, которые появляются в ленте более чем одного пользователя - распознавание не требуется.

PPPPPP
источник
2
Да, может быть установлен порог в 2-4 возможных дублирования (для обработки случая новорожденного) до того, как вы отклоните фотографию. Я полагаю, зависит от того, что вы собираетесь делать с фотографиями.
Марк Бесси
3
Простое, элегантное решение. +1.
Роберт Харви
13
Люди могут использовать разные картинки одного и того же человека.
Ребекка Чернофф
(+1) в Ребекке и (-1) @ PPPPPP: Это только снимает проблему.
Штеффен
4
Они могли бы, но в большинстве случаев они будут выбирать из относительно небольшого пула изображений, так что это, вероятно, все еще будет работать. Будь прокляты крайние случаи - ведь ты все равно знаешь, что моя фотография - моего дяди.
naught101
16

У меня есть ощущение, что http://www.tineye.com/commercial_api может быть решением здесь. Просто бросьте изображение профиля Twitter в Tineye, посмотрите, возвращает ли оно изображения (и связанные URL-адреса), которые могут быть четко идентифицированы (или автоматически оценены с использованием простой логики подсчета слов) как связанные с (или из) небольшим мешком * *.

Simples!

Бенджамин Ховарт
источник
1
Google недавно объявил о поиске изображений: youtube.com/watch?v=t99BfDnBZcI Я пока не знаю, есть ли у него API, но это может быть альтернативой.
Петричор
11

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

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

Майкл МакГоуэн
источник
2
К сожалению, этап создания функции является и самым сложным, и самым важным :(.
steffen
@steffen Есть некоторые предположения, что ОП портит грани, так что имейте некоторый генератор дескрипторов.
@mpq: Я не сомневался в том, что, однако, если у ОП нет одного признака на пиксель, он должен найти значимый уровень агрегации. Я не отрицал, я просто хотел указать на сложность, которая лежит в основе этого ответа (который, конечно, правильно).
Штеффен
1
Правильно, шаг создания функции - сложная часть. Я предполагал, что OP мог бы сделать это, так как у него уже есть некоторый механизм для обработки изображений. Даже если он это делает, хотя они могут быть полезны только для определения лица / не лица вместо Бибера / не Бибера ... это действительно зависит от функций.
Майкл МакГоуэн
7

Вы можете использовать такой метод, как eigenfaces, http://en.wikipedia.org/wiki/Eigenface . Ниже приведено хорошее описание процедуры, а также ссылки на различные реализации.

http://www.pages.drexel.edu/~sis26/Eigenface%20Tutorial.htm

Отсюда обычно использовать это в подходе классификации, обучать модель и затем предсказывать случаи. Вы можете сделать это, обучив кучу известных знаменитостей, и, если вы предскажете лицо из твиттера как лицо из вашей обученной модели знаменитостей, удалите его. Аналогично этому http://blog.cordiner.net/2010/12/02/eigenfaces-face-recognition-matlab/

Это страдает от постоянных поправок. Вскоре появится новый Джастин Бибер, которого не будет в вашей обученной модели, поэтому вы не можете предсказать его. Есть также такой случай, как Уитни Хьюстон, вы, возможно, никогда не думали добавить ее раньше, но она может быть обычным образом из уважения и восхищения в течение нескольких недель. Вы не будете иметь обратную сторону детских фотографий, как упомянуто выше, хотя. Чтобы преодолеть эти проблемы, вы можете использовать более иерархический кластерный подход. Удаляя первые несколько наборов кластеров, которые находятся очень близко, если они достигают определенного уровня поддержки, ваш первый кластер имеет 15 элементов, прежде чем будет создан второй. Теперь вам не нужно беспокоиться о том, кто в вашей тренировочной модели, но вы попадете на проблему детских фотографий.

darrelkj
источник
3

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

Но есть также очень хороший проект, работающий над распознаванием лиц http://opencv-code.com/Opencv_Face_Detection

404Dreamer_ML
источник
1
AFAIK OpenCV и связанный сайт реализуют только распознавание лиц (здесь на изображении человеческое лицо?), Что является лишь первым шагом к распознаванию лиц (чье это лицо?)
f3lix,
2

Вы можете попробовать локальное хеширование .

Xodarap
источник
1
Обычный КНН не очень хорош для лица. Было показано, что грани лежат на ~ 25-мерном нелинейном многообразии картинок.
Bayerj