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