日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
開源人臉識(shí)別seetaface入門教程(一)

簡述

創(chuàng)新互聯(lián)是一家專業(yè)提供乳源企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站制作、HTML5建站、小程序制作等業(yè)務(wù)。10年已為乳源眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。

seetaface由中科院計(jì)算所山世光研究員帶領(lǐng)的人臉識(shí)別研究組研發(fā)。代碼基于C++實(shí)現(xiàn),不依賴第三方庫。然而,目前開源的代碼,是在windows vs上編譯的,對(duì)于我們這幫mac/linux用戶來說,用起來還是挺麻煩的。經(jīng)過這幾天的學(xué)習(xí),對(duì)seetaface總算有了全面的了解。下面,聽我娓娓道來。

注意:本文章不涉及代碼邏輯和原理,只是教大家如何使用seetaface做人臉識(shí)別。

引擎

FaceDetection

  • 人臉識(shí)別模塊,用于識(shí)別出照片中的人臉,染回每個(gè)人臉的坐標(biāo)和人臉總數(shù)。

FaceAlignment

  • 特征點(diǎn)識(shí)別模塊,主要識(shí)別兩個(gè)嘴角、鼻子、兩個(gè)眼睛五個(gè)點(diǎn)的坐標(biāo)。測試下來,發(fā)現(xiàn)圖片模糊時(shí),識(shí)別不準(zhǔn)。

FaceIdentification

  • 人臉比較模塊,根據(jù)官方的說法,先提取特征值,然后比較。給出的測試程序是seetaface提取人臉的特征值和caffe訓(xùn)練庫里的人臉做對(duì)比。

以下教程都是在MacOSX編譯運(yùn)行通過。使用cmake和make編譯

以下的編譯方法是把FaceDetect測試程序也編譯了,而測試程序是依賴opencv的,所以,在這之前,確認(rèn)opencv是否安裝

人臉識(shí)別教程

編譯

由于代碼是在windows平臺(tái)編譯的,所以,這地方要做些修改。

  1. 進(jìn)入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
  2. 修改include/util/image_pyramid.h文件,在前面加上#include
  3. 修改src/feat/surf_feature_map.cpp文件,在前面加上#include
  4. 增加CMakeLists.txt,內(nèi)容如下:
  5.   
      
    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() 
  6. 建立build目錄,mkdir build
  7. 編譯,cd build && cmake .. && make
  8. 當(dāng)前目錄下生成可執(zhí)行文件

運(yùn)行

  1. 執(zhí)行完make命令以后,當(dāng)前的目錄下會(huì)生成一個(gè)可執(zhí)行文件facedet_test
  2. 由于默認(rèn)的程序讀取的是當(dāng)前路徑下的test_image.jpg和seeta_fd_frontal_v1.0.bin,test_image.jpg是人臉圖片,seeta_fd_frontal_v1.0是識(shí)別的引擎。
  3. 確保以上的兩個(gè)文件在當(dāng)前路徑下存在了,既可以./facedet_test運(yùn)行了。
  4. 你可以修改位于src/test目錄下的文件,來達(dá)到自己的目的。

使用

我們可以參考src/test/facedetection_test.cpp這個(gè)測試程序,來達(dá)到我們?nèi)四樧R(shí)別的目的。

頭文件 

 
 
  1. #include "opencv2/highgui/highgui.hpp" 
  2. #include "opencv2/imgproc/imgproc.hpp" 
  3. #include "face_detection.h" 
  4. opencv頭文件主要用來加載圖像,face_detection.h是人臉識(shí)別的主要程序。  

加載人臉識(shí)別引擎 

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

設(shè)置最小人臉大小 

 
 
  1. detector.SetMinFaceSize(40); 
  2. 這個(gè)根據(jù)實(shí)際情況調(diào)整,圖片中,人臉越大,這個(gè)值也越大,因?yàn)檫@個(gè)值越小,人臉識(shí)別速度越慢。

識(shí)別圖片中的人臉

 
 
  1. std::vector faces = detector.Detect(img_data); 

在這之前,需要對(duì)圖片進(jìn)行處理,這里略過

輸出人臉識(shí)別的結(jié)果 

 
 
  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;是人臉的左上角坐標(biāo)。faces[i].bbox.width;faces[i].bbox.height;是人臉的長和寬。  

結(jié)語

seetaface的確是個(gè)很好用的人臉識(shí)別庫,調(diào)用、編譯都很簡單,但是由于文檔的缺少,所以剛開始看的時(shí)候,會(huì)比較亂,不知道如何下手。本片文章主要介紹了FaceDetect的使用,接下來我會(huì)講解如何識(shí)別人臉的特征點(diǎn),也就是嘴、鼻子、眼。敬請(qǐng)期待。


分享名稱:開源人臉識(shí)別seetaface入門教程(一)
網(wǎng)頁地址:http://m.5511xx.com/article/coedodj.html