Précédent   Forum des professionnels en informatique > C et C++ > Bibliothèques > OpenCV
OpenCV Vos questions sur l'API de traitement d'images OpenCV.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/09/2011, 16h42   #1
Invité de passage
 
Homme Stéphane
Chargé d'affaire
Inscription : juillet 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chargé d'affaire
Secteur : Distribution

Informations forums :
Inscription : juillet 2011
Messages : 7
Points : 3
Points : 3
Par défaut fichier haarcascade+une seule éxécution

Bonjour,
Je débute avec opencv et je teste actuellement haarcascade. Mon but est de pouvoir détecté sur une image une face, puis à l'intérieur une détection de lefteye et une seul car en principe on a qu'un oeil gauche etc..
C'est je pense un truc simple de programmeur mais je débute, donc si on est dans face je peux mettre lefteye et qu'un seul, puis righteye , puis nose etc.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
 
#include <stdio.h>
#include "cv.h"
#include "highgui.h"
 
CvHaarClassifierCascade *cascade;
CvHaarClassifierCascade *cascade2;
CvMemStorage			*storage;
 
void detectFaces( IplImage *img );
 
int main( int argc, char** argv )
{
	CvCapture *capture;
	IplImage  *frame;
	int       key;
	char      *filename = "haarcascade_frontalface_alt_tree.xml";
    char      *filename2 = "haarcascade_mcs_mouth.xml";
	cascade = ( CvHaarClassifierCascade* )cvLoad( filename, 0, 0, 0 );
	cascade2 = ( CvHaarClassifierCascade* )cvLoad( filename2, 0, 0, 0 );
	storage = cvCreateMemStorage( 0 );
	capture = cvCaptureFromCAM( 0 );
 
	assert( cascade && storage && capture );
 
	cvNamedWindow( "video", 1 );
 
	while( key != 'q' ) {
		frame = cvQueryFrame( capture );
 
		if( !frame ) {
			fprintf( stderr, "Cannot query frame!\n" );
			break;
		}
 
		cvFlip( frame, frame, -1 );
		frame->origin = 0;
 
		detectFaces( frame );
 
		key = cvWaitKey( 10 );
	}
 
	cvReleaseCapture( &capture );
	cvDestroyWindow( "video" );
	cvReleaseHaarClassifierCascade( &cascade );
	cvReleaseMemStorage( &storage );
 
	return 0;
}
 
void detectFaces( IplImage *img )
{
    int i;
 
	CvSeq *faces = cvHaarDetectObjects(
			img,
			cascade,
			storage,
			1.1,
			3,
			0 /*CV_HAAR_DO_CANNY_PRUNNING*/,
			cvSize(40,40) );
 
	for( i = 0 ; i < ( faces ? faces->total : 0 ) ; i++ ) {
		CvRect *r = ( CvRect* )cvGetSeqElem( faces, i );
		cvRectangle( img,
					 cvPoint( r->x, r->y ),
					 cvPoint( r->x + r->width, r->y + r->height ),
					 CV_RGB( 255, 0, 0 ), 1, 8, 0 );
	}
 
	int j;
 
	CvSeq *eye = cvHaarDetectObjects(
			img,
			cascade2,
			storage,
			1.1,
			3,
			0 /*CV_HAAR_DO_CANNY_PRUNNING*/,
			cvSize(40,40) );
 
	for( j = 0 ; j < ( eye ? eye->total : 0 ) ; j++ ) {
		CvRect *r = ( CvRect* )cvGetSeqElem( eye, j );
		cvRectangle( img,
					 cvPoint( r->x, r->y ),
					 cvPoint( r->x + r->width, r->y + r->height ),
					 CV_RGB( 10, 0, 0 ), 1, 8, 0 );
	}
 
 
 
 
	cvShowImage( "video", img );
 
}
Actuellement, je ne sais pas dire si une face est détecter et si je suis dedans ou pas pour pouvoir ensuite mettre les eye par exemple.
Si quelqu'un pouvais me donner une piste, merci d'avance...

Stéphane
harold44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 18h25   #2
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 2
Points : 2
Points : 2
Bonjour,
peux être est-ce un peux tard, néanmoins, cette piste pourra peux être vous aider :
- A condition d'avoir un bon éclairage, je n'ai aucun probleme pour détecter mon visage. Si il n'est pas détecté, le pointeur (CvSeq *faces) pointe sur nulle.
- De la, on peux remarquer facilement que l'oeuil gauche se trouve dans une zone situé à gauche du milieu du visage, ... Donc avec un cvsetRoi (de mémoire) pour selectionner la zone de l'image qui contient l'oeuil, tu pourra ne récuppérer que l'oeuil qui t'interresse.

Un petit conseil à part, pour détecter un point quelconque du visage, j'ai remarqué que (haarcascade_mcs_eyepair_small) est celui qui est le plus rapide.
robin.moussu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 18h48   #3
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 2
Points : 2
Points : 2
par hasard, j'ai trouve ce lien dans la doc de opencv 1.3
http://opencv.itseez.com/doc/tutoria...lassifier.html
il repond parfaitement a ton probleme ce me semble
robin.moussu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h12.


 
 
 
 
Partenaires

Hébergement Web