⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 facesearch.h

📁 机器人程序
💻 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 + -