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

📄 sample.cpp

📁 这是个人脸识别程序
💻 CPP
字号:
// $masm\sample.cpp 1.5 milbo$ functions for dealing with samples// Warning: this is raw research code -- expect it to be quite messy.// milbo petaluma mar 2006//-----------------------------------------------------------------------------// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.//// A copy of the GNU General Public License is available at// http://www.r-project.org/Licenses///-----------------------------------------------------------------------------#include "all.hpp"//-----------------------------------------------------------------------------static void ReadSampleFile (Mat &nEntries, Mat &iSamples, char sFileTypes[],	// out					const char sFile[], bool fVerbose) 					// in{lprintf("\nReading %s ", sFile);FILE *pFile = fopen(sFile, "r");		// Fopen checks internally if file opens ok and issues err msg if need beif (!pFile)	Err("Can't open %s", sFile);// read magic numberchar s[SLEN];if (NULL == fgets(s, PLEN-1, pFile))	Err("Can't read %s", sFile);if (s[0] != 'S' || s[1] != 'A' || s[2] != 'M')	SysErr("%s is not a sample file (first three chars aren't \"SAM\")", sFile);// read FileTypesif (NULL == Fgets(s, PLEN-1, pFile))	Err("Can't read %s", sFile);char sTemp[SLEN];if (2 != sscanf(s, "%s %s", sTemp, sFileTypes) || strcmp("FileTypes", sTemp))	SysErr("Expected \"FileTypes STRING\", got %s", s);int nFileTypes = strlen(sFileTypes);for (int i = 0; i < nFileTypes; i++)	if (NULL == (strchr(sgLegalFileTypes, sFileTypes[i])))		SysErr("Illegal filetype %c", sFileTypes[i]);// read arraysnEntries.sread(sFile, pFile, NULL, fVerbose, EXIT_ON_ERR);iSamples.sread(sFile, pFile, NULL, fVerbose, EXIT_ON_ERR);fclose(pFile);if (nEntries.nrows() != nFileTypes)	SysErr("Expected %d file types (to match length of \"%s\") types in nSamples, got %d", nFileTypes, sFileTypes, nEntries.nrows());if (iSamples.ncols() < 2)	SysErr("Expected at least two columns in iSamples, got %d", iSamples.ncols());//if (iSamples.nrows() != nExpectedNbrOfSamples)//	SysErr("nrows %d != nExpectedNbrOfSamples %d", iSamples.nrows(), nExpectedNbrOfSamples);}//-----------------------------------------------------------------------------// Format of fSampleSpec is FILE:FileType:iSet:-I:Nvoid ParseSampleSpec (tSampleSpec &SampleSpec, 			// out						const char *sSampleSpec)		// in{char *sToken = strtok((char *)sSampleSpec, ":");if (!sToken)	Err("Can't get filename from sample spec %s", sSampleSpec);strcpy(SampleSpec.sFile, sToken);sToken = strtok(NULL, ":");if (!sToken)	Err("Can't get FileType from sample spec %s", sSampleSpec);if (sToken[1] != 0 || (sToken[0] != '*' && NULL == (strchr(sgLegalFileTypes, sToken[0]))))	Err("Filetype in sample spec %s must be \"*\" or one of \"%s\"", sSampleSpec, sgLegalFileTypes);strcpy(SampleSpec.sFileTypes, sToken);sToken = strtok( NULL, ":");if (!sToken || sscanf(sToken, "%d", &SampleSpec.iSet) != 1)	Err("Can't get iSet from sample spec %s", sSampleSpec);sToken = strtok( NULL, ":");if (!sToken || sscanf(sToken, "%d", &SampleSpec.i) != 1)	Err("Can't get I from sample spec %s", sSampleSpec);sToken = strtok( NULL, ":");if (!sToken || sscanf(sToken, "%d", &SampleSpec.n) != 1)	Err("Can't get N from sample spec %s", sSampleSpec);lprintf("SampleSpec parses to\n");lprintf("  sFile %s\n", SampleSpec.sFile);lprintf("  sFileTypes %s\n", SampleSpec.sFileTypes);lprintf("  iSet %d \n", SampleSpec.iSet);lprintf("  i %d\n", SampleSpec.i);lprintf("  n %d\n", SampleSpec.n);}//-----------------------------------------------------------------------------// This is a bit inefficient because it creates NewShapes then copies that back to Shapes// TODO add cross check that nSamples matches shapes filevoid GetShapesSpecifiedBySampleSpec (ShapeVec *pShapes, StringVec &TagStrings, 		// io									 const tSampleSpec &SampleSpec, bool fVerbose)	// in{Mat nEntries;Mat iSamples;char sFileTypes[SLEN];ReadSampleFile(nEntries, iSamples, sFileTypes, SampleSpec.sFile, fVerbose);DASSERT(pShapes->size() == TagStrings.size());ShapeVec NewShapes(pShapes->size());StringVec NewTags(TagStrings.size());int nFileTypes = nEntries.nrows();int iSample = 0;int iSet = SampleSpec.iSet;for (int iFileType = 0; iFileType < nFileTypes; iFileType++)	{	for (int iSampleForThisFileType = 0; iSampleForThisFileType < nEntries(iFileType, iSet); iSampleForThisFileType++)		{		int iShape = iSamples(iSample, iSet);		NewShapes[iSample] = (*pShapes)[iShape];		string sTag = TagStrings[iShape].c_str();		lprintf("%d %c <- %d %s\n", iSample, sFileTypes[iFileType], iShape, sTag.c_str());		if (sTag[FNAME_OFFSET] != sFileTypes[iFileType])			SysErr("Expected filetype %c but got %s", sFileTypes[iFileType], sTag.c_str());		NewTags[iSample] = sTag;		iSample++;		}	}NewShapes.resize(iSample);		// discard unused entriesNewTags.resize(iSample);pShapes->resize(0); pShapes->resize(iSample); // have to set Mat sizes to 0 else get "SysErr: mats not conformable"*pShapes = NewShapes;							// vector assignmentTagStrings = NewTags;						// likewiselprintf("Shapes after sampling\n");//PrintMatVec(*pShapes)for (int i = 0; i < TagStrings.size(); i++)	lprintf("%s\n", TagStrings[i].c_str());Err("early");}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -