人臉識別博客匯總以及一些學習建議

一、前言

之前基於OpenCV斷斷續續寫了幾篇關於人臉識別的博客。最開始是寫了三篇一系列整套的流程。後來由於問問題的人太多,就又針對一些問題寫了些東西,後來OpenCV3出來之後把程序又改成了OpenCV3版本。並且把程序修改的極其容易上手運行,我覺得改的不能更簡單了,因為配置好之後其實修改下路徑只需要點運行就差不多了。再後來,OpenCV3.3出來之後,人臉識別模塊的API發生了變化,於是繼續寫出來通知大家。但是由於很多人看博客的時候只是看了最初的三篇,而且有些人沒有看完之後再去看作者其他文章的習慣,所以會問一些已經解決的問題。本文中我把所有的有用的文章整合起來,以方便大家查閱。

二、經常需要解釋的東西

  1. OpenCV先有的三種人臉識別方法是非常經典但是也是非常傳統的基於特徵的方法,這就意味著,它的正確率不會太高,而且對於場景要求比較嚴格。說白了,OpenCV的人臉識別程序僅僅能夠滿足大家的學習需要,能夠讓大家知道做人臉識別的流程和框架。如果真要做考勤系統或者說人臉識別打卡這些商用的或者產品級東西,光靠本博客的內容是遠遠不夠的。還需要在這個框架下做許多細節優化的東西。當然,真正需要做產品的人估計也不會來我這裡看OpenCV學習的內容了。本博客只保證在同一場景下(訓練圖片和測試圖片在同一場景)有較好的識別率。如果還要深入研究的朋友,請學習了傳統方法之後,繼續研究基於深度學習的方法。
  2. OpenCV2、3、3.3人臉識別部分的API均有所變化,如果遇到不能識別人臉識別模塊某些函數(只是某些不是所有,不然就是配置問題了)的問題,應該根據自己配置的OpenCV版本,查看本版本的API,然後修改我的代碼。
  3. OpenCV一定要配置編譯了contrib模塊的,配置的時候記得添加環境變數,最後重啟電腦。

三、人臉識別系列博客整理

Visual Studio 2015一分鐘配置opencv及CMake編譯OpenCV3.1(含opencv-contrib)

OpenCV實踐之路--人臉識別之一數據收集和預處理 - CSDN博客

OpenCV實踐之路--人臉識別之二模型訓練 - CSDN博客

OpenCV實踐之路--人臉識別之三識別自己的臉 - CSDN博客

OpenCV之識別自己的臉--C++源碼放送 - CSDN博客

人臉識別源碼運行指南 - CSDN博客

OpenCV3.3人臉識別模塊的API的變化 - CSDN博客

四、下面的話適合運行成功之後再看

  1. 常言道,授之以魚不如授之以漁,希望大家能在本系列學習的過程中學習到一些屬於自己的東西,而不是僅僅是能夠運行成功別人的程序。
  2. 學習別人的程序的一種好方法是自己再敲一遍,很多直接運行的時候遇到的問題,也許再敲一遍之後,就不再是問題了。
  3. 而且,本文提供的方法參考的是OpenCV官方教程中的方法,這種方法我認為是不太友好的,畢竟裡面用到了Python腳本和at.txt這種東西,我覺得這些東西都是非必要的,完全可以用C++程序完成Python和at.txt的功能。實際上,我也這麼嘗試了,完全是可行的,純C++程序,無需Python和at.txt這種不太友好的東西。大家可以學習完之後把這個當成一個練習來做。而且裡面用到的相關技術我也已經發到博客里了。這個我就不喂到嘴裡了,感興趣的可以自己找找。
  4. 如果你真的做了以上工作還有興趣的話,我推薦你去深入了解下OpenCV人臉識別幾種方法的原理,然後去讀OpenCV人臉識別部分的源代碼。
  5. 如果你真的做了以上工作還有興趣,我推薦你擺脫OpenCV的contrib模塊,自己重新實現一個人臉識別模塊出來。實現的時候可以嘗試不同的方法,比如嘗試不同的特徵,嘗試不同的相似性度量方法,或者嘗試不同的框架,比如LBP+SVM。筆者讀完源碼之後,基於源碼嘗試重新實現了LBP人臉識別方法,然後又嘗試了LBP+SVM進行人臉識別。對於人臉識別以及其他任何東西的識別方法都有了更深的理解。
  6. 如果你的研究課題或者工作內容就是人臉識別,那麼肯定的,你需要轉向深度學習進行人臉識別方法了。這個由於我的研究方向不是這個,研究不深,只是指個方向。
  7. 現在事情太多時間緊張,很多東西暫時沒時間寫出來。以後有時間的話再說。

推薦閱讀:

在圖像處理中用Mat比IplImage 除了不用自己管理內存,Mat有其他的優勢沒?請熟悉OpenCV和圖像處理的大牛指點
OpenCV 與 OpenGL 的關係是什麼?
1.28【OpenCV圖像處理】凸包計算
如何在CLion上配置使用OpenCV?

TAG:人脸识别 | OpenCV |