# MNN1.0.0+opencv3.x

# CMakeLists

    cmake_minimum_required(VERSION 3.10)
    project(main)
    set(CMAKE_CXX_STANDARD 11)
    find_package(OpenCV REQUIRED)
    set(MNN_DIR ***)     // MNN路径
    include_directories(${MNN_DIR}/include)
    link_directories(${MNN_DIR}/build)
    include_directories(***/face_recognize_mnn/include)  // 当前项目include路径
    aux_source_directory(***/face_recognize_mnn/tools ALL_TOOLS)  // source cpp文件路径
    add_executable(main main.cpp facecomparison.cpp ${ALL_TOOLS})
    target_link_libraries(main -lMNN ${OpenCV_LIBS})

# 信息结构体

    struct OutputInfo{
        int error_code;
        bool result;
    };

    struct InitModelError{
        vector<bool> init_error;
    };

# 模型初始化

    InitModelError init_model_code;
    FaceComparison face_rec = FaceComparison();
    bool init_model = face_rec.init_model(face_det_model,face_landm_model,face_rec_model,init_model_code);

    det_model_path:人脸检测模型retinaface的模型路径
    landm_model_path:106人脸关键点模型的模型路径
    rec_model_path:人脸识别模型的模型路径
    init_model_code:保存每个模型初始化状态true/false

# 重要参数(include/facecomparison.h文件)

    // 人脸检测阈值
    float confidence_threshold = 0.5;
    // 是否进行人脸外廓
    bool is_bbox_process = true;
    // 人脸比对相似度阈值
    float face_recongnize_thr = 0.5;
    // 线程个数
    int num_thread = 2;
    // 推理方式
    MNNForwardType forward_type = MNN_FORWARD_CPU;
    
# 接口(返回结果 bool:true/false)

    int inference(string image_path1,string image_path2,OutputInfo &output_info);参数为两张图像地址,其中iamge1_path为face_id图像输入
    int inference(Mat image1,Mat image2,OutputInfo &output_info);参数为两张opencv读取的图像矩阵,其中iamge1为face_id图像输入

# 调用方式

    OutputInfo output_info;
    int result = face_rec.inference(image1,image2,output_info);

# 编译

    将CMakeLists.txt 中 set(FACECOMPARISON_DIR /home/situ/qfs/sdk_project/mnn_projects/face_recognize_mnn/include)
    改为include文件夹所在的绝对地址
    mkdir build
    cd build
    cmake ..
    make
    ./main