開源人臉識別seetaface入門教程(一)

2020-12-11 TechWeb

簡述

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

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

引擎

FaceDetection

人臉識別模塊,用於識別出照片中的人臉,染回每個人臉的坐標和人臉總數。

FaceAlignment

特徵點識別模塊,主要識別兩個嘴角、鼻子、兩個眼睛五個點的坐標。測試下來,發現圖片模糊時,識別不準。

FaceIdentification

人臉比較模塊,根據官方的說法,先提取特徵值,然後比較。給出的測試程序是seetaface提取人臉的特徵值和caffe訓練庫裡的人臉做對比。

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

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

人臉識別教程

編譯

由於代碼是在windows平臺編譯的,所以,這地方要做些修改。

進入FaceDetection目錄 修改include/common.h,修改38行  #ifdef SEETA_EXPORTS  #define SEETA_API __declspec(dllexport)  #else  #define SEETA_API __declspec(dllimport)  #endif  

Ϊ

#if defined _WIN32  #ifdef SEETA_EXPORTS  #define SEETA_API __declspec(dllexport)  #else  #define SEETA_API __declspec(dllimport)  #endif  #else  #define SEETA_API  #endif   修改include/feat/surf_feature_map.h文件,在前面加上#include <cstring> 修改include/util/image_pyramid.h文件,在前面加上#include <cstring> 修改src/feat/surf_feature_map.cpp文件,在前面加上#include <cmath> 增加CMakeLists.txt,內容如下: cmake_minimum_required(VERSION 3.3) project(seeta_facedet_lib) option(BUILD_EXAMPLES  "Set to ON to build examples"  ON) option(USE_OPENMP      "Set to ON to build use openmp"  ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) message(STATUS "C++11 support has been enabled by default.") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1")  if (USE_OPENMP)         find_package(OpenMP QUIET)         if (OpenMP_FOUND)             message(STATUS "Use OpenMP")             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_LINKER_FLAGS}")         endif()     endif()      include_directories(include)      set(src_files         src/util/nms.cpp         src/util/image_pyramid.cpp         src/io/lab_boost_model_reader.cpp         src/io/surf_mlp_model_reader.cpp         src/feat/lab_feature_map.cpp         src/feat/surf_feature_map.cpp         src/classifier/lab_boosted_classifier.cpp         src/classifier/mlp.cpp         src/classifier/surf_mlp.cpp         src/face_detection.cpp         src/fust.cpp         )      add_library(face_detect SHARED ${src_files})     set(facedet_required_libs face_detect)      if (BUILD_EXAMPLES)                    message(STATUS "Build with examples.")         find_package(OpenCV)         if (NOT OpenCV_FOUND)             message(WARNING "OpenCV not found. Test will not be built.")         else()             include_directories(${OpenCV_INCLUDE_DIRS})             list(APPEND facedet_required_libs ${OpenCV_LIBS})              add_executable(facedet_test src/test/facedetection_test.cpp)             target_link_libraries(facedet_test ${facedet_required_libs})         endif()     endif()  建立build目錄,mkdir build 編譯,cd build && 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::FaceDetection detector(『seeta_fd_frontal_v1.0』); 

設置最小人臉大小

detector.SetMinFaceSize(40); 這個根據實際情況調整,圖片中,人臉越大,這個值也越大,因為這個值越小,人臉識別速度越慢。

識別圖片中的人臉

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

在這之前,需要對圖片進行處理,這裡略過

輸出人臉識別的結果

for (int32_t i = 0; i < num_face; i++) {     face_rect.x = faces[i].bbox.x;     face_rect.y = faces[i].bbox.y;     face_rect.width = faces[i].bbox.width;     face_rect.height = faces[i].bbox.height;     cv::rectangle(img, face_rect, CV_RGB(0, 0, 255), 4, 8, 0); } s[i].bbox.x; faces[i].bbox.y;是人臉的左上角坐標。faces[i].bbox.width;faces[i].bbox.height;是人臉的長和寬。  

結語

seetaface的確是個很好用的人臉識別庫,調用、編譯都很簡單,但是由於文檔的缺少,所以剛開始看的時候,會比較亂,不知道如何下手。本片文章主要介紹了FaceDetect的使用,接下來我會講解如何識別人臉的特徵點,也就是嘴、鼻子、眼。敬請期待。

點讚 0

相關焦點

  • 什麼是 SeetaFace 開源人臉識別引擎
    為實現此目的,一種可能的技術手段是通過對人臉的光學成像來感知人、識別人,即所謂的人臉識別技術。經過幾十年的研發積累,特別是近年來深度學習技術的湧現,人臉識別取得了長足的進步,在安防、金融、教育、社保等領域得到了越來越多的應用,成為計算機視覺領域最為成功的分支領域之一。然而,人臉識別並非完全成熟的技術,離公眾期望的全面應用尚有距離,還需要學術界、工業界的共同努力。
  • SeetaFace開源人臉識別引擎介紹
    為此,整個人臉識別社區需要有基準(Baseline)系統,而且基準系統的水平顯然會極大影響著該領域的發展水平。可是令人尷尬的是,這個領域迄今尚無一套包括所有技術模塊的、完全開源的基準人臉識別系統!我們希望改變現狀,因此開源了SeetaFace人臉識別引擎。該引擎由中科院計算所山世光研究員帶領的人臉識別研究組研發。
  • 如何判斷人臉識別是否準確?SeetaFace助你一臂之力
    然而,人臉識別並非是完全成熟的技術,離公眾期望的全面應用尚有距離,仍然需要學術界、工業界的共同努力。為此,整個人臉識別社區需要有基準(Baseline)系統,而且基準系統的水平顯然會極大影響著該領域的發展水平。可是令人尷尬的是,這個領域迄今尚無一套包括所有技術模塊的、完全開源的基準人臉識別系統。
  • 如何判斷人臉識別是否準確?SeetaFace助你一臂之力|AI科技評論
    然而,人臉識別並非是完全成熟的技術,離公眾期望的全面應用尚有距離,仍然需要學術界、工業界的共同努力。為此,整個人臉識別社區需要有基準(Baseline)系統,而且基準系統的水平顯然會極大影響著該領域的發展水平。可是令人尷尬的是,這個領域迄今尚無一套包括所有技術模塊的、完全開源的基準人臉識別系統。
  • 支付寶人臉識別怎麼設置 支付寶人臉識別在哪裡找教程
    支付寶人臉識別是支付寶推出的一個系統安全認證的功能,之前只是作為部分功能安全認證的一個功能,因為在3.15晚會上被曝光之後被質疑安全性再次受到關注。  在晚會現場有一個互動環節,利用他人的自拍照或者通過圖像處理軟體可以實現動態自拍照片,從而通過人臉識別登錄他人社交媒體以及銀行帳號。  看似安全又高大上的識別方式,卻輕易被破解。
  • Python系列之三——人臉檢測、人臉識別
    之前有利用C++和OpenCv寫過人臉識別的系列文章,對於人臉識別的基本理解和步驟流程等基本知識不做反覆敘述。比詹小白還要白的童鞋可以查看往期文章進行了解噢1.人臉識別(一)——從零說起2.人臉識別(二)——訓練分類器3.人臉識別(二)——訓練分類器的補充說明4.人臉識別(三)——源碼放送一、人臉檢測      python版人臉檢測基本上可以參照C++版本的程序,根據語法不同進行改寫即可。
  • 重磅|中科視拓開源SeetaFace2人臉識別算法
    今天,來自中科院計算所的人工智慧國家隊中科視拓宣布,開源商用級SeetaFace2人臉識別算法。SeetaFace2採用商業友好的BSD協議,這是在2016年9月開源SeetaFace1.0人臉識別引擎之後,中科視拓在人臉識別領域的又一次自我革命。
  • 【乾貨】通過OpenFace來理解人臉識別
    【導讀】本文是Stephanie Kim的一篇博文你,作者探討的是一個老生常談的話題「人臉識別」,介紹針對人臉識別任務的一個特定的開源庫——OpenFace
  • 十個值得一試的開源深度學習框架 - OSCHINA - 中文開源技術交流社區
    無疑,來自Google軍火庫的TensorFlow必然是開源深度學習軟體中的明星產品,登陸GitHub當天就成為最受關注的項目,當周獲得評星數就輕鬆超過1萬個。對於希望在應用中整合深度學習功能的開發者來說,GitHub上其實還有很多不錯的開源項目值得關注,首先我們推薦目前規模人氣最高的TOP3:一、Caffe。
  • 高效安全,酷比koobee F2 Plus人臉識別解鎖教程
    高效安全,酷比koobee F2 Plus人臉識別解鎖教程      正式進入刷臉時代!人工智慧面前,我們除了佩服,就是更佩服!
  • 【人臉表情識別】基於圖片的人臉表情識別,基本概念和數據集
    作者&編輯 | Menpinland在較早之前,有三AI已經有一篇《人臉表情識別研究》的文章,裡面已經對早期的人臉表情相關的內容做了一個較為詳細的綜述。但最近幾年,由於深度學習技術的發展,以及越來越多大規模人臉表情識別數據集的開源,人臉表情識別的相關研究也發生了比較多的變化。
  • 中科視拓開源SeetaFace2人臉識別算法
    集微網消息(文/春夏)近日,中科視拓(北京)科技有限公司(以下簡稱「中科視拓」)宣布,開源商用級SeetaFace2人臉識別算法。SeetaFace2支持的上層應用包括但不限於人臉門禁、無感考勤、人臉比對等。與2016年開源的SeetaFace1.0相比,SeetaFace2在速度和精度兩個層面上均有數量級的提升。
  • 百度開源業內首個口罩人臉檢測及分類模型
    2月13日,百度宣布免費開源業內首個口罩人臉檢測及分類模型。該模型可以有效檢測在密集人流區域中攜帶和未攜戴口罩的所有人臉,同時判斷該者是否佩戴口罩。目前已通過飛槳PaddleHub開源出來,廣大開發者用幾行代碼即可快速上手,免費調用。
  • 怎樣用3分鐘搭建 Python 人臉識別系統
    Face Recognition 使用的是 C++ 開源庫 dlib 通過深度學習模型構建的先進人臉識別系統,可通過 Python 接口或命令行工具對圖片中的人臉進行識別。
  • 人臉識別碰壁,百度如何「破圈」?
    基於這一發現,通過採用基於空間位置的注意力機制特徵學習方法,充分獲取戴口罩人臉的身份信息。基於空間位置的注意力機制特徵學習其次,針對缺乏戴口罩訓練數據的問題,百度算法團隊通過人工生成的方式來解決。合成口罩圖片最後,在人臉識別系統的各個環節,針對戴口罩問題,百度算法團隊做了一系列的優化。
  • 如何在 Keras 中使用 FaceNet 開發人臉識別系統
    由於該模型的多個第三方開源實現和預訓練模型的可用性,FaceNet 系統得到了廣泛的使用。FaceNet 系統可從人臉中提取高質量的特徵,稱為人臉嵌入(face embeddings),可用於訓練人臉識別系統。在本教程中,你將了解如何使用 FaceNet 和 SVM 分類器開發人臉檢測系統,來從照片中識別出身份。
  • 人臉識別(一)——從零說起
    此系列文章將從理論到實踐進行整合:分三篇進行敘述,第一篇從零說人臉識別,保證大多數朋友能通過這篇文章了解到人臉識別的概念,並且能夠形成一個基本的框架。第二篇將進行初步的實踐,包括人臉圖像的採集,和如何利用opencv已有的模型根據人臉圖像進行訓練,得到需要的分類器。第
  • 【深度】人臉識別泛濫,誰有權拿走你的人臉數據?
    近年來,以深度學習為核心的人工智慧技術飛速發展,其中國內以視覺識別技術最為成熟,應用落地最為廣泛。出於商業前景考慮,無論是網際網路大公司、傳統安防公司以及新興的人工智慧技術公司都在這一領域大舉投入。人臉識別(視覺識別技術的一種應用)在國內的應用大致經歷從公共安全領域擴展到商業領域的過程。
  • 華為雲&跟誰學|華為雲API入門學習賽·AI人臉識別 未來工程師夢想...
    首頁 > 傳媒 > 關鍵詞 > 華為雲最新資訊 > 正文 華為雲&跟誰學|華為雲API入門學習賽·AI人臉識別 未來工程師夢想的起點
  • 一個照片「隱身衣」,讓微軟曠視人臉識別系統100%失靈|開源
    但就是這樣肉眼根本看不出來的擾動,就能100%騙過來自微軟、亞馬遜、曠視——全球最先進的人臉識別模型!所以意義何在?這代表著你再也不用擔心po在網上的照片被某些軟體扒得乾乾淨淨,打包、分類,幾毛錢一整份賣掉餵AI了。