Face Detection using Haar-Cascade Classifier

class CascadeClassifier - Cascade classifier class for object detection

CascadeClassifier::CascadeClassifier(const string& filename) // Constructor - Loads a classifier from a file
CascadeClassifier face_cascade( "C:/OpenCV243/data/Haarcascades/haarcascade_frontalface_alt2.xml" );

bool CascadeClassifier::empty() const // Checks whether the classifier has been loaded.bool CascadeClassifier::load(const string& filename) // Loads a classifier from a file
CascadeClassifier face_cascade;
face_cascade.load( "C:/OpenCV243/data/Haarcascades/haarcascade_frontalface_alt2.xml" ); 

bool CascadeClassifier::read(const FileNode& node) // Reads a classifier from a FileStorage node


void CascadeClassifier::detectMultiScale(const Mat& image, vector<Rect>& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size())
// Detects objects of different sizes in the input image.
// The detected objects are returned as a list of rectangles.

Parameters:   
  • cascade – Haar classifier cascade (OpenCV 1.x API only). It can be loaded from XML or YAML file using Load(). When the cascade is not needed anymore, release it using cvReleaseHaarClassifierCascade(&cascade).
  • image – Matrix of the type CV_8U containing an image where objects are detected.
  • objects – Vector of rectangles where each rectangle contains the detected object.
  • scaleFactor – Parameter specifying how much the image size is reduced at each image scale.
  • minNeighbors – Parameter specifying how many neighbors each candidate rectangle should have to retain it.
  • flags – Parameter with the same meaning for an old cascade as in the function cvHaarDetectObjects. It is not used for a new cascade.
  • minSize – Minimum possible object size. Objects smaller than that are ignored.
  • maxSize – Maximum possible object size. Objects larger than that are ignored.
bool CascadeClassifier::setImage(Ptr<FeatureEvaluator>& feval, const Mat& image)
// Sets an image for detection
Parameters:
  • cascade – Haar classifier cascade (OpenCV 1.x API only). See CascadeClassifier::detectMultiScale() for more information.
  • feval – Pointer to the feature evaluator used for computing features.
  • image – Matrix of the type CV_8UC1 containing an image where the features are computed
int CascadeClassifier::runAt(Ptr<FeatureEvaluator>& feval, Point pt, double& weight)
// Runs the detector at the specified point. The function returns 1 if the cascade classifier detects an object in the given location. Otherwise, it returns negated index of the stage at which the candidate has been rejected.
Parameters:
  • cascade – Haar classifier cascade (OpenCV 1.x API only). See CascadeClassifier::detectMultiScale() for more information.
  • feval – Feature evaluator used for computing features.
  • pt – Upper left point of the window where the features are computed. Size of the window is equal to the size of training images.

Steps:

  1. Read the image.
  2. Load Face cascade (CascadeClassifier > load)
  3. Detect faces (detectMultiScale)
  4. Draw circles on the detected faces (ellipse)
  5. Show the result.

Functions:


Example:

------------
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

int main( )
{
    Mat image;
    image = imread("lena.jpg", CV_LOAD_IMAGE_COLOR);  
    namedWindow( "window1", 1 );   imshow( "window1", image );

    // Load Face cascade (.xml file)
    CascadeClassifier face_cascade;
    face_cascade.load( "C:/OpenCV243/data/Haarcascades/haarcascade_frontalface_alt2.xml" );

    // Detect faces
    std::vector<Rect> faces;
    face_cascade.detectMultiScale( image, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );

    // Draw circles on the detected faces
    for( int i = 0; i < faces.size(); i++ )
    {
        Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );
        ellipse( image, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );
    }
    
    imshow( "Detected Face", image );
    
    waitKey(0);                   
    return 0;
}
------------

31 comments:

  1. This comment has been removed by a blog administrator.

    ReplyDelete
  2. Hi! I was wondering why my xml file won't load? I put the xml files in all directories but my program can't still load the file. Any idea why is this happening?

    ReplyDelete
    Replies
    1. Try giving the path as:

      "F(can be any drive):\\SomeFolder\\AnotherFolder\\your.xml"

      The key things to note here are
      -> don't give the path like this: "thisIsInMyWorkingDirectory.xml" rather put this file in other folder or a drive and then
      -> Give double slashes for the path. If you see the source code then you'll understand why we are doing this

      Delete
  3. Hey I have the same problem. I cant load the xml file

    ReplyDelete
  4. Hello,
    When I run the code I got an error message.

    First "abort() has been called" and then the message in the command window is:
    "OpenCV Error: Assertion failed (axes.width >= 0 && axes.height >= 0 && thickness <= 255 && 0 <= shift && shift <= XY_SHIFT) in cv::ellipse, file C:\bu
    ilds\master_PackSlave-win32-vc12-shared\opencv\modules\imgproc\src\drawing.cpp, line 1772"

    I need urgently help. Would someone please help me with this issue?

    Thanks in advance!

    ReplyDelete
  5. Hi, your blog is awesome.
    I am 2 week older in image processing field.
    I need to develop own classifiers to detect some special symbol or shape.
    Can you upload or give any simple reference to do so ?

    ReplyDelete
  6. The Best Delphi sample code I ever had for Face Detection.
    GOD bless the good hearted Author.
    http://delphimagic.blogspot.com.es/2011/08/reconocimiento-de-caras-con-delphi.html

    ReplyDelete


  7. First time I commented in a blog! I really enjoy it. You have an awesome post. Please do more articles like this. I'm gonna come back surely. God bless.

    Rica
    www.imarksweb.org

    ReplyDelete
  8. Dear Sir.. Thank you very much... I have two issues:
    1- I got some problem with (imread) , some breakpoint happen.
    2- When I put (cvLoadImage) it was work but the final result nothing happen (I got two images without any plot on it)?

    Please can you tell me what happen.

    ReplyDelete
  9. This comment has been removed by the author.

    ReplyDelete
  10. This is very good sir! Thank you for your effort in contributing this example.
    Be sure to add the objdetect.dll file in your linker under project settings in order to compile and generate the executable successfully.

    ReplyDelete
  11. how can i use it with multifaces?

    ReplyDelete
  12. i was using python with opencv and i was getting error

    Traceback (most recent call last):
    File "C:\Python27\sastra", line 5, in
    face_cascade=cv2.cascadeclassifier('haarcascade_frontalface_default.xml')
    AttributeError: 'module' object has no attribute 'cascadeclassifier'
    and i request u to help me by step wise procedure to solve above problem .
    and my email id: nsuresh062@gmail.com

    ReplyDelete
  13. If anyone is having issues loading the xml, make sure you use / rather than \ in the path directory. Also use the full path all the way from the disk drive as that made a difference too. Hope this helps someone!

    ReplyDelete
    Replies
    1. i AM facing same problem. How to recover from this.

      Delete
  14. Hi thanks for sharing face detection i am detecting live faces using usb camera.It worked well thank you

    ReplyDelete
  15. Guys!
    Who is having the same issue:
    Unhandled exception at 0x74FEC52F in OpenCV_test.exe: Microsoft C++ exception: cv::Exception at memory location 0x002CF4AC.

    Windows 7 x64, OpenCV 3.1.0, Visual Studio 2015
    How to deal with this?

    ReplyDelete
  16. Hi,
    Nice post.
    I need to detect tigers. Any idea how to do so?

    ReplyDelete
  17. hi, i have a doubt.where it is saving the captured pic. i am confused about the path whether it is storing inside the appdata or somewhere in xml files. how it is storing and retrieving the images in opencv. could somebdy explain me thoroughly. will b helpful. thanks in advance.

    ReplyDelete
  18. Hey what is there in xml file , I can't get it. Means what data to store in it. Can you please tell me.

    ReplyDelete
  19. I need Red-eye detection , Red-eye removal , and rectangular selection .
    I need to select a rectangular part with eyes and to detect red-eye and remove red eye .

    ReplyDelete
  20. HI im using the following code to detect faces but when the control enters in for loop it gives me error
    Unhandled exception at 0x00007FFD7794A1C8 in ANOTHER CV.exe: Microsoft C++ exception: cv::Exception at memory location 0x000000AF5034F330.
    can u plaease sort this out

    ReplyDelete
  21. can some one explan to me how to make this code running?
    i am working on windows with visual studio, and i am running from the cmd after executing the code.
    what i should write to the cmd: something.exe [parms]
    what should the [params] be?

    ReplyDelete
  22. Hi thanks for great post I would like to detect traffic sign using haar cascade , I got 2 trained XML file for stop and roundabout sign , can u give me some how to do it and if I want to add more cascade how can detect this ??

    ReplyDelete
  23. How to detect this in ??' real time I mean using web cam

    ReplyDelete
  24. i have some problems. actually someone already ask before me about the error why he/she cant load the xml file. and you suggest to write the path. what i'd like to ask what if im using an hardware device like android phone. how should i write the path? should i wrote the path like whats written when i open the file on my android file manager and click details

    e.x:"/storage/emulated/0/data/haarcascade_facedetection_alt.xml"
    or should i use Environtment.getDataDirectory()+"/haarcascade_facedetection_alt.xml"

    very apreciated for your help. btw, im trying to detect faces on image using opencv haarcascade for my essay project.

    ReplyDelete
  25. شركة نقل عفش بمكة
    عزيزي العميل لا يمكن أن تعرض نفسك إلى مشاكل نقل العفش من إهدار الوقت وأيضا الاستغلال من قبل العمالة العادية حيث أن مع شركة نقل عفش بمكة سوف يتم الحفاظ على كل المنقولات .
    شركة تنظيف خزانات بمكة
    حياة صحية وخالية من الجراثيم والأمراض هي شعارنا في شركة تنظيف خزانات بمكة ، نعلم جيدا أن المياه من مصادر الحياة ولا يمكن الاستغناء عنها حيث أنها تستخدم في جميع أشغالنا اليومية .
    شركة تنظيف بالبخار بالطائف
    شركة تنظيف بالبخار بالطائف من الشركات المتخصصة في مجال التنظيف بكل أنواعه فمعنا لا يوجد أي تعب سوف يقع على ربات البيوت أو السيدات التي تعمل بدوام جزأي أو كلي في المنزل حيث أن الشركة توفر عمالة مدربة جيدا على أي نوع من عمليات التنظيف فلا داعي إلى تشغيل العمالة بدوام كامل ونحن نقع على بعد خطوة واحدة منك .
    شركة تنظيف بالبخار بجدة
    عندما ترغب في الحفاظ على المفروشات من التلف فأن أفضل اختيار هي شركة تنظيف بالبخار بجدة حيث أن الشركة تعمل على تنظيف الأرضيات من الأوساخ الملتصقة دون أن يتم التخلص من طبقة خفيفة من الأرضيات فقط البخار وحدة يعمل على إزالة الأوساخ بسهولة .
    - كل من يرغب في تنظيف الكنب مرة شهريا يمكن التواصل مع شركة تنظيف بالبخار بجدة .
    - نقوم أيضا بتنظيف الحوائط وتنظيف السجاد والموكيت بالبخار .

    ReplyDelete
  26. افضل شركة تنظيف خزانات بمكة
    افضل شركة تنظيف خزانات بمكة هي الاختيار الأمثل في التخلص من رواسب الخزانات ، إذا كنت عزيزي العميل تشعر بأن طعم المياه من الصنبور غير جدية ويوجد بها أثار للمعادن وأيضا لها رائحة ولن غير طبيعي فأن الأفضل التواصل مع شركة تنظيف خزانات بمكة .
    شركة تنظيف بمكة
    وداعا لاستخدام الفرشاة والمواد الكاوية في تنظيف الأرضيات فمع شركة تنظيف بمكة سوف يتم التخلي عن جميع الطرق القديمة في عمليات التنظيف حيث أن الشركة تقوم بالاطلاع الدائم على احدث الطرق العالمية في عمليات التنظيف.

    ReplyDelete