1. 程式人生 > >人臉識別(二)——訓練分類器

人臉識別(二)——訓練分類器

上一篇簡單整理了下人臉識別的相關基礎知識,這一篇將著重介紹利用pencv(2.4.9)已有的模型進行分類器訓練。

一、關於ORL人臉資料庫

 ORL是一個40個人,每人採取10張人臉頭像構成的一個人臉資料庫,尺寸全部為92*112。分為40個資料夾,即每個資料夾中包含有10張人臉照片,為pgm格式。


     其中s41為拍好並處理好的自己人臉影象。


值得一提的是,圖片為pgm格式,許多軟體無法讀取,但是別忘了我們的opencv可是圖片處理能力十分強大的噢!如果想看下這些人臉圖是怎樣的,可以使用opencv的imshow函式進行讀取哦……

二、新增進自己的人臉資料

上面截圖中可以看出,筆者採集了自己的照片,這一步需要有幾個注意點:

1.放入的圖片格式不一定要pgm格式

2.放入的圖片尺寸大小一定要一致(92*112)

3.圖片不需要自己一張張的拍攝,可以寫一段程式進行拍攝,並進行預處理達到要求, 之後放到ORL庫裡一起整合。

 參考拍照程式:(為方便截圖取消了程式碼行隔開)

此程式拍得的照片已經將人臉處理成了92*112的大小。

三、利用已有模型進行訓練

1.  一個小測試

筆者參照了不少部落格大神,受益匪淺。在正式開始實踐前,先做了個小測試,即用較少的人臉資料進行訓練和識別測試。做小測試的時候,我是首先從ORL中選擇了2個人的各自5張圖片和自己的5張圖片,共3個人15張人臉圖片進行訓練。(11-15.jpg對應的是我自己,即上圖中1-5.jpg,此處人為複製出來進行命名進行小測試)


其中a1-a5對應一類(0),b1-b5對應一類(1 ),c1-c5對應一類(2),之後要做的就是將這些人臉圖壓進棧,即將照片(image.表示人臉影象)和標籤(label表分類結果)下面以a類為例壓進棧。

在之後就是模型的訓練了,opencv自帶的Facerecognizer類。其中有人臉識別接下來會用到的幾個函式(train、load、save、predict)。


同時opencv自帶了三個人臉識別演算法:Eigenfaces,Fisherfaces 和區域性二值模式直方圖 (LBPH)。直接呼叫這三種演算法很簡單,一般都是三句話足夠:

之後就可以直接測試了,以第一種模型為例:

2.    資料量較大的情況

小測試中共涉及了15張圖片,即使讓你人為命名寫路徑也不算很麻煩,可是人臉識別需要的資料往往很大,這就不可能說人為的去一張張圖片的處理了。但是整體的流程和上面小測試是相同的,這裡主要介紹一種csv檔案的使用方法:       

我們需要讀取人臉和人臉對應的標籤。直接在資料庫中讀取顯然是低效的。所以我們用csv檔案讀取。csv檔案中包含兩方面的內容,一是每一張圖片的位置所在,二是每一個人臉對應的標籤,就是為每一個人編號。這個at.txt就是我們需要的csv檔案。生成之後它裡面是這個樣子的:(指定到人臉儲存路徑即可)


        這裡網上有許多教程可以自動生成csv檔案,筆者是直接下載別人的,然後查詢替換成自己路徑下即可,關鍵我們要學會的是怎麼利用csv檔案去訪問圖片和標籤。

        這裡可以參考筆者的程式,先定義子函式,之後在主程式中呼叫即可:



 之後便是一些處理,將攝像頭採集到的影象檢測出人臉,再將人臉處理成指定格式,呼叫predict函式進行識別,和庫內資料比較即可。

 以上就是本篇的全部內容,如果覺得有用,請幫忙關注下唄~