Bonjour à tous,
Je me posais comme question, par simple curiosité au niveau de la programmation, si vous aviez une idée de comment on pouvait s'y prendre pour qu'un algorithme puisse détecter un visage humain - et plus particulièrement qu'il puisse repérer où se trouvent les yeux, narives et la bouche.
Emeth.
Détecteur de visages
Débuté par Emeth, nov. 09 2010 02:23
1 réponse à ce sujet
#1
Posté 09 novembre 2010 - 02:23
« Il ne faut pas craindre la machine qui se rebelle contre l'homme, mais l'homme qui lui a donné goût à cela. »
#2
Posté 09 novembre 2010 - 10:07
Bonsoir, pour le principe je passe mon tour, mais pour la pratique il existe une très puissance librairies gratuite dev par Intel qui sert à faire du traitement d'image, et notamment du tracking de couleurs, de visages... Cette lib s'appelle OpenCV et il existe plusieurs plugin pour différents langages (Processing, OpenFramework, python...) ou sinon on coder direct en C\C++. C'est multiplateforme, on peut acquérir une image depuis une webcam ou un film vidéo etc.
A titre d'exemple voila le code sous Processing pour faire le traking de visage:
import hypermedia.video.*; import java.awt.Rectangle; OpenCV opencv; // contrast/brightness values int contrast_value = 0; int brightness_value = 0; void setup() { size( 176*2,144*2 ); opencv = new OpenCV( this ); opencv.capture( 176, 144 ); // open video stream opencv.cascade( OpenCV.CASCADE_FRONTALFACE_ALT ); // load detection description, here-> front face detection : "haarcascade_frontalface_alt.xml" // print usage println( "Drag mouse on X-axis inside this sketch window to change contrast" ); println( "Drag mouse on Y-axis inside this sketch window to change brightness" ); } public void stop() { opencv.stop(); super.stop(); } void draw() { // grab a new frame // and convert to gray opencv.read(); opencv.contrast( contrast_value ); opencv.brightness( brightness_value ); PImage couleur = opencv.image(); opencv.convert( GRAY ); // proceed detection Rectangle[] faces = opencv.detect( 1.2, 2, OpenCV.HAAR_DO_CANNY_PRUNING, 40, 40 ); // display the image image( couleur, 0, 0 ); image(opencv.image(),176,144); // draw face area(s) noFill(); stroke(255,0,0); for( int i=0; i<faces.length; i++ ) { rect( faces[i].x, faces[i].y, faces[i].width, faces[i].height ); rect( faces[i].x+176, faces[i].y+144, faces[i].width, faces[i].height ); } } /** * Changes contrast/brigthness values */ void mouseDragged() { contrast_value = (int) map( mouseX, 0, width, -128, 128 ); brightness_value = (int) map( mouseY, 0, width, -128, 128 ); }
-------
Robotiquement votre,
saq__d__aus
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users