La technique dont je vais parler est plus une approche orientée machine learning; à mon avis est assez fascinant, mais pas très récent: il a été décrit dans l'article "Robust Real-Time Face Detection" par Viola et Jones. J'ai utilisé l'implémentation OpenCV pour un projet universitaire.
Il est basé sur des caractéristiques de type haar, qui consiste en des ajouts et des soustractions d'intensités de pixels dans des régions rectangulaires de l'image. Cela peut être fait très rapidement en utilisant une procédure appelée image intégrale, pour laquelle des implémentations GPGPU existent également (parfois appelées "scan préfixe"). Après le calcul de l'image intégrale en temps linéaire, toute caractéristique de type haar peut être évaluée en temps constant. Une caractéristique est fondamentalement une fonction qui prend une sous-fenêtre 24x24 de l'image S et calcule une caractéristique de valeur (S); un triplet (fonction, seuil, polarité) est appelé un classificateur faible, parce que
polarité * fonction (S) polarité < * seuil
est vrai sur certaines images et fausses sur les autres; Un classifieur faible devrait effectuer un peu mieux que la supposition aléatoire (par exemple, il devrait avoir une précision d'au moins 51-52%).
La polarité est -1 ou +1.
L'espace des caractéristiques est grand (~ 160'000 caractéristiques), mais fini. Malgré le seuil pourrait en principe être un nombre, à partir de considérations simples sur l'ensemble de formation, il s'avère que s'il y a N exemples, seulement N + 1 seuil pour chaque polarité et pour chaque caractéristique doivent être examinés afin de trouver celui qui détient la meilleure précision. Le meilleur classificateur faible peut ainsi être trouvé en recherchant exhaustivement l'espace des triplets.
Fondamentalement, un classificateur fort peut être assemblé en choisissant de manière itérative le meilleur classificateur faible possible, en utilisant un algorithme appelé «survoltage adaptatif», ou AdaBoost; à chaque itération, les exemples qui ont été mal classés dans l'itération précédente sont pesés davantage. Le classifieur fort est caractérisé par son propre seuil global, calculé par AdaBoost.
Plusieurs classificateurs forts sont combinés en tant qu'étapes dans une cascade attentionnelle; l'idée derrière la cascade attentionnelle est que les sous-fenêtres 24x24 qui ne sont évidemment pas des visages sont jetées dans les premières étapes; un classificateur fort contient généralement seulement quelques classificateurs faibles (comme 30 ou 40), donc il est très rapide à calculer. Chaque étape devrait avoir un rappel très élevé, tandis que le taux de faux positifs n'est pas très important. s'il y a 10 étapes avec 0,99 rappel et 0,3 taux de faux positif, la cascade finale aura un rappel de 0,9 et un taux de faux positifs extrêmement faible. Pour cette raison, les classificateurs forts sont généralement réglés afin d'augmenter le rappel et le taux de faux positifs. L'optimisation consiste essentiellement à réduire le seuil global calculé par AdaBoost.
Une sous-fenêtre qui se rend jusqu'à la fin de la cascade est considérée comme une face.
Plusieurs sous-fenêtres dans l'image initiale, éventuellement se chevauchant, éventuellement après la mise à l'échelle de l'image, doivent être testées.
Au revoir, je l'espère, il était intéressant ;-)
Dario
Désolé, oui, il est purement théorique. – Harry