📄 facesearch.h
字号:
// FaceSearch.h - by Robin Hewitt, 2005
// http://www.robinhewitt.com/mavis
// This is free software. See license at the bottom
// of this file for details.
//
//////////////////////////////////////////////////////////////
// FaceSearch class definition.
//
#ifndef __OBJREC_FACESEARCH
#define __OBJREC_FACESEARCH
#include <string>
#include "MVLib.h"
#include "MVObjModel.h"
class FaceSearchParams {
public:
std::string dataDir;
int modelNum;
std::string modelFile;
std::string cascadeFile;
std::string featFile;
};
class FaceSearch {
public:
FaceSearch(FaceSearchParams &) throw(MVErr);
~FaceSearch();
MVObjSearch::Result_t * search(VideoFrame &, int imgNum=0);
private:
struct SpData_t {
// dx, dy, hw, hh, and hist[] are wrt scaleFactor = 1.
// They'll need to be scaled by Match_t.scaleFactor when
// evaluating a particular match's roi
int dx;
int dy;
int hw;
int hh;
GradHisto2_t hist[4];
int bin;
};
struct FineScale_t {
double scaleFactor;
ImgSize_t sz;
std::vector<dipole::CascadeDipole_t *> dipoleVect;
std::vector<SpData_t *> spVect;
~FineScale_t() {
MVUtils::deleteElements(&dipoleVect);
MVUtils::deleteElements(&spVect);
}
};
struct Cascade_t {
ImgSize_t sz;
std::vector<dipole::CascadeLevel_t *> cascade;
dipole::Cascader * pRunner;
int maxRegWidth;
int maxRegHeight;
int nFineScales;
FineScale_t * fineScaleArr;
Cascade_t() : pRunner(0), fineScaleArr(0) {}
~Cascade_t()
{
if(pRunner) delete pRunner;
if(fineScaleArr) delete[] fineScaleArr;
MVUtils::deleteElements(&cascade);
}
std::vector<Pixel_t *> *
runCascade(IntegralImg * pIntegral, ImgROI_t * pRoi=0)
{
if(!pRunner) pRunner = new dipole::Cascader(&cascade);
return pRunner->runCascade(pIntegral, pRoi);
}
};
struct Match_t {
double dist;
ImgROI_t roi;
FineScale_t * pScaleData;
};
struct BinLoc_t {
int xMin;
int xMax;
int yMin;
int yMax;
};
double thresh;
IntegralImg * pIntegralImg;
SparseGradIntegral * pGradHistIntegral;
ImgSize_t objSz;
ImgSize_t imgSz;
int nScales;
double * scaleArr;
std::vector<Match_t *> matchVect;
Cascade_t * cascadeArr;
void loadCascade(std::string & cascadeFile) throw(MVErr);
void loadFeatures(std::string & featFile) throw(MVErr);
void addSp(SpData_t &);
void getMatches(MVImg<int> * pImg);
double refineROI(ImgROI_t *, Cascade_t &);
double refineLoc(
ImgROI_t * pROIStart,
std::vector<dipole::CascadeDipole_t *> & dipoleVect,
ImgROI_t & extents);
//ImgROI_t *, std::vector<dipole::CascadeDipole_t *> &, ImgROI_t &);
double getTotDiff(Pixel_t &, std::vector<dipole::CascadeDipole_t *> &);
void setDistance(Match_t * pMatch);
void setBinCoords(Match_t * pMatch, BinLoc_t * binArr);
};
#endif
///////////////////////////////////////////////////////////////////////////////////////
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this
// license. If you do not agree to this license, do not download, install, copy or
// use the software.
//
//
// Mavis License Agreement
//
// Copyright (c) 2004-2005, Robin Hewitt (http://www.robin-hewitt.com).
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// This software is provided "as is" and any express or implied warranties, including,
// but not limited to, the implied warranties of merchantability and fitness for a
// particular purpose are disclaimed. In no event shall the authors or contributors be
// liable for any direct, indirect, incidental, special, exemplary, or consequential
// damages (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused and on any
// theory of liability, whether in contract, strict liability, or tort (including
// negligence or otherwise) arising in any way out of the use of this software, even
// if advised of the possibility of such damage.
///////////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -