Mouth detection with openCV

I am trying to detect a mouth in an image using openCV, so I use the following code:

#include "face_detection.h" using namespace cv; // Function detectAndDisplay void detectAndDisplay(const std::string& file_name, cv::CascadeClassifier& face_cascade, cv::CascadeClassifier& mouth_cascade) { Mat frame = imread(file_name); std::vector<Rect> faces; Mat frame_gray; Mat crop; Mat res; Mat gray; cvtColor(frame, frame_gray, COLOR_BGR2GRAY); equalizeHist(frame_gray, frame_gray); // Detect faces face_cascade.detectMultiScale(frame_gray, faces, 1.1, 3, 0 | CASCADE_SCALE_IMAGE, Size(30, 30)); for(unsigned int i=0;i<faces.size();i++) { rectangle(frame,faces[i],Scalar(255,0,0),1,8,0); Mat face = frame(faces[i]); cvtColor(face,face,CV_BGR2GRAY); std::vector <Rect> mouthi; mouth_cascade.detectMultiScale(face, mouthi); for(unsigned int k=0;k<mouthi.size();k++) { Point pt1(mouthi[k].x+faces[i].x , mouthi[k].y+faces[i].y); Point pt2(pt1.x+mouthi[k].width, pt1.y+mouthi[k].height); rectangle(frame, pt1,pt2,Scalar(0,255,0),1,8,0); } } imshow("Frame", frame); waitKey(33); } 

haarcascade_frontalface_alt.xml and haarcascade_mcs_mouth.xml .

The face is detected correctly, but the mouth is missing: I also get the eyes and some other parts, such as the forehead. Is there a way to detect only the mouth?

+5
source share
2 answers

I think I managed to solve the problem: focus on the lower half of the face and increase the scale factor did the trick, and now I can detect the mouth with good accuracy. In any case, this task seems much more complicated than face recognition, even if I use "simple" images, which means a straight and full front.

Here are two examples: success and failure.

okwrong

+5
source

I had the same problem, so I focused only on the lower half of the face and created an ROI from the detected face. It looks something like this:

 Mat ROI=image(Rect(face.x,face.y+face.height*0.6,face.width,face.height*0.3)); 

Where the face is the detected face of the image.

This created an ROI from the detected face for the lower half only. In addition, the mouth detector detected the eyes as well as the mouth.

Then use MouthCascade.xml at this link: http://alereimondo.no-ip.org/OpenCV/34 which is much more efficient than the built-in OpenCV.

0
source

All Articles