2010-11-26 46 views
12

Je ne suis pas sûr si cela est solvable, mais je pense que je vais demander quand même.Comment vérifier si une image contient un visage et il est raisonnablement visible

Dans mon entreprise, nous faisons face à des camps d'enrôlement massifs où de petites équipes de 5 à 10 personnes vont dans un village et y recrutent des gens. L'inscription implique la saisie de certaines données, la capture des empreintes digitales et la prise d'une photo de l'utilisateur final à l'aide d'une webcam. Naturellement, l'inscription est effectuée par des fournisseurs externes auxquels nous avons externalisé l'activité.

Étant donné que le nombre d'enregistrements est écrasant, la tentative de vérification manuelle des enregistrements ralentit l'ensemble du processus. Nous avons donc automatisé autant de choses que possible, sauf pour une chose, qui est de vérifier si la photo capturée à l'aide de la webcam est de bonne qualité. Je sais, "bonne qualité" est un terme vague qui ne peut pas être traduit à une solution basée sur le logiciel. Cependant, tout en essayant de définir la bonne qualité à moi-même, j'ai trouvé ceci: http://en.wikipedia.org/wiki/Image_quality

Maintenant, en arrivant finalement à ma question, quelles parties de ces contrôles de qualité d'image peuvent être automatisés.

Remarque: Les photographies seront imprimées sur une carte à puce en format tampon. Ils auraient à peine 100x125 pixels à 300 DPI.

Cheers, Raghu

+1

Je sais que certaines nouvelles caméras ont des «fonctions de reconnaissance de visage», alors évidemment quelqu'un a mis du temps dans ce domaine. Bonne chance! –

Répondre

4

La bibliothèque openCV a un excellent code pour détecter les visages. Vous pouvez truquer quelque chose en utilisant la détection de visage openCV comme un seuil pour la qualité de l'image - si elle détecte avec succès un visage, c'est probablement plutôt bon? http://sourceforge.net/projects/opencvlibrary/

+1

En fait j'ai fini d'utiliser cette technique. J'ai utilisé EmguCV, un wrapper .NET autour de la bibliothèque OpenCV et utilisé la détection de visage basée sur HaarCascade. Pour éliminer les faux positifs, j'essaie également de rechercher d'autres traits du visage tels que les yeux, le nez et la bouche. Si au moins 2 caractéristiques sont trouvées, je conclus que la photo est de qualité acceptable. Le système est opérationnel depuis quelques mois maintenant et il semble fonctionner correctement, à l'exception de quelques photographies faiblement éclairées. – Raghu

6
+1

En fait, ce n'est pas une mauvaise idée, environ 6 mois avant le lancement de Kinnect, je faisais "trouver les mains gauche et droite et marquer la tête", et de ce que je pouvais jurer, c'était l'entrée du Kinnect. capturer. Je pense que MS l'utilisait pour améliorer ses algorithmes de détection de visage et de main. –

7

L'algorithme de Viola-Jones est un classique. Here vous pouvez trouver un document sur sa mise en œuvre, mais vous trouverez beaucoup de ressources là-bas.

Ma photo préférée:

alt text

Here vous pouvez trouver un cadre pour .Net mise en œuvre du alg. (c'est gratuit)

Ps: Notez que certaines formes de vie extraterrestres peuvent renvoyer des faux positifs.

+0

Lien cassé pour l'implémentation .NET J'ai bien peur - mais [ceci] (http://accord-framework.net/) pourrait être dans le domaine ... 'Accord.Vision.Detection.HaarObjectDetector'? – PeterX

2

La détection de visage est un sujet de recherche très actif et des articles publiés tout le temps dans des conférences de vision par ordinateur telles que ECCV, ICCV. Dans cette année ECCV2010 il y avait même un workshop on face detection. Donc, oui, il est solvable à un degré raisonnable.

Si j'étais vous je construirais quelque chose de très simple mais qui peut faire face à l'essentiel de l'éclairage, de la couleur de peau, et de la variance de cadrage. Vous n'aurez pas besoin de quelque chose de sophistiqué, comme Viola-Jones, si vous savez que les photos sont généralement des mugshots. Vous devriez construire un système de vérification d'image (cette image ressemble-t-elle à une image d'identité?) Plutôt qu'un système de détection de visage (où sont les visages dans cette image?). Tout d'abord, il suffit de vérifier les bases de l'image - par exemple en utilisant un histogramme d'intensité pour s'assurer que l'éclairage est correct (pas trop clair, trop sombre), que l'image a un contraste (différentes nuances), etc.Ensuite, vous pourriez construire un système de vérification de face/mugshot - construire un espace de visage comme dans le classique 'Eigenfaces for Recognition', puis déterminer si chaque photo d'identité est suffisamment similaire à une photo dans ce sous-espace. (C'est une technique assez simple et beaucoup de code est disponible sur le web pour le faire).