Détecter un visage donné dans une base de données d'images faciales

110

Je travaille sur un petit projet impliquant les visages des utilisateurs de Twitter via leurs photos de profil.

Un problème que j'ai rencontré est qu'après avoir filtré toutes les images sauf les images qui sont claires, un pourcentage faible mais significatif d'utilisateurs de Twitter utilise une photo de Justin Bieber comme photo de profil.

Afin de les filtrer, comment puis-je déterminer par programme si une image est celle de Justin Bieber?

ʞɔıu
la source
17
Quelle est votre plateforme de développement? Cela peut facilement être fait dans .NET car il est supérieur à tous les autres environnements de programmation. Appelez simplement la fonction Page.EradicateBieber (). Microsoft prévoyait ce besoin et nous le fournissait gracieusement dans .NET 4.5. (Ceux d'entre vous qui utilisent des versions plus anciennes devront attendre.) (C'est-à-dire bien sûr ironique).
32
Je pense pouvoir affirmer sans crainte que SO n'a pas besoin de [justin-bieber]tag.
Skaffman
2
Je peux affirmer en toute sécurité que les gens dépensent plus de votes positifs pour les commentaires et cette question que pour l'option rapprochée (celle qui mérite les votes).
20
Un filtre audio Justin Bieber serait bien aussi

Réponses:

49

Une meilleure idée pourrait être de supprimer toutes les images qui apparaissent dans le flux de plusieurs utilisateurs - aucune reconnaissance requise.

PPPPPP
la source
2
Oui, définissez peut-être un seuil de 2 à 4 duplications possibles (pour traiter le cas d'un nouveau-né) avant de rejeter une photo. Cela dépend de ce que vous allez faire avec les photos, je suppose.
Mark Bessey
3
Solution simple et élégante. +1
Robert Harvey
13
Les gens pourraient utiliser différentes images de la même personne.
Rebecca Chernoff
(+1) chez Rebecca et (-1) @ PPPPPP: Cela ne fait que déplacer le problème.
steffen
4
Ils pourraient le faire, mais dans la plupart des cas, ils choisiront un groupe d’images relativement petit, donc cela fonctionnera probablement. Edge cases be damned - pour autant que vous sachiez que ma photo est de toute façon mon oncle.
naught101
16

J'ai l'impression que http://www.tineye.com/commercial_api peut être la solution ici. Envoyez simplement l'image de profil Twitter à Tineye pour voir si elle renvoie des images (et les URL associées) clairement identifiables (ou automatiquement classées à l'aide d'une simple logique de décompte des mots) comme liées à (ou à) ce petit sac de * *.

Simples!

Benjamin Howarth
la source
1
Google a récemment annoncé la recherche d’images: youtube.com/watch?v=t99BfDnBZcI Je ne sais pas s’il dispose déjà d’une API, mais c’est peut-être une alternative.
Petrichor
11

Étant donné que vous ne pouvez filtrer que sur les photos au format portrait nettes, je suppose que vous disposez d'une méthode de génération de fonctionnalités pour transformer les images brutes en fonctionnalités utiles pour l'apprentissage automatique. Si cela est vrai, vous pouvez essayer de former un algorithme de classification (il y en a beaucoup: réseaux de neurones, etc.) en fournissant à cet algorithme un ensemble de photos de Bieber connues ainsi qu'un ensemble de non-Biebers connus. Une fois que vous avez formé le modèle, il peut être utilisé pour prédire si une nouvelle image est Bieber ou non.

Ce type de technique d'apprentissage supervisé nécessite que vous disposiez de données pour lesquelles vous connaissez la bonne réponse (Bieber ou non), mais celles-ci pourraient probablement être trouvées à partir d'une recherche d'images Google. Cela nécessite également que vous disposiez des fonctionnalités appropriées, et je ne connais pas suffisamment le traitement d'images ou votre algorithme pour savoir s'il s'agit d'un inconvénient majeur.

Michael McGowan
la source
2
Malheureusement, la génération de fonctionnalités est à la fois la plus difficile et la plus importante :(.
steffen
@steffen Il semblerait que le PO manipule les visages. Il est donc préférable de disposer d'un générateur de descripteur.
@mpq: Je ne doutais pas cependant que, si le PO ne dispose pas d'une fonctionnalité par pixel, il doit trouver un niveau d'agrégation significatif. Je n'ai pas voté par voix de vote, je voulais seulement souligner la complexité qui se cache derrière cette réponse (qui est, bien sûr, correcte).
steffen
1
Oui, l'étape de la génération de fonctionnalités est la partie la plus difficile. Je pensais qu'OP pourrait le faire car il dispose déjà d'un mécanisme de traitement des images. Même s’il le fait, il ne s’agit peut-être que de caractéristiques utiles pour la détection de visage / pas de visage à la place de Bieber / pas Bieber ... cela dépend vraiment des caractéristiques.
Michael McGowan
7

Vous pouvez utiliser une méthode comme eigenfaces, http://en.wikipedia.org/wiki/Eigenface . Vous trouverez ci-dessous un bon aperçu de la procédure et des liens vers différentes implémentations.

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

À partir de là, il est courant d’utiliser cette méthode dans une approche de classification, d’entraîner un modèle, puis de prévoir les cas. Vous pouvez le faire en vous entraînant sur un groupe de célébrités connues et si vous prédisez un visage de Twitter comme étant l'un de vos modèles formés de célébrités, supprimez-le. Semblable à ceci http://blog.cordiner.net/2010/12/02/eigenfaces-face-recognition-matlab/

Cela souffre d'amendements constants. Bientôt, il y aura un nouveau Justin Bieber qui ne sera pas dans votre modèle entraîné, de sorte que vous ne pouvez pas le prédire. Il y a aussi un cas comme Whitney Houston, vous n'avez peut-être jamais pensé à l'ajouter auparavant, mais elle peut être une image commune par respect et admiration pour quelques semaines. Vous n'aurez cependant pas les inconvénients des images de bébé mentionnées ci-dessus. Pour surmonter ces problèmes, vous pouvez utiliser davantage une approche de clustering hiérarchique. Si vous supprimez les premiers groupes de clusters très proches s'ils atteignent un certain niveau de support, votre premier cluster contient 15 éléments avant qu'un deuxième ne soit construit. Maintenant, vous n'avez plus à vous soucier de qui dans votre modèle de formation, mais vous tomberez dans le problème des images de bébé.

Darrelkj
la source
3

Vous devez utiliser un algorithme détectant à quelle personne cette image fait référence. Vous pouvez créer un modèle basé sur différents portraits de personnalités célèbres et utiliser des classificateurs pour vous assurer que cette image fait référence à l'une de vos images de base de données. Vous devez utiliser un certain classifieur en fonction de différents paramètres liés au visage, tels que la distance entre les yeux ou d’autres paramètres, pour augmenter la précision de votre modèle. Il y a aussi l'analyse de la peau. Le plus important est de construire un bon classificateur. Cette méthode peut être vulnérable.

Mais il existe également un très bon projet sur la reconnaissance faciale http://opencv-code.com/Opencv_Face_Detection

404Dreamer_ML
la source
1
AFAIK OpenCV et le site référencé implémentent uniquement la détection de visage (le visage de l'homme est un visage humain?), Ce qui n'est qu'un premier pas vers la reconnaissance du visage (à qui appartient ce visage?)
f3lix
2

Vous pouvez essayer le hachage sensible à la localité .

Xodarap
la source
1
KNN Plain n'est pas très bon pour les visages. On a montré que les visages se trouvaient sur une variété non linéaire d'environ 25 dimensions des images.
bayerj