// // Created by pans on 4/27/18. // #include #include #include #include #include "CasiaFaceWrapperN.h" using namespace std; std::atomic_int CasiaFaceWrapperN::instanceCount(0); CasiaFaceWrapperN::CasiaFaceWrapperN() { threadMax = appPref.getLongData("thread.max"); // long gpuIndex = appPref.getLongData("gpu.index"); // for(int i = 0;i threadMax){ channel = -1; ERR("too many channels instanced, channel "< &feature1, std::vector &feature2) { if(feature1.size()!= EF_Size()){ ERR("feature1 size is not incorrect"); return 0; }else if(feature2.size()!= EF_Size()){ ERR("feature2 size is not incorrect"); return 0; } return EF_Compare(feature1.data(), feature2.data()); } #define COPY(NAME) memcpy(&face.NAME, &pos.NAME, sizeof (pos.NAME));s Features CasiaFaceWrapperN::extractFace(FaceImageN img) { Features results; if(channel ==-1){ ERR("invalid face channel, face detect faild"); return results; } vector feature; THFI_FacePos facesPos[30]; // int channel; // for(int loop = 0;loop < threadMax;loop++){ // channel = resourcesManager.getAvilableChannel(to_string(loop)); // if(channel > 0){ // cout << channel << endl; // break; // } // } int faceNum = THFI_DetectFace(channel, img.data,24, img.width, img.height, facesPos ,30); if(faceNum>0){ if(feature.size()!= EF_Size()*faceNum){ feature.resize(EF_Size()*faceNum); } CHKERR(EF_Extract_M(channel, img.data, img.width, img.height, 3, facesPos, feature.data(), faceNum), 1, " return"); for(int i = 0; i< faceNum; i++){ FaceFeaWithScore result; THFI_FacePos& face = facesPos[i]; result.left = face.rcFace.left; result.top = face.rcFace.top; result.width = face.rcFace.right - face.rcFace.left; result.height = face.rcFace.bottom - face.rcFace.top; result.score = face.fAngle.confidence; // if(face.fAngle.confidence >= 0.6){ if((face.fAngle.pitch >-30 || face.fAngle.pitch <30 ) && (face.fAngle.roll >-30 || face.fAngle.roll <30 ) && (face.fAngle.yaw >-30 || face.fAngle.yaw <30 )){ result.feature.resize(EF_Size()); memcpy(result.feature.data(),feature.data()+i*EF_Size(),EF_Size()); results.push_back(result); } // } } } else{ DBG("faceNum is < 0"); } return results; } //#todo //Features CasiaFaceWrapperN::extractFace(FaceImageN &img, THFI_FacePos& facePos,int faceNum) { // return Features(); //}