当前位置: 首页 > 科技观察

开源人脸识别seetaface入门教程(一)

时间:2023-03-20 18:37:20 科技观察

简介Seetaface是由中国科学院计算所单世光研究员带领的人脸识别课题组开发的。代码基于C++实现,不依赖第三方库。但是现在的开源代码都是在windows上编译的,对于我们mac/linux用户来说,使用起来还是比较麻烦的。经过这几天的学习,终于对seetaface有了一个全面的了解。接下来,听我口才。注:本文不涉及代码逻辑和原理,只是教大家如何使用seetaface进行人脸识别。引擎FaceDetection人脸识别模块用于识别照片中的人脸,回染出每张人脸的坐标和人脸总数。FaceAlignment特征点识别模块主要识别两个嘴角、鼻子、两只眼睛的坐标。经过测试,发现当图片模糊时,识别不准确。FaceIdentification人脸比对模块,按照官方的说法,是先提取特征值再进行比对。给出的测试程序是seetaface提取人脸的特征值,与caffe训练库中的人脸进行对比。以下教程均在MacOSX上编译运行。使用cmake和make编译下面的编译方式是编译FaceDetect测试程序,而测试程序依赖opencv,所以,在此之前,先确认是否安装了opencv,并编译了人脸识别教程。由于代码是在windows平台上编译的,所以,这个地方需要做一些修改。进入faceDetection目录目录目录目录目录目录#defineSEETA_API#endif修改include/feat/surf_feature_map.h文件,在前面添加#include,修改include/util/image_pyramid.h文件,在前面添加#include,修改src/feat/surf_feature_map.cpp文件,在前面添加#include添加CMakeLists.txt,内容如下:cmake_minimum_required(VERSION3.3)project(seeta_facedet_lib)option(BUILD_EXAMPLES"SettoONtobuildexamples"ON)option(USE_OPENMP"SettoONtobuilduseopenmp"ON)设置(CMAKE_CXX_STANDARD1)设置(CMAKE_CXX_STANDARD1)(CMAKE_CXX_STANDARD_REQUIREDON)消息(状态“C++11支持已默认启用。”)设置(CMAKE_CXX_FLAGS“${CMAKE_CXX_FLAGS}-msse4.1”)if(USE_OPENMP)find_package(OpenMPQUIET)if(OpenMP_FOUND)消息(状态“UseOpenMP")add_definitions(-DUSE_OPENMP)set(CMAKE_C_FLAGS"${CMAKE_C_FLAGS}${OpenMP_C_FLAGS}")set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS}${OpenMP_CXX_FLAGS}")set(CMAKE_EXE_LINKER_FLAGS"${CMAKE_EXE_LINKER_FLAGS}")${OpenMP_EXE")ER_AGSendif()endif()include_directories(include)set(src_filessrc/util/nms.cppsrc/util/image_pyramid.cppsrc/io/lab_boost_model_reader.cppsrc/io/surf_mlp_model_reader.cppsrc/feat/lab_feature_map.cppsrc/feat/surf_feature_map.cppsrc/分类器/lab_boosted_classifier.cppsrc/classifier/mlp.cppsrc/classifier/surf_mlp.cppsrc/face_detection.cppsrc/fust.cpp)add_library(face_detectSHARED${src_files})set(facedet_required_libsface_detect)if(BUILD_EXAMPLES)message(STATUS"Buildwithexamples.")find_package(OpenCV)if(NOTOpenCV_FOUND)message(警告“OpenCVnotfound.Testwillnotbebuilt.”)else()include_directories(${OpenCV_INCLUDE_DIRS})list(APPENDfacedet_required_libs${OpenCV_LIBS})add_executable(facedet_testsrc/test/facedetection_test.cpp)target_link_libraries(facedet_test${facedet_required_libs})endif()endif()创建build目录,mkdirbuildcompile,cdbuild&&cmake..&&make在当前目录生成可执行文件并执行make命令后,会在当前目录下生成一个可执行文件facedet_test。由于默认程序读取的是当前路径下的test_image.jpg和seeta_fd_frontal_v1.0.bin,其中test_image.jpg为人脸图像,seeta_fd_frontal_v1.0为识别引擎保证当前路径下存在以上两个文件,所以。/facedet_test可以运行。您可以修改位于src/test目录中的文件以实现您自己的目标。使用时,我们可以参考测试程序src/test/facedetection_test.cpp来达到我们人脸识别的目的。头文件#include"opencv2/highgui/highgui.hpp"#include"opencv2/imgproc/imgproc.hpp"#include"face_detection.h"opencv头文件主要用来加载图片,face_detection.h是主程序用于人脸识别。加载人脸识别引擎seeta::FaceDetectiondetector('seeta_fd_frontal_v1.0');设置最小人脸尺寸检测器.SetMinFaceSize(40);这个是根据实际情况调整的。图中,人脸越大,数值越大,因为数值越小,人脸识别速度越慢。识别图片中的人脸std::vectorfaces=detector.Detect(img_data);在此之前,需要对图片进行处理,此处跳过人脸识别结果的输出for(int32_ti=0;i

猜你喜欢