// FaceAlgorithmApi.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include #include "Inc/CenterFaceMnn.h" #include "Inc/MobileFaceFeatureMnn.h" #include "Inc/LivenessIRMnn.h" #include "Inc/FaceQuality.h" #define IN #define OUT int DeepCamFaceDetect(IN const cv::Mat& frame, OUT std::vector& faceList) { if (frame.empty()) { return ERR_IMG; } return CenterFaceMnn::GetInstance()->Detect(frame, faceList); } int DeepCamGetFaceFeature(IN const cv::Mat& frame, IN const float* landmarks, OUT float* feature) { if (frame.empty()) { return ERR_IMG; } if (landmarks == nullptr) { return ERR_LANDMARK; } return MobileFaceFeatureMnn::GetInstance()->GetFaceFeature(frame, landmarks, feature); } int DeepCamFaceFeatureCompare(IN const float* feature1, IN const float* feature2, OUT float& fSimilarity) { fSimilarity = 0.f; if (feature1 == nullptr || feature2 == nullptr) { return ERR_FEATURE; } float tmp0 = 0, tmp1 = 0, tmp2 = 0; for (int i = 0; i < 512; i++) { tmp0 += feature1[i] * feature2[i]; tmp1 += feature1[i] * feature1[i]; tmp2 += feature2[i] * feature2[i]; } float score = (float(tmp0 / (sqrt(tmp1) * sqrt(tmp2)))); //拉高分数 float max_score = log10f(1.01); float min_score = log10f(0.02); float ret, temp; if (score <= 0) { temp = fabs(score); if (temp > 0.3) { ret = 0.0001; } else { ret = temp; } } else { temp = log10f(score + 0.01); fSimilarity = fabsf(temp - min_score) / (max_score - min_score); } return ERR_OK; } int DeepCamFaceLivenesIr(IN const cv::Mat& frame, IN float face_x1, IN float face_y1, IN float face_x2, IN float face_y2, IN const float* landmarks, OUT float& livenessScore) { livenessScore = 0.f; if (frame.empty()) { return ERR_IMG; } if (landmarks == nullptr) { return ERR_LANDMARK; } return LivenessIRMnn::GetInstance()->LivenessDetect(frame, face_x1, face_y1, face_x2, face_y2, landmarks, livenessScore, true); } int DeepCamGetFaceQuality(IN const cv::Mat& frame, IN float face_x1, IN float face_y1, IN float face_x2, IN float face_y2, OUT float& score) { if (frame.empty()) { return ERR_IMG; } cv::Rect face_rect = cv::Rect(face_x1, face_y1, face_x2 - face_x1, face_y2 - face_y1); score = FaceQuality::GetInstance()->DetectQuality(frame, face_rect); return ERR_OK; } int main() { std::cout << "Hello World!\n"; }