📄 mvobjfactory.cpp
字号:
// MVObjFactory.cpp - by Robin Hewitt, 2004-2005
// http://www.robinhewitt.com/mavis
// This is free software. See license at the bottom
// of this file for terms of use.
//
#define USE_OPENCVINTERFACE
//////////////////////////////////////////////////////////////
// Implementation of MVObjFactory class
//
#include "Mavis.h"
#include "../Params.h"
#include "Homebase.h"
#include "MpiFace.h"
#include "MVObj.h"
#include "Motion.h"
#include "LearnedObj.h"
#include "FaceObj.h"
#include "HaarFace.h"
using namespace std;
//////////////////
// Constructor
//
MVObjFactory::MVObjFactory(Mavis * pM) throw(MavisErr) : pMavis(pM)
{
Params * pParams = pMavis->getParams();
// Get and store the path for the data directory
const char * tmp = pParams->getStringValue("learnedObj", "dataDir");
if(tmp)
dataDir = tmp;
else
dataDir = "./data"; // default value
// Find out if the data directory exists
int fileAttrib = GetFileAttributes(dataDir.c_str());
if(0xFFFFFFFF == fileAttrib || !(FILE_ATTRIBUTE_DIRECTORY&fileAttrib) )
if( ENOENT == GetLastError() )
throw MavisErr("Data directory \'%s\' not found", dataDir.c_str());
}
//////////////////
// Destructor
//
MVObjFactory::~MVObjFactory()
{
MVUtils::deleteElements(&objVect);
}
//////////////////
// getMVObj()
//
MVObj * MVObjFactory::getMVObj(int id, Mavis * pM) throw(MavisErr)
{
MVObjBase * pObj = 0;
// ID is for a learned object model
if( id >= FIRST_LEARNED_OBJ_ID)
{
//todo: decide if object is a face or something else
// get objClass ID
// if objClass ID == FACECLASSID, pObj = (MVObjBase *)new FaceObj(pM, id, dataDir);
// else, pObj = (MVObjBase *)new LearnedObj(pM, id, dataDir);
//pObj = (MVObjBase *)new LearnedObj(pM, id, dataDir);
pObj = (MVObjBase *)new FaceObj(pM, id, dataDir);
}
// Home Base
else if( HOMEBASE_OBJ_ID == id ) pObj = (MVObjBase *)new Homebase(pM);
// MpiFace
else if( MPI_FACE_OBJ_ID == id ) pObj = (MVObjBase *)new MpiFace(pM);
// Motion Detector
else if( MOTION_DETECTOR_ID == id ) pObj = (MVObjBase *)new Motion(pM);
// Haar Face Detector
else if( HAAR_FACE_DETECTOR_ID == id )
{
pObj = findByID( HAAR_FACE_DETECTOR_ID );
if( !pObj )
{
pObj = (MVObjBase *)new HaarFace(pM);
objVect.push_back(pObj);
}
}
else
throw MavisErr("Invalid object ID %d", id);
return (MVObj *)pObj;
}
//////////////////
// releaseMVObj()
//
void MVObjFactory::releaseMVObj(MVObj * pObj)
{
if(pObj)
{
if( findByID(pObj->getId()) )
return;
else
delete pObj;
}
}
//////////////////
// findByID()
//
MVObjBase * MVObjFactory::findByID(int id)
{
for(int i=0; i<objVect.size(); i++)
if( (objVect[i])->getId() == id )
return objVect[i];
return (MVObjBase *)0;
}
///////////////////////////////////////////////////////////////////////////////////////
// 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 + -