人脸识别(二)——训练分类器
上一篇簡單整理了下人臉識別的相關(guān)基礎知識,這一篇將著重介紹利用pencv(2.4.9)已有的模型進行分類器訓練。
一、關(guān)于ORL人臉數(shù)據(jù)庫
?ORL是一個40個人,每人采取10張人臉頭像構(gòu)成的一個人臉數(shù)據(jù)庫,尺寸全部為92*112。分為40個文件夾,即每個文件夾中包含有10張人臉照片,為pgm格式。
? ? ?其中s41為拍好并處理好的自己人臉圖像。
值得一提的是,圖片為pgm格式,許多軟件無法讀取,但是別忘了我們的opencv可是圖片處理能力十分強大的噢!如果想看下這些人臉圖是怎樣的,可以使用opencv的imshow函數(shù)進行讀取哦……
二、添加進自己的人臉數(shù)據(jù)
?上面截圖中可以看出,筆者采集了自己的照片,這一步需要有幾個注意點:
1.放入的圖片格式不一定要pgm格式
2.放入的圖片尺寸大小一定要一致(92*112)
3.圖片不需要自己一張張的拍攝,可以寫一段程序進行拍攝,并進行預處理達到要求,?之后放到ORL庫里一起整合。
?參考拍照程序:(為方便截圖取消了代碼行隔開)
此程序拍得的照片已經(jīng)將人臉處理成了92*112的大小。
三、利用已有模型進行訓練
1. ?一個小測試
筆者參照了不少博客大神,受益匪淺。在正式開始實踐前,先做了個小測試,即用較少的人臉數(shù)據(jù)進行訓練和識別測試。做小測試的時候,我是首先從ORL中選擇了2個人的各自5張圖片和自己的5張圖片,共3個人15張人臉圖片進行訓練。(11-15.jpg對應的是我自己,即上圖中1-5.jpg,此處人為復制出來進行命名進行小測試)
其中a1-a5對應一類(0),b1-b5對應一類(1 ),c1-c5對應一類(2),之后要做的就是將這些人臉圖壓進棧,即將照片(image.表示人臉圖像)和標簽(label表分類結(jié)果)下面以a類為例壓進棧。
在之后就是模型的訓練了,opencv自帶的Facerecognizer類。其中有人臉識別接下來會用到的幾個函數(shù)(train、load、save、predict)。
同時opencv自帶了三個人臉識別算法:Eigenfaces,Fisherfaces 和局部二值模式直方圖 (LBPH)。直接調(diào)用這三種算法很簡單,一般都是三句話足夠:
之后就可以直接測試了,以第一種模型為例:
?
2. ? ?數(shù)據(jù)量較大的情況
小測試中共涉及了15張圖片,即使讓你人為命名寫路徑也不算很麻煩,可是人臉識別需要的數(shù)據(jù)往往很大,這就不可能說人為的去一張張圖片的處理了。但是整體的流程和上面小測試是相同的,這里主要介紹一種csv文件的使用方法: ? ? ??
我們需要讀取人臉和人臉對應的標簽。直接在數(shù)據(jù)庫中讀取顯然是低效的。所以我們用csv文件讀取。csv文件中包含兩方面的內(nèi)容,一是每一張圖片的位置所在,二是每一個人臉對應的標簽,就是為每一個人編號。這個at.txt就是我們需要的csv文件。生成之后它里面是這個樣子的:(指定到人臉存儲路徑即可)
????????這里網(wǎng)上有許多教程可以自動生成csv文件,筆者是直接下載別人的,然后查找替換成自己路徑下即可,關(guān)鍵我們要學會的是怎么利用csv文件去訪問圖片和標簽。
????????這里可以參考筆者的程序,先定義子函數(shù),之后在主程序中調(diào)用即可:
?之后便是一些處理,將攝像頭采集到的圖像檢測出人臉,再將人臉處理成指定格式,調(diào)用predict函數(shù)進行識別,和庫內(nèi)數(shù)據(jù)比較即可。
?以上就是本篇的全部內(nèi)容,如果覺得有用,請幫忙關(guān)注下唄~
總結(jié)
以上是生活随笔為你收集整理的人脸识别(二)——训练分类器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人脸识别(一)——从零说起
- 下一篇: 人脸识别(二)——训练分类器的补充说明