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

简介:

简述

seetaface由中科院计算所山世光研究员带领的人脸识别研究组研发。代码基于C++实现,不依赖第三方库。然而,目前开源的代码,是在windows vs上编译的,对于我们这帮mac/linux用户来说,用起来还是挺麻烦的。经过这几天的学习,对seetaface总算有了全面的了解。下面,听我娓娓道来。

注意:本文章不涉及代码逻辑和原理,只是教大家如何使用seetaface做人脸识别。

引擎

FaceDetection

  • 人脸识别模块,用于识别出照片中的人脸,染回每个人脸的坐标和人脸总数。

FaceAlignment

  • 特征点识别模块,主要识别两个嘴角、鼻子、两个眼睛五个点的坐标。测试下来,发现图片模糊时,识别不准。

FaceIdentification

  • 人脸比较模块,根据官方的说法,先提取特征值,然后比较。给出的测试程序是seetaface提取人脸的特征值和caffe训练库里的人脸做对比。

以下教程都是在MacOSX编译运行通过。使用cmake和make编译

以下的编译方法是把FaceDetect测试程序也编译了,而测试程序是依赖opencv的,所以,在这之前,确认opencv是否安装

人脸识别教程

编译

由于代码是在windows平台编译的,所以,这地方要做些修改。

  1. 进入FaceDetection目录
  2. 修改include/common.h,修改38行 
 
 
  1. #ifdef SEETA_EXPORTS 
  2.  
  3. #define SEETA_API __declspec(dllexport) 
  4.  
  5. #else 
  6.  
  7. #define SEETA_API __declspec(dllimport) 
  8.  
  9. #endif  

 
 
  1. #if defined _WIN32 
  2.  
  3. #ifdef SEETA_EXPORTS 
  4.  
  5. #define SEETA_API __declspec(dllexport) 
  6.  
  7. #else 
  8.  
  9. #define SEETA_API __declspec(dllimport) 
  10.  
  11. #endif 
  12.  
  13. #else 
  14.  
  15. #define SEETA_API 
  16.  
  17. #endif  
  1. 修改include/feat/surf_feature_map.h文件,在前面加上#include <cstring>
  2. 修改include/util/image_pyramid.h文件,在前面加上#include <cstring>
  3. 修改src/feat/surf_feature_map.cpp文件,在前面加上#include <cmath>
  4. 增加CMakeLists.txt,内容如下:
 
 
  1. cmake_minimum_required(VERSION 3.3) 
  2. project(seeta_facedet_lib) 
  3. option(BUILD_EXAMPLES  "Set to ON to build examples"  ON) 
  4. option(USE_OPENMP      "Set to ON to build use openmp"  ON) 
  5. set(CMAKE_CXX_STANDARD 11) 
  6. set(CMAKE_CXX_STANDARD_REQUIRED ON) 
  7. message(STATUS "C++11 support has been enabled by default.") 
  8. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1") 
  9.  
  10. if (USE_OPENMP) 
  11.         find_package(OpenMP QUIET) 
  12.         if (OpenMP_FOUND) 
  13.             message(STATUS "Use OpenMP") 
  14.             add_definitions(-DUSE_OPENMP) 
  15.             set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") 
  16.             set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") 
  17.             set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") 
  18.         endif() 
  19.     endif() 
  20.  
  21.     include_directories(include) 
  22.  
  23.     set(src_files 
  24.         src/util/nms.cpp 
  25.         src/util/image_pyramid.cpp 
  26.         src/io/lab_boost_model_reader.cpp 
  27.         src/io/surf_mlp_model_reader.cpp 
  28.         src/feat/lab_feature_map.cpp 
  29.         src/feat/surf_feature_map.cpp 
  30.         src/classifier/lab_boosted_classifier.cpp 
  31.         src/classifier/mlp.cpp 
  32.         src/classifier/surf_mlp.cpp 
  33.         src/face_detection.cpp 
  34.         src/fust.cpp 
  35.         ) 
  36.  
  37.     add_library(face_detect SHARED ${src_files}) 
  38.     set(facedet_required_libs face_detect) 
  39.  
  40.     if (BUILD_EXAMPLES)         
  41.            message(STATUS "Build with examples.") 
  42.         find_package(OpenCV) 
  43.         if (NOT OpenCV_FOUND) 
  44.             message(WARNING "OpenCV not found. Test will not be built.") 
  45.         else() 
  46.             include_directories(${OpenCV_INCLUDE_DIRS}) 
  47.             list(APPEND facedet_required_libs ${OpenCV_LIBS}) 
  48.  
  49.             add_executable(facedet_test src/test/facedetection_test.cpp) 
  50.             target_link_libraries(facedet_test ${facedet_required_libs}) 
  51.         endif() 
  52.     endif() 
建立build目录,mkdir build 编译,cd build && cmake .. && make 当前目录下生成可执行文件

运行

  1. 执行完make命令以后,当前的目录下会生成一个可执行文件facedet_test
  2. 由于默认的程序读取的是当前路径下的test_image.jpg和seeta_fd_frontal_v1.0.bin,test_image.jpg是人脸图片,seeta_fd_frontal_v1.0是识别的引擎。
  3. 确保以上的两个文件在当前路径下存在了,既可以./facedet_test运行了。
  4. 你可以修改位于src/test目录下的文件,来达到自己的目的。

使用

我们可以参考src/test/facedetection_test.cpp这个测试程序,来达到我们人脸识别的目的。

头文件

 
 
  1. #include "opencv2/highgui/highgui.hpp" 
  2. #include "opencv2/imgproc/imgproc.hpp" 
  3. #include "face_detection.h" 
  4. opencv头文件主要用来加载图像,face_detection.h是人脸识别的主要程序。  

加载人脸识别引擎

 
 
  1. seeta::FaceDetection detector(‘seeta_fd_frontal_v1.0’); 

设置最小人脸大小

 
 
  1. detector.SetMinFaceSize(40); 
  2. 这个根据实际情况调整,图片中,人脸越大,这个值也越大,因为这个值越小,人脸识别速度越慢。

识别图片中的人脸

 
 
  1. std::vector<seeta::FaceInfo> faces = detector.Detect(img_data); 

在这之前,需要对图片进行处理,这里略过

输出人脸识别的结果

 
 
  1. for (int32_t i = 0; i < num_face; i++) { 
  2.     face_rect.x = faces[i].bbox.x; 
  3.     face_rect.y = faces[i].bbox.y; 
  4.     face_rect.width = faces[i].bbox.width; 
  5.     face_rect.height = faces[i].bbox.height; 
  6.     cv::rectangle(img, face_rect, CV_RGB(0, 0, 255), 4, 8, 0); 
  7. s[i].bbox.x; faces[i].bbox.y;是人脸的左上角坐标。faces[i].bbox.width;faces[i].bbox.height;是人脸的长和宽。  

结语

seetaface的确是个很好用的人脸识别库,调用、编译都很简单,但是由于文档的缺少,所以刚开始看的时候,会比较乱,不知道如何下手。本片文章主要介绍了FaceDetect的使用,接下来我会讲解如何识别人脸的特征点,也就是嘴、鼻子、眼。敬请期待。





作者:xiaochao
来源:51CTO
目录
相关文章
|
2月前
|
机器学习/深度学习 测试技术 PyTorch
你有多久没看过人脸识别的文章了?X2-SoftMax开源,ArcFace与MagFace都黯然失色了
你有多久没看过人脸识别的文章了?X2-SoftMax开源,ArcFace与MagFace都黯然失色了
46 0
你有多久没看过人脸识别的文章了?X2-SoftMax开源,ArcFace与MagFace都黯然失色了
|
8月前
|
机器学习/深度学习 搜索推荐 计算机视觉
【阿里云OpenVI-人脸感知理解系列之人脸识别】基于Transformer的人脸识别新框架TransFace ICCV-2023论文深入解读
本文介绍 阿里云开放视觉智能团队 被计算机视觉顶级国际会议ICCV 2023接收的论文 &quot;TransFace: Calibrating Transformer Training for Face Recognition from a Data-Centric Perspective&quot;。TransFace旨在探索ViT在人脸识别任务上表现不佳的原因,并从data-centric的角度去提升ViT在人脸识别任务上的性能。
1695 341
|
机器学习/深度学习 缓存 人工智能
腾讯优图开源人脸识别底层技术:一款深度学习推理框架TNN
6月10日,腾讯优图实验室开源了一款深度学习推理框架TNN,高效解锁计算机视觉算法。
541 0
腾讯优图开源人脸识别底层技术:一款深度学习推理框架TNN
|
算法 测试技术 计算机视觉
中国团队夺得MegaFace百万人脸识别冠军,精度98%再创记录,论文代码+数据全开源
在知名的人脸识别评测 LFW 中,很多团队都取得了接近乃至超过 99.80% 的成绩。但是在大规模人脸识别中,挑战依然存在。例如MegaFace百万人脸识别挑战,即便在 LFW 上表现良好的模型也常常只能达到 60% 多的精度。
6871 0
|
机器学习/深度学习 编解码 测试技术
|
机器学习/深度学习 编解码 测试技术
|
2月前
|
机器学习/深度学习 监控 算法
m基于深度学习网络的活体人脸和视频人脸识别系统matlab仿真,带GUI界面
m基于深度学习网络的活体人脸和视频人脸识别系统matlab仿真,带GUI界面
39 0
|
15天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
39 6
|
2月前
|
算法 安全 搜索推荐
深入浅出:使用Python实现人脸识别系统
在当今数字化时代,人脸识别技术已成为安全验证、个性化服务等领域的关键技术。本文将引导读者从零开始,逐步探索如何利用Python和开源库OpenCV来构建一个基础的人脸识别系统。本文不仅会详细介绍环境搭建、关键算法理解,还会提供完整的代码示例,帮助读者理解人脸识别的工作原理,并在实际项目中快速应用。通过本文,您将能够掌握人脸识别的基本概念、关键技术和实现方法,为进一步深入学习和研究打下坚实的基础。

热门文章

最新文章