P OB T ECHNOLOGY D ETECTION DE VISAGE PAR WEBCAM
POB TECHNOLOGY – Tous droits réserves INFORMATIONS LEGALES
Entreprise POB-Technology
Type SARL
SIRET 483 594 386 000 28
APE 742C
CONTACTS
Adresse POB-Technology
11, avenue Albert Einstein 69 100 VILLEURBANNE FRANCE
Adresse mail [email protected]
Téléphone +33 (0)4 72 43 02 36
Fax +33 (0)4 83 07 50 89
GESTION DU DOCUMENT
Nom de Fichier Cam_detection_fr.pdf
Date de création 28/05/2009
Auteur Romain Etchegoyhen – Rémi Bruyas
Alisson Foucault
Modification 09/07/2009
TABLE DES MATIERES
1. Présentation ... 4
1.1 Généralités ... 4
1.2 Outils nécessaires ... 4
2. Connexion et mise en route ... 5
2.1 Dual-POB et PC ... 5
2.2 Dual-POB et servomoteurs ... 5
2.3 Webcam et PC... 5
3. Annexe : code & ressources ... 6
3.1 Programme d’exécution DUAL-POB ... 6
3.2 Programme de détection faciale ... 7
POB TECHNOLOGY – Tous droits réserves 1. PRESENTATION
1. 1 GÉNÉRALITÉS
Ce document vous présentera une manière originale d’utiliser votre Dual-POB combinée à deux servomoteurs et une webcam. Vous serez guidés pas à pas afin de concevoir une webcam qui détectera et suivra vos visages.
Ci-dessous vous trouverez la liste des programmes nécessaires à cette réalisation.
1.2 OUTILS NÉCESSAIRES
Afin de concevoir votre webcam mobile, il vous faudra vous doter d’un Dual-POB, de deux servomoteurs, Coté logiciel, POB-tools, le driver de votre webcam, ainsi que l’exécutable fournit suffiront à une exécution de la détection. Pour la modifier et concevoir votre propre programme d’animation des servomoteurs, d’autres logiciels seront nécessaires, tels que OpenCV et Visual Studio. La grande majorité de ce matériel se trouve très facilement sur notre site commercial robot-advance ( http://www.robot-advance.com/FR/).
AF
2. CONNEXION
Cette partie du document vous aidera à connecter et charger les programmes nécessaires à l’utilisation de notre webcam animée.
2.1 DUAL-POB ET PC
Afin de charger votre programme sur votre Dual-POB, connectez votre Dual-POB à votre PC via le câble mini- USB. Une fois votre carte alimentée et connectée, utiliser l’outil d’upload Dual-POB pour charger le
programme Cam-detection.hex fournit.
2.2 DUAL-POB ET SERVOMOTEURS
Les servomoteurs animant votre webcam doivent être lié à votre Dual-POB selon le schéma suivant :
2.3 WEBCAM ET PC
Prenez soin d’avoir installé les pilotes de votre webcam lors que vous tenterez de l’utiliser. Si vous n’avez plus le cd-rom d’installation, vous pourrez retrouver vos pilotes sur le site constructeur, ou encore en suivant l’assistant de configuration windows. Une fois les pilotes installés, vous pouvez connecter votre webcam au PC via son câble USB.
Il ne vous reste plus qu’a lancer l’exécutable (FaceDetection.exe), et votre Webcam détectera et suivra vos visages !
POB TECHNOLOGY – Tous droits réserves 3. ANNEXE: CODE & RESSOURCES
Vous trouverez dans cette partie tout ce qui est propre au code source des programmes utilisés, ainsi que les outils nécessaire à leur conception, voir amélioration.
Remarque : Attention, le code à été conçu sous Visual Studio, logiciel sous licence. Ce qui suit se reposera donc sur une modification du code via Visual Studio uniquement.
3.1 PROGRAMME D’EXECUTION DUAL-POB
int main() {
UInt8 defDirHB = 180, defDirDG = 92;
UInt8 DirHB = 0, DirDG = 1;
unsigned char buffer[4], value[2];
SetIOWay(IO_AS_DEFAULT, IO_AS_DEFAULT, IO_AS_DEFAULT, IO_AS_DEFAULT);
InitUART0(115200);
InitDualServo();
// 200 is top - less then 200 goes down, more goes up // 125 is max down, 225 is max up
SetServo(DirHB, defDirHB, 7);
// 92 is front - less than 95 turns right, more turns left // 0 is max right, 200 is max left
SetServo(DirDG, defDirDG, 7);
while(1) {
GetBufferFromUART0(&buffer[0], 3);
buffer[3] = '\0';
if (strcmp((const char *)buffer, "CDG") == 0) {
GetBufferFromUART0(&value[0], 1);
value[1]= '\0';
defDirDG = (int)value[0];
SetServo(DirDG, defDirDG, 7);
}
else if (strcmp((const char *)buffer, "CUP") == 0) {
if (defDirHB > 223) {
defDirHB = 225;
SetServo(DirHB, defDirHB, 7);
} else {
defDirHB = defDirHB + 2;
SetServo(DirHB, defDirHB, 7);
} }
3.2 PROGRAMME DE DETECTION FACIALE
L’exécutable FaceDetection.exe à été conçu sous Visual Studio avec une librairie OpenCV (Open Source Computer Vision). Il s’agit d’une bibliothèque développée par la société Intel, qui propose un ensemble d'objets et de fonctions en C/C++ liés à la détection par ordinateur. Elle est gratuite et multi plateformes.
Vous pouvez télécharger à partir de ce lien : OpenCV et vous trouverez la documentation à cette adresse : http://www.cognotics.com/opencv/docs/1.0/index.html.
INSTALLATION & CONFIGURATION
Une fois sur le site, il vous suffit ensuite de télécharger opencv-win, la suite se déroule comme pour toutes les installations sous Windows : lancez l'installeur, et laissez-vous guider. Une fois l’installation d’OpenCV
complète, lancez Visual Studio. Il vous faut maintenant intégrer la librairie OpenCV à Visual Studio.
Lancez Visual C++, puis consultez le menu Outils => Options. Dans la liste de gauche, choisissez Projets et solutions -> Répertoires de VC++, ensuite sélectionnez Fichiers bibliothèques dans la liste tout à droite enfin cliquez sur l'icône Nouveau Dossier.
else if (strcmp((const char *)buffer, "CDO") == 0) {
if (defDirHB < 127) {
defDirHB = 125;
SetServo(DirHB, defDirHB, 7);
} else {
defDirHB = defDirHB - 2;
SetServo(DirHB, defDirHB, 7);
} }
}
return 0;
}
POB TECHNOLOGY – Tous droits réserves Sélectionnez alors le répertoire C:\Program Files\OpenCV\lib.
De la même manière, sélectionnez Fichiers Include dans la liste déroulante, et ajoutez les répertoires suivants :
• C:\Program Files\OpenCV\cv\include
• C:\Program Files\OpenCV\cxcore\include
• C:\Program Files\OpenCV\otherlibs\highgui
• C:\Program Files\OpenCV\cvaux\include
Ensuite, en choisissant l'option Fichiers source, ajoutez les répertoires :
• C:\Program Files\OpenCV\cv\src
• C:\Program Files\OpenCV\cxcore\src
• C:\Program Files\OpenCV\cvaux\src
• C:\Program Files\OpenCV\otherlibs\highgui
Maintenant que la librairie est intégrée au logiciel, il faut l’intégrer au projet lui-même. Créez un projet
"console" sous Visual (File =>New=>Project),
Allez dans le menu Projet -> Propriétés.
Dans l'onglet Éditeur de liens, choisissez Entrée puis rajoutez, dans les Dépendances additionnelles, les librairies :
cv.lib cvaux.lib cxcore.lib highgui.lib
Enfin, N'oubliez pas d'inclure les DLL d'OpenCV dans le dossier de votre projet. Elles se trouvent dans le répertoire C:\Program Files\OpenCV\bin.
POB TECHNOLOGY – Tous droits réserves VERIFICATION
Voici un petit programme très basique qui vous permettra de vérifier si votre configuration a bien été effectuée. Glissez dans votre répertoire projet l’image de votre choix en la renommant test.jpg, puis compilez et lancez ce programme
Si vous avez bien configuré votre Visual Studio, votre image sera affichée dans la fenêtre ! PROGRAMME FACEDETECTION.C
Maintenant que Visual Studio est configuré, vous pouvez charger le code source de notre programme de détection.
#include <cv.h>
#include <highgui.h>
int main() {
// Replace "test.jpg by a picture in the directory of your project IplImage *img=cvLoadImage("test.jpg");
// Create a window
cvNamedWindow("Hello World", CV_WINDOW_AUTOSIZE);
// Show the picture
cvShowImage("Hello World", img);
cvWaitKey(0);
// Destroy window
cvDestroyWindow("Hello World");
cvReleaseImage(&img);
return 0;
}
#include <Dual-POB.h>
int main() {
UInt8 portb;
UInt8 defDirHB = 180, defDirDG = 92;
UInt8 DirHB = 0, DirDG = 1;
UInt16 y, x;
unsigned char buffer[4], value[2], position[2];
portb = (IO_AS_INPUT << PIN_7); // set the joystick button as input SetIOWay(portb, IO_AS_DEFAULT, IO_AS_DEFAULT, IO_AS_DEFAULT);
InitUART0(115200);
InitAnalog();
InitDualServo();
// 200 is top - less then 200 goes down, more goes up // 125 is max down, 225 is max up
SetServo(DirHB, defDirHB, 7);
// 92 is front - less than 95 turns right, more turns left // 0 is max right, 200 is max left
SetServo(DirDG, defDirDG, 7);
y = GetAnalog(7);
x = GetAnalog(6);
while (GetInput(INPUT_PORTB,INPUT_7) != 1) {
y = GetAnalog(7);
x = GetAnalog(6);
if (y < 100) // up {
if (defDirHB < 130) {
defDirHB = 125;
SetServo(DirHB, defDirHB, 1);
} else {
defDirHB = defDirHB - 5;
SetServo(DirHB, defDirHB, 1);
} }
else if (y > 900) // down {
if (defDirHB > 220) {
defDirHB = 225;
SetServo(DirHB, defDirHB, 1);
} else {
defDirHB = defDirHB + 5;
SetServo(DirHB, defDirHB, 1);
} }
if (x < 300) // right {
if (defDirDG < 5) {
defDirDG = 0;
SetServo(DirDG, defDirDG, 1);
} else
POB TECHNOLOGY – Tous droits réserves
______________________________________________________________________________________________
Fin du document SetServo(DirDG, defDirDG+15, 1);
SetServo(DirDG, defDirDG-15, 1);
SetServo(DirDG, defDirDGv, 1);
while(1) {
GetBufferFromUART0(&buffer[0], 3);
buffer[3] = '\0';
if (strcmp((const char *)buffer, "CDG") == 0) {
GetBufferFromUART0(&value[0], 1);
value[1]= '\0';
defDirDG = (int)value[0];
SetServo(DirDG, defDirDG, 7);
}
else if (strcmp((const char *)buffer, "CUP") == 0) {
if (defDirHB > 223) {
defDirHB = 225;
SetServo(DirHB, defDirHB, 7);
} else {
defDirHB = defDirHB + 2;
SetServo(DirHB, defDirHB, 7);
} }
else if (strcmp((const char *)buffer, "CDO") == 0) {
if (defDirHB < 127) {
defDirHB = 125;
SetServo(DirHB, defDirHB, 7);
} else {
defDirHB = defDirHB - 2;
SetServo(DirHB, defDirHB, 7);
} }
else if (strcmp((const char *)buffer, "GET") == 0) {
position[0] = defDirDG;
position[1] = defDirHB;
SendBufferToUART0(&position[0], 2);
} }
return 0;
}
Site inte Adresse Télépho Fax
ernet e mail one
CONNTACTER
POB- 11, aven 69 100
R POB-TE
-TECHNOL nue Albert
VILLEUR France
http conta +33 +33
ECHNOLO
LOGY Einstein BANNE
p://www.pob- act@pob-tech (0)4 72 43 02 (0)4 83 07 50
OGY
-technology hnology.com 2 36
0 89
y.com/