ImageEn, unit ievision

TIEVisionLibrary.createCascadeClassifier

TIEVisionLibrary.createCascadeClassifier


Declaration

function createCascadeClassifier(): TIEVisionCascadeClassifier; overload; safecall;
function createCascadeClassifier(c: TIEVisionCascadeClassifier): TIEVisionCascadeClassifier; overload; safecall;
function createCascadeClassifier(filename: PAnsiChar): TIEVisionCascadeClassifier; overload; safecall;


Description

First overload creates a new empty cascade classifier.
Second overload creates a cascade classifier from a copy of specified object.
Third overload creates a cascade classifier from file or an embedded classifier. Embedded classifiers have ':' prefix and can be:
Const Classifier
IEVC_EYE ":EYE"
IEVC_EYE_TREE_EYE_GLASSES ":EYETREEEYEGLASSES"
IEVC_FRONTAL_FACE_ALT ":FRONTALFACEALT"
IEVC_FRONTAL_FACE_ALT_2 ":FRONTALFACEALT2"
IEVC_FRONTAL_FACE_ALT_TREE ":FRONTALFACEALTTREE"
IEVC_FRONTAL_FACE_DEFAULT ":FRONTALFACEDEFAULT"
IEVC_FULL_BODY ":FULLBODY"
IEVC_LOWER_BODY ":LOWERBODY"
IEVC_PROFILE_FACE ":PROFILEFACE"
IEVC_UPPER_BODY ":UPPERBODY"
IEVC_LEFT_EYE_2_SPLITS ":LEFTEYE2SPLITS"
IEVC_RIGHT_EYE_2_SPLITS ":RIGHTEYE2SPLITS"
IEVC_LBP_FRONTAL_FACE ":LBPFRONTALFACE"
IEVC_CASCADE_SMILE ":CASCADESMILE"
IEVC_FRONTAL_CAT_FACE ":FRONTALCATFACE"
IEVC_FRONTAL_CAT_FACE_EXT ":FRONTALCATFACEEXTENDED"
IEVC_LICENSE_PLATE_RUS ":LICENSEPLATERUS"
IEVC_RUSSIAN_PLATE_NUMBER ":RUSSIANPLATENUMBER"



Parameter Description
c Source classifier to copy
filename Filename of classifier to load (or one of the embedded classifiers)

Note: You can create your own classifiers using TIEVisionCascadeClassifierTrainer


Demos

Demo  Demos\IEVision\FaceDetection_LowLevel\FaceDetection.dpr
Demo  Demos\IEVision\FaceDetection_LowLevel\FaceDetection_LowLevel.dpr
Demo  Demos\IEVision\TrackObjects_LowLevel\TrackObjects.dpr
Demo  Demos\IEVision\TrackObjects_LowLevel\TrackObjects_LowLevel.dpr


Examples

// Load two face detectors
objectsFinder := IEVisionLib.createObjectsFinder();
objectsFinder.addClassifier('face detector 1', IEVisionLib.createCascadeClassifier(IEVC_FRONTAL_FACE_ALT_TREE);
objectsFinder.addClassifier('face detector 2', IEVisionLib.createCascadeClassifier(IEVC_FRONTAL_FACE_DEFAULT));


// Automatically detect a face in the current image
const
  divisor = 3;
var
  m_classifier: TIEVisionCascadeClassifier;
  origImage, workImage:TIEVisionImage;
  objects:TIEVisionVectorRect;
begin
  m_classifier := IEVisionLib.createCascadeClassifier( IEVC_FRONTAL_FACE_DEFAULT );

  // copy current sample to ImageEnView bitmap
  ImageEnView1.IO.DShowParams.GetSample(ImageEnView1.IEBitmap);

  // create scaled gray scale image
  origImage := ImageEnView1.IEBitmap.GetIEVisionImage();
  origImage.flip(ievY_AXIS);  // show image correctly
  workImage := IEVisionLib.createImage(origImage.getWidth(), origImage.getHeight(), ievUINT8, 1);
  origImage.convertColor(workImage, ievBGR2GRAY);
  workImage.resize(workImage.getWidth() div divisor, workImage.getHeight() div divisor);
  workImage.equalizeHistogram();

  // detect face
  objects := m_classifier.detectObjects(workImage, 1.1, 3, ievDO_CANNY_PRUNING, IEVisionSize(0,0), IEVisionSize(0,0));

  // face found?
  if objects.size() > 0 then
  begin
    // at least one face detected
    // setup window
    with ImageEnView1, objects.getRect(0) do
      m_lastWindow := IEVisionRect(x*divisor, y*divisor, width*divisor, height*divisor);
    // reset histogram and HUE ranges
    m_histogram := nil;
    m_minHSV := IEVisionScalar(  0,   0,   0);
    m_maxHSV := IEVisionScalar(180, 256, 256);
    // disable face detection
    AutoDetectFace.Down := false;
  end;

  // refresh ImageEnView1
  ImageEnView1.Update;
  m_classifier := nil;
end;


See Also

IEVision Embedded Classifiers