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

2021-01-10 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

相關焦點

  • 武漢大學開源口罩人臉識別數據集,AI「讀心術」直譯腦電波
    01口罩抗疫,技術護航武漢大學開源口罩人臉識別數據集>「 對抗疫情進行中」3月初,武漢大學國家多媒體軟體技術研究中心,開放了一個特殊的人臉識別數據集——口罩遮擋人臉數據集:Real-World Masked Face Dataset,簡稱 RMFD。
  • 掌紋識別與人臉識別有啥關聯
    掌紋識別技術因其封閉性,會獲得更好的安全性和使用體驗;人臉識別得益於框架開源,將擁有更多創新應用和更大的應用規模。 近期美國專利與商標局公布了亞馬遜最新專利申請,一種非接觸式掃描系統,可通過掃描手掌特徵(包括掌紋和靜脈)來識用戶身份。 目前,亞馬遜公司已獲得了「非接觸式掃描系統」的專利,並將其手掌識別技術代號確定為Orville。
  • FaceNet 人臉識別模型- 彭于晏和鄧超人臉像嗎
    如上圖所示,我們能看出同一人臉的距離要遠小於不同人臉的距離。且一般我們判斷是否為同一人只需要設置一個距離閾值即可對人臉進行判斷。關於Deep Architecture 結構的CNN部分,現在有很多開源的模型可以借鑑,也可以使用預訓練模型,諸如OpenFace開源項目中很多預訓練模型。如何判別圖為某人臉使用圖像經過facenet模型得到的頭像特徵向量作為訓練數據,以傳統的分類器算法如支持向量機或線性分類器等進行分類。
  • 教程| 如何構建自定義人臉識別數據集
    在接下來的幾篇博文中,作者將帶領大家訓練一個「計算機視覺+深度學習」的模型來執行人臉識別任務。但是,要想訓練出能夠識別圖像或視頻流中人臉的模型,我們首先得收集人臉圖像的數據集。如果你使用的是「Labeled Faces in the Wild」(LFW)這樣預先準備好的數據集,那麼你可以不用進行這項困難的工作了。你可以使用我們下一篇博文中的方法創建自己的人臉識別應用。
  • 一個照片「隱身衣」,讓微軟曠視人臉識別系統100%失靈|開源
    但就是這樣肉眼根本看不出來的擾動,就能100%騙過來自微軟、亞馬遜、曠視——全球最先進的人臉識別模型!所以意義何在?這代表著你再也不用擔心po在網上的照片被某些軟體扒得乾乾淨淨,打包、分類,幾毛錢一整份賣掉餵AI了。
  • CVPR2019 | ArcFace:構建高效的人臉識別系統(已開源)
    ,歡迎各位小夥伴參與直播,與嘉賓互動交流~主題:CVPR2019 | ArcFace :構建高效的人臉識別系統時間:5月30日(周四)晚20:00~21:00研究方向為人臉分析,包括人臉檢測,配準,識別,生成等。曾多次在計算機視覺競賽(ImageNet, ActivityNet等)中奪冠。
  • 解放雙手,koobee手機人臉識別解鎖教程來咯
    操作前提:酷比手機系統必須是最新版本哦~進入【設置】——【系統更新】,系統會為您自動檢測版本型號,如若不是最新版本,更新到最新版本即可~                    ➤ 點擊進入設置人臉識別更新完系統後,我們可以看到設置裡面會多出一個「人臉識別」選項,點擊進入設置人臉識別➤ 點擊「人臉識別管理」,進入下一界面
  • HandAI開源項目,拉近人和攝影的距離:基於手勢識別完成不同的拍攝行為
    手部關鍵點檢測以及識別:對每一幀都要運行該模型,用來判斷手勢的含義(8個類別之一)。人像分割模型:也是每一幀都要運行,獲得前景人物的掩碼。用於做背景變化,背景虛化,背景黑白,防擋彈幕。人臉及五個關鍵點檢測:用於做人臉貼紙。下面具體講解,首先看整個項目的結構圖,非常簡單:
  • 杭州人臉識別系統.專題及常見問題 - CSDN
    一時間,保護好個人信息的話題引發網友廣泛討論。這也引了一些地方政府部門的重視。短短幾天時間多地出手了:天津、南京、杭州紛紛出臺政策,禁止非法採集人臉信息、禁止強制進行人臉識別。「AI四小龍」企業雲從科技科創板IPO申請於12月3日獲受理,中信建投為保薦機構。
  • 人臉識別中的人臉表情識別技術
    隨著人臉識別技術的發展,如今在識別中應用到對人臉的表情進行識別,可以應用在人機互動、安全、機器人製造、醫療、通信和汽車領域等。那麼,暢視智能來告訴人臉識別技術的人臉表情識別要如何進行?圖像獲取:通過人臉識別攝像頭等圖像捕捉工具獲取靜態人臉圖像或動態圖像序列。
  • 臉部識別手機有哪些 2018最新支持人臉識別的手機推薦
    不管是旗艦機還是千元入門級基本上都標配全面屏設計,當然除了這個我們還發現如今越來越多的智能加入了人臉識別功能。對於面部識別相信很多用戶不會陌生,要知道這個功能在去年的智慧型手機就出現過,只是那個時候尚未完全普及。而到了今年如今的千元機都基本上標配人臉識別解鎖。我們知道指紋識別安全性沒有人臉識別安全係數高,正是這樣的因素加劇了面部識別趨勢的發展。
  • 硬核科普:一文看懂人臉識別技術流程
    嗯,刷臉支付將小編從付錢時漫長等待的焦躁和不安中解救了出來,所以在IT之家編輯部的科技氛圍裡淫浸多年後,小編覺得有必要為大家講一講「刷臉」到底是個什麼東西,也可算是知恩圖報了!「刷臉」,顧名思義,背後是一項關鍵技術:人臉識別。
  • 用Python標記識別人臉,製作鏤空圖案的「笑臉」照片牆
    之後還要做後期的處理,比如將「人臉」的部分識別出來,只保留「笑臉」的部分。一、收集照片我使用微信的小程序「統計助手」收集照片,最後可以匯總導出Excel。照片不能直接導出,但是在Excel表格存儲了超連結可以下載。通過連結只能下載640像素寬度的縮略圖,不過根據連結的格式很容易猜出原圖的連結。
  • 百度大腦最新發布人臉合成圖甄別能力,人臉識別活體檢測更安全
    層出不窮的「AI換臉技術」被開源,那麼,手機上傳的動態視頻還都是真人嗎?當今生活中,無論金融理財、醫療社保,還是登錄社交帳號、刷臉考勤,通過「人臉識別」核驗用戶身份已十分常見。人臉識別中的活體檢測,普遍通過動作檢驗或靜默驗證,證明是「真人」而非圖片,其解決了用列印、翻拍照片、面具等通過人臉識別的問題,但依然有部分用戶上傳AI變臉、換臉等合成視頻企圖矇混過關。一系列「換臉」技術對人臉圖像的合成及篡改很難通過肉眼辨別真偽,且人臉數據涉及到用戶肖像、隱私等個人信息,篡改人臉數據也對用戶個人信息安全造成了威脅。
  • 危險的人臉識別
    劉嘉的項目只是人臉識別浪潮中的一朵小小浪花。一個不得不承認的事實是,我們的人臉正在成為別人的一門生意。不久前,人工智慧企業曠視科技在港交所提交招股書。曠視科技成立於2011年,起家於人臉識別,在計算機視覺領域與商湯科技、依圖科技、雲從科技並稱CV(計算機視覺)四小龍。2016年、2017年和2018年,其營業收入分別為6780萬元、3.13億元和14.27億元。
  • 人臉識別技術解析
    更有甚者,將參與者的人臉換臉到了主持人上,然後順利的通過了轉頭、搖頭、微笑等的一系列的人臉識別活體驗證。這一實驗引起了人們對人臉識別技術的擔憂,人臉識別到底靠譜麼?憑照片就可以製作出可欺騙人臉識別技術的模型,以後還能不能愉快地在社交平臺上曬自拍了?接下來就讓我們來聊一聊人臉識別技術。
  • Arduino入門教程|1.1環境搭建
    Arduino是我接觸的第一款單片機,之前一直聽說C51單片機,但由於51確實已經比較老了,而Arduino作為一款新興的開源單片機系統,也是受到國內外很多創客的支持,甚至許多青少年都已經開始學習使用此款單片機。
  • 人臉識別測溫機方案淺析:產品原理與免費算法推薦
    針對這一情況,本文將從技術原理、免費算法推薦、人臉識別硬體選型三大方面,幫助有需要的開發者進一步了解人臉測溫機一體機的產品及研發方案。針對這種情況,就需要引入人臉識別技術,將測溫目標與周圍環境進行精準"分割"。而基於人臉識別技術,不僅可以精準鎖定面部,還能同時實現門禁、考勤、訪客管理等多種功能。人臉識別算法推薦:免費、離線SDK人臉識別算法是傳統紅外測溫一體機脫胎換骨的關鍵,因此選擇合適算法也就非常重要。