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(); }
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 ); } }
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); } }
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(); }