F

face_recognize_mnn

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