Esempio n. 1
0
void TriMeshLoader::loadOBJ(const char* objfile,TriMesh* pmesh){
  fstream ifs;
  char line[LINE_SIZE];
  //cout << "READIING" << endl;
  char *tok;
  ifs.open(objfile);
  //cout << "REED" << endl;
  while(!ifs.eof()){
    //cout << "HEY LISTEN" << endl;
    ifs.getline(line,LINE_SIZE);
    //cout << "LISTEN HEY" << endl;
    //cout << line << endl;
    tok=strtok(line,TOK_SEPS);
    //cout << "BOOP" << endl;
    TokenPair *ptok=tokenMatch(tok);
    //cout << "POOB" << endl;
    if(ptok){
      switch(ptok->id){
        case T_VERT: processVertex(tok,pmesh); break;
        case T_FACE: processFace(tok,pmesh); break;
        default: /*processSkip(tok);*/ break;
      }
    }
  }
  //cout << "FINISHED READING" << endl;
  ifs.close();
}
Esempio n. 2
0
void processLine( const char *line )
{
  char temp[256];
  strcpy( temp, line );

  char *token   = strtok( temp, " " );

  if( strcmp( token, "v" ) == 0 )
  { 
    processVertex( line );
  }
  else if( strcmp( token, "vn" ) == 0 )
  { 
    processNormal( line );
  }
  else if( strcmp( token, "vt" ) == 0 )
  {
    processTexture( line ); 
  }
  else if( strcmp( token, "f" ) == 0 )
  { 
    processFace( line );
  }
}
Esempio n. 3
0
int main(int argc, char **argv) {
IplImage *inputImg;
trainImage sample;  
cvNamedWindow("With COM", CV_WINDOW_AUTOSIZE);
// CvCapture* capture = 0;
// capture = cvCreateCameraCapture(-1);
// if(!capture){
// return -1;
// }
// inputImg = cvQueryFrame(capture);
#include <opencv2/ml/ml.hpp>
float result;
initializeFaceProcessor();
CvMat* SampleMatrix;
CvMat* PjMatrix=(CvMat*)cvLoad("/home/umut/projects/fastTrainer/build/ProjectionMatrix.xml");
int newDimension=PjMatrix->cols;
// int newDimension;
CvMat* allFeatures;
 CvMat* LDAMatrix=cvCreateMat(newDimension,1,CV_32F);
// CvBoost booster;
// 
// booster.load("/home/umut/projects/fastTrainer/build/Booster.dat");
int trans=CV_GEMM_A_T;

CvSVM SVM;
SVM.load("/home/umut/projects/fastTrainer/build/SVM_CLASS.dat");
// Grab the next frame from the camera.
// while((inputImg = cvQueryFrame(capture))  != NULL ){
for (int i=1;i<argc;i++){
    inputImg=cvLoadImage(argv[i]);


  
      if(processFace(inputImg,  sample.FaceImage, sample.MouthImage, sample.NoseImage, sample.EyeImage, 0))  
      {
	 sample.LBPHF=LBP_HF(sample.FaceImage,sample.nonUniform,sample.complete); //Pass through the LBPHF
// 	  sample.EyeImage=filterGabor(sample.EyeImage);
// 	  sample.NoseImage=filterGabor(sample.NoseImage);
// 	  sample.MouthImage=filterGabor(sample.MouthImage);
	  mat2Col(&sample,0,1,0,SampleMatrix);
	//  newDimension=SampleMatrix->rows;
	  allFeatures=cvCreateMat(1,35+2+newDimension,CV_32F);
	  cvGEMM(PjMatrix,SampleMatrix,1,NULL,0,LDAMatrix,trans);
	   cvSetReal1D(allFeatures,0,sample.complete);
	  cvSetReal1D(allFeatures,1,sample.nonUniform);      
	  for (int j=0;j<35;j++)
	    cvSetReal1D(allFeatures,2+j,sample.LBPHF[j]);
	  for (int j=0;j
	    <newDimension;j++)
	//    cvSetReal1D(allFeatures,37+j,cvGetReal1D(SampleMatrix,j));
	  cvSetReal1D(allFeatures,37+j,cvGetReal1D(LDAMatrix,j));
	//  cout<< "feature Size: "<< allFeatures->cols << "\n";
	//  result=booster.predict(allFeatures,0,booster.get_weak_response());
	  result=SVM.predict(allFeatures);
	  if (result==0)
	  {
	    cvRectangle(sample.FaceImage,cvPoint(2,2),cvPoint(sample.FaceImage->width-2,sample.FaceImage->height-2),cvScalar(255,0,0),3);
	    printf("Result is male\n");
	  }
	  else
	  {
	    cvRectangle(sample.FaceImage,cvPoint(2,2),cvPoint(sample.FaceImage->width-2,sample.FaceImage->height-2),cvScalar(0,0,255),3);
	    printf("Result is female\n");
	  }
	
      cvShowImage("With COM",sample.FaceImage);
     char c=cvWaitKey(0);
//      char c=cvWaitKey(5);
//       if (c==27) break;
 }
}
if (strcmp(argv[1],"1"))
cvReleaseImage( &inputImg);
}
void Mesh::getListOfFaces()
{
	_igFaces.resize((_totalNumberOfIntervalsX + 1)*(_totalNumberOfIntervalsY + 1)*(_totalNumberOfIntervalsZ + 1) + 1);

	for (auto&& finiteElement : _finiteElements)
	{
		for (auto i = 0; i < 8; i++)
		{
			_igFaces[finiteElement[i]]++;
		}
	}

	auto iterator = _igFaces.begin();
	int sum = 0;
	while (iterator != _igFaces.end()) {
		sum += *iterator++;
	}

	_jgFaces.resize(sum);

	int current, previous;
	previous = _igFaces[0];
	_igFaces[0] = 0;
	for (auto i = 0; i < _igFaces.size() - 1; i++)
	{
		current = _igFaces[i + 1];
		_igFaces[i + 1] = _igFaces[i] + previous;
		previous = current;
	}

	std::vector<int> counter;
	counter.resize(_igFaces.size());
	for (auto i = 0; i < _finiteElements.size(); i++)
	{
		for (auto j = 0; j < 8; j++)
		{
			_jgFaces[_igFaces[_finiteElements[i][j]] + counter[_finiteElements[i][j]]] = i + 1;
			counter[_finiteElements[i][j]]++;
		}
	}

	for (auto i = 0; i < _igFaces.size() - 1; i++)
	{
		std::sort(_jgFaces.begin() + _igFaces[i], _jgFaces.begin() + _igFaces[i + 1]);
	}

	int emountOfFaces = _totalNumberOfIntervalsX*_totalNumberOfIntervalsY*(_totalNumberOfIntervalsZ + 1) +
		_totalNumberOfIntervalsX*_totalNumberOfIntervalsZ*(_totalNumberOfIntervalsY + 1) +
		_totalNumberOfIntervalsZ*_totalNumberOfIntervalsY*(_totalNumberOfIntervalsX + 1);
	_faces.resize(emountOfFaces);
	for (auto&& face : _faces)
	{
		face.resize(4);// Глобальные номера узлов грани. 
	}

	_indexesOfFiniteElementFaces.resize(_finiteElements.size());
	for (auto&& finiteElementFaces : _indexesOfFiniteElementFaces)
	{
		finiteElementFaces.resize(6);
	}

	std::vector<int> indexesOfFiniteElementNodes;
	indexesOfFiniteElementNodes.resize(8);
	std::vector<int> indexesOfFaceNodes;
	indexesOfFaceNodes.resize(4);
	int res;
	int last = 0;
	for (auto i = 0; i < _finiteElements.size(); i++)
	{
		getIndexesOfFiniteElementNodes(i, indexesOfFiniteElementNodes);
		
		// Нижняя грань.
		indexesOfFaceNodes[0] = indexesOfFiniteElementNodes[0];
		indexesOfFaceNodes[1] = indexesOfFiniteElementNodes[1];
		indexesOfFaceNodes[2] = indexesOfFiniteElementNodes[2];
		indexesOfFaceNodes[3] = indexesOfFiniteElementNodes[3];
		res = processFace(i, indexesOfFaceNodes);
		setIndexOfFace(i,
			res,
			0,
			last,
			indexesOfFaceNodes);
		// Задняя грань.
		indexesOfFaceNodes[0] = indexesOfFiniteElementNodes[0];
		indexesOfFaceNodes[1] = indexesOfFiniteElementNodes[1];
		indexesOfFaceNodes[2] = indexesOfFiniteElementNodes[4];
		indexesOfFaceNodes[3] = indexesOfFiniteElementNodes[5];
		res = processFace(i, indexesOfFaceNodes);
		setIndexOfFace(i,
			res,
			1,
			last,
			indexesOfFaceNodes);
		// Левая грань.
		indexesOfFaceNodes[0] = indexesOfFiniteElementNodes[0];
		indexesOfFaceNodes[1] = indexesOfFiniteElementNodes[2];
		indexesOfFaceNodes[2] = indexesOfFiniteElementNodes[4];
		indexesOfFaceNodes[3] = indexesOfFiniteElementNodes[6];
		res = processFace(i, indexesOfFaceNodes);
		setIndexOfFace(i,
			res,
			2,
			last,
			indexesOfFaceNodes);
		// Правая грань.
		indexesOfFaceNodes[0] = indexesOfFiniteElementNodes[1];
		indexesOfFaceNodes[1] = indexesOfFiniteElementNodes[3];
		indexesOfFaceNodes[2] = indexesOfFiniteElementNodes[5];
		indexesOfFaceNodes[3] = indexesOfFiniteElementNodes[7];
		res = processFace(i, indexesOfFaceNodes);
		setIndexOfFace(i,
			res,
			3,
			last,
			indexesOfFaceNodes);
		// Передняя грань.
		indexesOfFaceNodes[0] = indexesOfFiniteElementNodes[2];
		indexesOfFaceNodes[1] = indexesOfFiniteElementNodes[3];
		indexesOfFaceNodes[2] = indexesOfFiniteElementNodes[6];
		indexesOfFaceNodes[3] = indexesOfFiniteElementNodes[7];
		res = processFace(i, indexesOfFaceNodes);
		setIndexOfFace(i,
			res,
			4,
			last,
			indexesOfFaceNodes);
		// Верхняя грань.
		indexesOfFaceNodes[0] = indexesOfFiniteElementNodes[4];
		indexesOfFaceNodes[1] = indexesOfFiniteElementNodes[5];
		indexesOfFaceNodes[2] = indexesOfFiniteElementNodes[6];
		indexesOfFaceNodes[3] = indexesOfFiniteElementNodes[7];
		res = processFace(i, indexesOfFaceNodes);
		setIndexOfFace(i,
			res,
			5,
			last,
			indexesOfFaceNodes);
	}
}
Esempio n. 5
0
bool ObjParser::parse( std::istream& input )
{
    reset();

    // Read each line of the .obj file
    while ( readNextLine( input ) && !hasErrors() )
    {
        // Skip lines that are empty
        if ( isCurrentLineEmpty() )
        {
            continue;
        }

        // Split the input line into "words' that are separated by
        // spaces. The first word is the next obj file command, the others
        // that follow are arguments to that command
        std::vector<std::string> tokens;

        tokenizeCommandString( lineText(), tokens );
        assert( tokens.size() > 0 );

        // What kind of command is this?
        if ( tokens[0] == "v" )
        {
            processVertexPosition( tokens );
        }
        else if ( tokens[0] == "vt" )
        {
            processVertexTexCoord( tokens );
        }
        else if ( tokens[0] == "vn" )
        {
            processVertexNormal( tokens );
        }
        else if ( tokens[0] == "g" )
        {
            processGroup( tokens );
        }
        else if ( tokens[0] == "f" )
        {
            processFace( tokens );
        }
        else if ( tokens[0] == "usemtl" )
        {
            processMaterial( tokens );
        }
        else if ( tokens[0] == "mtllib" )
        {
            processMaterialLib( tokens );
        }
        else if ( tokens[0] == "s" )
        {
            // ignore smoothing groups
        }
        else
        {
            raiseError("Unknown .obj command encountered");
            continue;
        }
    }

    // Make sure the last group has at least one face in it
    if ( m_objdata->currentGroup.empty() == false )
    {
        if ( m_objdata->groups[ m_objdata->currentGroupIndex ].count == 0 )
        {
            raiseError("The last active group didn't have any faces");
        }
    }

    // Now we're done, make sure to return if the parsing was successful or
    // not
    return !hasErrors();
}