OpenCV學習筆記(五十四)——概述FaceRecognizerFace Service類contrib

來源:互聯網
上載者:User

在最新版的2.4.2中,文檔的更新也是一大亮點,refrence manual擴充了200多頁的內容,添加了contrib部分的文檔。contrib就是指OpenCV中新添加的模組,但又不是很穩定,可以認為是一個雛形的部分。這次結合refman的閱讀,介紹一下FaceRecognizer這個Face Service類,這個類也是2.4.2更新日誌裡著重強調過的更新,配套的文檔也是相當充實。這個類的基類也是Algorithm類,對於Algorithm類的簡單介紹,請參看我之前的blogOpenCV學習筆記(五十)——Algorithm類介紹(core),這個類內的介面函數也是異常簡單,Face Service的任務也就是兩大部分,訓練和預測,分別對應著train函數和predict函數,還有對應的資料載入儲存函數save和load。不過它當然還可以調用其基類Algorithm的函數。特別說明的是,Face Service中預測的參數也是可以調節的,但這裡只給出了train和predict函數,為啥沒有setparameter的函數呢,那是因為各中Face Service方法的參數並不相同,要通過Algorithm的get和set函數即時的調整~~v5啊!

先來說說訓練的過程,train函數的兩個參數也很簡單,訓練的映像組vector<Mat>和對應的標籤組vector<int>,這個label標籤只需保證同一個人的標籤相同即可,不需要保證映像的按標籤順序輸入,方便極了。對於預測,有兩種調用,其中的參數有測試映像、返回的標籤值和測試樣本和標籤樣本的相似性。返回的標籤值為-1,說明測試樣本在訓練集中無對應或距離較遠。這裡用個FisherFace作為樣本說明一下如何訓練和預測:

vector<Mat> images;vector<int> labels;// images for first personimages.push_back(imread("person0/0.jpg", CV_LOAD_IMAGE_GRAYSCALE));labels.push_back(0);images.push_back(imread("person0/1.jpg", CV_LOAD_IMAGE_GRAYSCALE));labels.push_back(0);// images for second personimages.push_back(imread("person1/0.jpg", CV_LOAD_IMAGE_GRAYSCALE));labels.push_back(1);images.push_back(imread("person1/1.jpg", CV_LOAD_IMAGE_GRAYSCALE));labels.push_back(1);Ptr<FaceRecognizer> model = createFisherFaceRecognizer();model->train(images, labels);Mat img = imread("person1/2.jpg", CV_LOAD_IMAGE_GRAYSCALE);int predicted = model->predict(img);

當然我們也不需要每次使用都進行一次訓練,可以把訓練好的模型通過save函數儲存成一個檔案,下次使用的時候只需load即可。

目前支援的3種Face Service的方案:特徵臉EigenFace、Fisher臉FisherFace、LBP長條圖LBPHFace。分別調用函數createEigenFaceRecognizer、createFisherFaceRecognizer、createLBPHFaceRecognizer建立模型。

對於EigenFace兩個輸入參數,分別為PCA主成分的維數num_components和預測時的閾值threshold,主成分這裡沒有一個選取的準則,要根據輸入資料的大小而決定,通常認為80維主成分是足夠的。除了這兩個輸入參數外,還有eigenvalues和eigenvectors分別代表特徵值和特徵向量,mean參數為訓練樣本的平均值,projections為訓練資料的預測值,labels為預測時的閾值。

對於FisherFace,和EigenFace非常相似,也有num_components和threshold兩個參數和其他5個參數,FisherFace的降維是LDA得到的。預設值為c-1,如果設定的初始值不在(0,c-1]的範圍內,會自動設定為c-1。

特別需要強調的是,EigenFace和FisherFace的訓練映像和測試映像都必須是灰階圖,而且是經過歸一化裁剪過的。

對於LBPHFace,我想不用過多介紹,LBP簡單和效果是大家都很喜歡的,參數包括半徑radius,鄰域大小即採樣點個數neighbors,x和y方向的儲存格數目grid_x,grid_y,還有兩個參數histograms為訓練資料得到的長條圖,labels為長條圖對應的標籤。這個方法也要求訓練和測試的映像是灰階圖

接下來應該結合文檔進一步研究一下這個Face Service類。我之前大量的人臉實驗都是在matlab下進行的,有了這個利器,我感覺會有越來越多的學生做老師和老闆布置的project會選擇用OpenCV,而不是Matlab。希望我們都愛的OpenCV越來越好,越來越強大。歡迎交流

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.