Detector de ojos
Una vez hemos detectado un rostro con opencv quizás nos
interesa la detección de ojos, opencv cuenta con clasificadores en cascada
entrenados para la detección de ojos, podemos detectar los ojos cerrados o
abiertos.
haarcascade_mcs_lefteye.xml,
haarcascade_mcs_righteye.xml
haarcascade_lefteye_2splits.xml,
haarcascade_righteye_2splits.xml
Clasificadores que detectan ojos abiertos:
haarcascade_eye.xml
haarcascade_eye_tree_eyeglasses.xml
Para que la detección de ojos funcione correctamente debemos
definir una región de búsqueda que no es más que una porción de la imagen donde
deseamos detectar el ojo, si ya tenemos la región que contiene el rostro (mira detección de rostros) podemos usar estos
valores para determinar la región correspondiente para cada clasificador:
Clasificador
|
EYE_SX
|
EYE_SY
|
EYE_SW
|
EYE_SH
|
haarcascade_eye.xml
|
0.16
|
0.26
|
0.30
|
0.28
|
haarcascade_mcs_lefteye.xml
|
0.10
|
0.19
|
0.40
|
0.36
|
haarcascade_lefteye_2splits.xml
|
0.12
|
0.17
|
0.37
|
0.36
|
Veamos como extraer los rectángulos que contienen la región para
los ojos izquierdo y derecho, ya que debemos usar un detector diferente para el
ojo izquierdo y derecho, este código extrae las regiones para ambos ojos:
int leftX = cvRound(face.cols * EYE_SX);
int topY = cvRound(face.rows * EYE_SY);
int widthX = cvRound(face.cols * EYE_SW);
int heightY = cvRound(face.rows * EYE_SH);
int rightX = cvRound(face.cols * (1.0-EYE_SX-EYE_SW));
Mat topLeftOfFace = faceImg(Rect(leftX, topY, widthX,heightY));
Mat topRightOfFace = faceImg(Rect(rightX, topY, widthX,heightY));
Estimado
ResponderEliminarComo con el codigo que proporcionaste se puede puede encontrar el centro del ojo?
Saludos
Este código es bastante simple solo muestra el funcionamiento de los detectores, más adelante profundizare el la detección de ojos.
EliminarComo tomaste los valores del clasificador?
ResponderEliminarGracias por el aporte, estuve tratando de correr este codigo en vs c++ 2010 express y me salen dos errores
ResponderEliminarmain.cpp(30): error C2143: error de sintaxis : falta ',' delante de ':'
main.cpp(31): error C2143: error de sintaxis : falta ';' delante de '{'
Si pudieras ayudarme a resolver este error mil gracias
Ocurre que VS-10 no admite C++ 11 por lo que deberás cambiar el for in de la linea 30. De este modo:
Eliminarfor(int i = 0; i < rect.size(); i++)
{
rectangle(imagen,
Point(rect[i].x, rect[i].y),
Point(rect[i].x + rect[i].width, rect[i].y + rect[i].height),
CV_RGB(0,255,0), 2);
}
hola, el programa no me quiere correr y muestra todo tipos de errores, tengo visual studio 2013 express y creo que ese es el problema. puedo saber en qué version lo estas simulando y qué version de opencv usas? tambn lo simulé en Dev c++ y me da error en using namespace cv, y tambien en en #include me gustaria que corriera bien me es interesante y tiene muchas aplicaciones, espero su ayuda, gracias.
ResponderEliminar* " y tambien en en #include < opencv2 \ opencv. hpp >"
ResponderEliminarUso la versión 2.4.6 en vs 2012 Profesional.
EliminarPuede ser que hayas instalado opencv de manera incorrecta, mira:
http://acodigo.blogspot.com/2013/05/instalar-opencv-para-python-en-windows.html
como puedo correr este codigo en ubuntu?
ResponderEliminarbroter no me detecta los ojos correctamente solo indica posiciones extraviadas me podrias auxiliar?
ResponderEliminarAlguien que me pueda ayudar con ese código pero en python. Por favor
ResponderEliminarHola! una pregunta. la región de búsqueda de ojos, de donde sacaste esos valores? estan en la documentacion de OpenCV? Gracias!
ResponderEliminarCómo agregaría una imagen a los ojos en logar de un rectangle
ResponderEliminarcayo el link de descarga. por favor seria tan amable pasarnos nuevamente
ResponderEliminarEnlace reparado.
Eliminar