人臉識別實踐總結

[我的站點](http://whbzju.github.io/blog/archives/)html

#概述 前段時間接觸了一陣子人臉識別,只能說是初窺門道,在這裏作個總結。本文不涉及具體的算法原理,由於我都是參考別人的資料,只認爲沒法寫的更好,在這邊作個概括總結。 現需求以下:從攝像頭視頻中識別出你本身或朋友的人臉python

要實現這個需求,大致分爲兩個步驟,分別爲人臉檢測和人臉識別,即先要從攝像頭中識別出人臉,即人臉檢測,其次對檢測到的人臉進行識別,即人臉識別。本文基於Opencv的人臉算法實現。git

##人臉檢測流程github

  • 選取特徵(本文采用Haar-like特徵)
  • 選取分類器算法,訓練人臉分類器(本文采用Adaboost級聯分類器)
  • 對圖像進行人臉檢測

##人臉識別流程算法

  • 選取人臉識別算法(本文包括PCA、FDA和LBP)
  • 訓練識別模型
  • 對目標進行識別

#Opencv相關資料介紹 opencv在2.4後引入了人臉識別相關模塊,原來只有人臉檢測部分。在Opencv官網,有較詳細的介紹,看 !目錄,在該目錄中重點要看這篇!Face Recognition with OpenCV.api

這應該是一個德國人寫的,在教程中他提到了3個算法:機器學習

  • EigenFaces
  • FisherFace
  • Local Binary Patterns Histograms

前面兩個算法都是利用子空間的原理,有必定的類似性,分別以PCA和LDA爲基礎。後者以特徵選取爲主,作法思路都不大同樣,建議分開看。該教程中對算法的描述過於簡潔,不適合初學者看,建議尋找相關資料進一步閱讀。 ##PCA-主成分分析法 PCA在不少地方都有應用,是一個十分簡單有效的方法。其思想歸納起來即降維,它認爲原始數據中包含了大量的噪音和冗餘,經過協方差矩陣的對角化能夠獲得一個子空間,該子空間的維度大大下降,卻神奇的保留了原始數據中的顯著特徵。ide

該算法的具體原理可參考斯坦福大學的公開課,Andrew.Ng的機器學習課程,裏面有一章節專門講pca,若以爲看視頻太慢,能夠直接看講義,講的很清楚。國內有幾個博客做者對它進行了翻譯,推薦:學習

!主成分分析(Principal components analysis)-最大方差解釋翻譯

!機器學習中的數學(4)-線性判別分析(LDA), 主成分分析(PCA)

該算法涉及較多的線性代數知識,忘掉的同窗建議複習下相關內容。

##LDA-線性判別分析 fisherface的FDA是在LDA基礎之上的一種算法。關於線性判別的思想以下:它認爲在PCA中,PCA把數據做爲一個總體來看,即數據源中全部的顯著特徵都會被保留下來,若是一我的的臉在強光下和弱光下,pca生成的子空間有顯著的差別,而他們倒是同一張臉。LDA的思想是尋找一個分割平面(在二維中即直線),來區分兩種不一樣類別的數據,既可以區分兩個不一樣的人臉,進行歸類。所以,它的目標就是怎麼要找到這個平面,達到最好的區分效果。

一樣,該算法的具體原理仍是推薦Andrew.Ng的機器學習公開課。國內也有相關介紹,可是他們的數學推導讓我不滿意。

!線性判別分析(Linear Discriminant Analysis)(一) !線性判別分析(Linear Discriminant Analysis)(二)

##LBPH 該算法較上面兩者容易理解,這裏不作詳細介紹,你們本身查找相關資料便可。

##Demo 上面教程中提到幾個算法opencv中都有例子實現,固然要作2.4以上。教程講了demo的位置和具體的使用。 全部的Demo須要一我的臉庫,教程中提供了幾個,能夠下載。下載下來的人臉庫須要預處理,即打上標籤,做者提供了python腳步,你們可使用。

有個demo值得關注,它實現了咱們的需求,它有個專門的教程:!Face Recognition in Videos with OpenCV. 不過要想識別本身的臉,必須將本身的臉裁剪下來保存到人臉庫中進行訓練。

我不想本身拍照片去裁剪,個人作法是利用demo中的人臉檢測算法,將個人人臉檢測到,而後保存成灰度圖,放到人臉庫中。PS:這裏有個問題,opencv自帶的人臉檢測分類器有可能會誤撿,會把空白的牆壁當作人臉。個人作法是,在視頻中指定一個矩形框,在這個矩形框中進行人臉檢測,這樣能夠大大下降誤撿率。實際操做中能夠調整位置,讓本身的人臉出如今矩形框中。

#Haar-like特徵Adaboost級聯分類器 完成了人臉識別的Demo驗證,你們必定很好奇人臉檢測是怎麼實現的。opencv裏面自帶的檢測算法原至兩篇論文: P. Viola and M. Jones. Rapid object detection using a boosted cascade of simple features. R. Lienhart and J. Maydt. An Extended Set of Haar-like Features for Rapid Object Detection.

##總體感受--如何訓練本身的分類器 你們能夠參考這篇!教程,利用opencv自帶的例子訓練一個分類器感受感受。 訓練分類器會遇到不少問題,人臉樣本和非人類樣本的比例有較高的要求,stage越高越難訓練,訓練時間也會隨之快速增加,並且效果還不能保證,博主訓練出來的分類器和opencv自帶的分類器效果是無法比啊!

##算法原理 我不打算這這裏描述它的原理,首先是這方面資料已經不少,我沒法作到寫的更好,其次是展開後篇幅太長,內容太多,我不想寫了,哈哈。 若想較好的理解,直接看上面提到的兩篇論文。若英文水平不行,能夠看北大有個學生寫的畢業論文:基於 AdaBoost 算法的人臉檢測,做者:趙楠,還不錯。

Haar-like特徵須要理解積分圖的概念,Adaboost包括弱分類器、強分類器和級聯分類器。其中級聯分類器較比較麻煩。

#總結 Opencv是個好東西,有個直接能運行的demo,比光禿禿的理論好多了,依靠它搭個自娛自樂的小工程沒問題。人臉識別的水很深,本文提到的算法是opencv裏面就有的,還有不少算法待各位本身有興趣去研究。

相關文章
相關標籤/搜索