void __fastcall TForm1::FormActivate(TObject *Sender) { if (FSDK_ActivateLibrary("MDT+qnvcLrZn+3LL6fRZJ/tFjPRk7LR90chU4O8lpR1L0Blmcnu7NKdEwgkDZ5T9BylWzBmu1uuy5sIFJb1w0kPlZdKTNrWLFblWrh++bxp039ehq0yjg9hz4JyJ9693iqiTdgkvVba3B6+c6gXDjoyTrIDGRUz4WafWxQpyT4A=") != FSDKE_OK) { Application->MessageBox("Please run the License Key Wizard (Start - Luxand - FaceSDK - License Key Wizard)", "Error activating FaceSDK", 0); Application->Terminate(); } FSDK_Initialize("") != FSDKE_OK; FSDK_SetFaceDetectionParameters(true, true, 384); }
void compareWithOneSample(char* sample) { HImage imgOrg, imgCmp; TFacePosition fpOrg, fpCmp; FSDK_FaceTemplate ftOrg, ftCmp; int result; float similarity = 0.0f, maxSim = 0.0f; char *pair = NULL; char *temp; int nFile; char **pics; std::ofstream fileOut; fileOut.open("BadPicsPair.txt"); pics = getAllFiles(nFile); initFaceSDK(); /* set detection parameters first param : set comparing rotation ratio true == -30 ~ 30 degree, false == -15 ~ 15 second param : get twisted ratio true == get , false == not get third param : set internal resize ratio */ FSDK_SetFaceDetectionParameters(false, false, 500); for(int i = 0 ; i < nFile ; ++i) { if(!strcmp(pics[i] + strlen("./Pics/"), sample)) { temp = pics[0]; pics[0] = pics[i]; pics[i] = temp; break; } } result = FSDK_LoadImageFromFile(&imgOrg, pics[0]); if(result != FSDKE_OK) { std::cout<<"============= Input Sample is Bad ============"<<std::endl<<std::endl; return; } result = FSDK_DetectFace(imgOrg, &fpOrg); if(result != FSDKE_OK) { std::cout<<"============= Input Sample is Bad ============"<<std::endl<<std::endl; return; } result = FSDK_GetFaceTemplateInRegion(imgOrg, &fpOrg, &ftOrg); if(result != FSDKE_OK) { std::cout<<"============= Input Sample is Bad ============"<<std::endl<<std::endl; return; } for(int i = 1 ; i < nFile ; ++i) { //std::cout<<"=================== This pair ===================="<<std::endl; //std::cout<<pics[i]<<" "<<pics[j]<<std::endl<<std::endl; // load 1 imgs result = FSDK_LoadImageFromFile(&imgCmp, pics[i]); //std::cout<<"=================== Load Image ==================="<<std::endl; //std::cout<<ErrorCode[-result1]<<std::endl<<std::endl; // find faces result = FSDK_DetectFace(imgCmp, &fpCmp); if(result != FSDKE_OK) { std::cout<<"============= break this comparison ============="<<std::endl<<std::endl; if(result != FSDKE_OK) fileOut<<pics[i]<<std::endl; FSDK_FreeImage(imgCmp); break; } //std::cout<<"=================== Find Faces ==================="<<std::endl; //std::cout<<ErrorCode[-result1]<<std::endl<<std::endl; FSDK_GetFaceTemplateInRegion(imgCmp, &fpCmp, &ftCmp); if(result != FSDKE_OK) { std::cout<<"============= break this comparison ============="<<std::endl; std::cout<<pics[i]<<std::endl<<std::endl; FSDK_FreeImage(imgCmp); break; } FSDK_MatchFaces(&ftOrg, &ftCmp, &similarity); std::cout<<"=================== Similarity =================="<<std::endl; std::cout<<"Similarity is "<<similarity * 100<<"%"<<std::endl<<std::endl; if(similarity >= maxSim) { maxSim = similarity; if(pair != NULL) { delete[] pair; pair = NULL; } pair = new char[strlen(pics[i]) + 1]; strcpy(pair, pics[i]); } FSDK_FreeImage(imgCmp); } FSDK_FreeImage(imgOrg); std::cout<<"===================== Result ===================="<<std::endl; std::cout<<"Total "<<nFile<<" files"<< std::endl; std::cout<<"Max Similarity: "<<maxSim* 100<<"%"<<std::endl; std::cout<<pics[0]<<std::endl; std::cout<<pair<<std::endl; for(int i = 0 ; i < nFile ; ++i) delete[] pics[i]; delete[] pics; delete[] pair; fileOut.close(); getchar(); }
void compareAllSample() { HImage imgOrg, imgCmp; TFacePosition fpOrg, fpCmp; FSDK_FaceTemplate ftOrg, ftCmp; int result1, result2; float similarity = 0.0f, maxSim = 0.0f; char *pair1 = NULL, *pair2 = NULL; int nFile; char **pics; std::ofstream fileOut; fileOut.open("BadPicsPair.txt"); pics = getAllFiles(nFile); initFaceSDK(); /* set detection parameters first param : set comparing rotation ratio true == -30 ~ 30 degree, false == -15 ~ 15 second param : get twisted ratio true == get , false == not get third param : set internal resize ratio */ FSDK_SetFaceDetectionParameters(false, false, 500); for(int i = 0 ; i < nFile - 1; ++i) { for(int j = i + 1 ; j < nFile ; ++j) { //std::cout<<"=================== This pair ===================="<<std::endl; //std::cout<<pics[i]<<" "<<pics[j]<<std::endl<<std::endl; // load 2 imgs result1 = FSDK_LoadImageFromFile(&imgOrg, pics[i]); result2 = FSDK_LoadImageFromFile(&imgCmp, pics[j]); //std::cout<<"=================== Load Image ==================="<<std::endl; //std::cout<<ErrorCode[-result1]<<std::endl; //std::cout<<ErrorCode[-result2]<<std::endl<<std::endl; // find faces result1 = FSDK_DetectFace(imgOrg, &fpOrg); result2 = FSDK_DetectFace(imgCmp, &fpCmp); if(result1 != FSDKE_OK || result2 != FSDKE_OK) { std::cout<<"============= break this comparation ============="<<std::endl<<std::endl; if(result1 != FSDKE_OK) fileOut<<pics[i]<<std::endl; if(result2 != FSDKE_OK) fileOut<<pics[j]<<std::endl; FSDK_FreeImage(imgOrg); FSDK_FreeImage(imgCmp); break; } //std::cout<<"=================== Find Faces ==================="<<std::endl; //std::cout<<ErrorCode[-result1]<<std::endl; //std::cout<<ErrorCode[-result2]<<std::endl<<std::endl; FSDK_GetFaceTemplateInRegion(imgOrg, &fpOrg, &ftOrg); FSDK_GetFaceTemplateInRegion(imgCmp, &fpCmp, &ftCmp); if(result1 != FSDKE_OK || result2 != FSDKE_OK) { std::cout<<"============= break this comparation ============="<<std::endl; std::cout<<pics[i]<<" "<<pics[j]<<std::endl<<std::endl; FSDK_FreeImage(imgOrg); FSDK_FreeImage(imgCmp); break; } FSDK_MatchFaces(&ftOrg, &ftCmp, &similarity); std::cout<<"=================== Similarity ==================="<<std::endl; std::cout<<"Similarity is "<<similarity * 100<<"%"<<std::endl<<std::endl; if(similarity >= maxSim) { maxSim = similarity; if(pair1 != NULL && pair2 != NULL) { delete[] pair1; delete[] pair2; pair1 = NULL; pair2 = NULL; } pair1 = new char[strlen(pics[i]) + 1]; pair2 = new char[strlen(pics[j]) + 1]; strcpy(pair1, pics[i]); strcpy(pair2, pics[j]); } FSDK_FreeImage(imgOrg); FSDK_FreeImage(imgCmp); } } std::cout<<"===================== Result ====================="<<std::endl; std::cout<<"Total "<<nFile<<" files"<< std::endl; std::cout<<"Max Similarity: "<<maxSim* 100<<"%"<<std::endl; std::cout<<pair1<<std::endl; std::cout<<pair2<<std::endl; for(int i = 0 ; i < nFile ; ++i) delete[] pics[i]; delete[] pics; delete[] pair1; delete[] pair2; fileOut.close(); getchar(); }