#ifndef FACERECOGNIZE_H #define FACERECOGNIZE_H #include<opencv2/opencv.hpp> #include<MNN/Interpreter.hpp> #include<MNN/ImageProcess.hpp> #include<iostream> using namespace MNN; using namespace std; using namespace cv; class FaceRecognize{ private: vector<float> input_size={112,112}; std::shared_ptr<MNN::Interpreter> net; Session *session1 = nullptr; Session *session2 = nullptr; ScheduleConfig config; Scalar mean=Scalar(127.5f,127.5f,127.5f); float scale = 1.0f/127.5f; public: FaceRecognize(){}; FaceRecognize(string model_path){ net = std::shared_ptr<MNN::Interpreter>(MNN::Interpreter::createFromFile(model_path.c_str()));//创建解释器 config.numThread = 8; config.type = MNN_FORWARD_CPU; session1 = net->createSession(config);//创建session session2 = net->createSession(config);//创建session } //预处理 cv::Mat meanAxis0(const cv::Mat &src); cv::Mat elementwiseMinus(const cv::Mat &A,const cv::Mat &B); cv::Mat varAxis0(const cv::Mat &src); int MatrixRank(cv::Mat M); cv::Mat similarTransform(cv::Mat src,cv::Mat dst); Mat preprocess_face(Mat image,vector<vector<float>> land); double getMold(const vector<double>& vec); double cos_distance(const vector<double>& base, const vector<double>& target); // 推理 double get_samilar(Mat image1,Mat image2); }; #endif