簡體   English   中英

OpenCV / JavaCV人臉識別 - 非常相似的置信度值

[英]OpenCV/JavaCV face recognition - Very similar confidence values

我將解釋我想要做什么,因為它似乎與理解我的問題有關。

我目前正在嘗試基於數據庫中的已知圖片對在攝像機前面的人進行人臉識別。

這些已知圖片是從識別智能卡(其僅包含單個正面圖片)或來自社交網絡的正面臉部圖片收集的。 從我到目前為止所看到的情況來看,似乎要獲得良好的人臉識別,需要大量的訓練圖像(50+)。 因此,由於我收集的圖像很少能夠創建可靠的訓練集,所以我嘗試使用我的實時相機幀捕獲(當前使用150)作為訓練集,並且先前收集的識別圖像作為測試集。 我不確定我正在嘗試的是否正確,所以如果我搞砸了,請告訴我。

所以,問題是,在我說了之后,我從智能卡中找到了5張識別出來的圖片,我嘗試使用相機拍攝的150幀作為訓練集進行人臉識別。 當試圖識別時,5個測試面中的每一個的置信度值極其相似,使整個程序無用,因為我無法准確識別任何人。 通常,使用不同的相機捕捉作為訓練我從隨機人物的照片中獲得比自己的照片更高的置信度值。

我很感激你能給我的任何幫助,因為我在這里不知所措。

謝謝。

注意:我正在使用OpenCV的JavaCV包裝器來創建我的程序,以及包中包含的haarcascades。 特征臉是使用的算法。

人臉識別

介紹

我想補充一下。 libfacerec已包含在官方OpenCV 2.4.2中 ,請參閱:

這意味着如果您使用OpenCV 2.4.2,那么您在contrib模塊中擁有新的cv :: FaceRecognizer 我知道最近添加了一個Python包裝器(感謝你!),也許Java在寫這篇文章時也被包裝了。

cv :: FaceRecognizer附帶了大量文檔,它將向您展示如何使用大量完整的源代碼示例進行人臉識別:

如果您想知道可用的人臉識別算法(特征臉,Fisherfaces,局部二值模式直方圖)如何工作,那么請特別閱讀使用OpenCV的人臉識別指南 在那里,我解釋算法是如何工作的,並提到它們的缺點:

幾乎沒有圖像的人臉識別

現在,您的訓練數據集很小,這是識別面部的原始問題。 我會給你一個徹底的答案,所以它可能會幫助那些從谷歌來這里的人。

實際上,當您的數據集中每人只有極少數樣本時,不應使用Eigenfaces和Fisherfaces。 你需要這些模型的數據才能工作 ,我不能強調這一點。 越多越好。 這些方法基於估計數據的方差,因此請給它們一些數據來估算您的模型! 不久之前,我在AT&T Facedatabase(使用facerec框架 )上進行了一個小測試,它顯示了這些方法的性能,每個人的圖像數量不同:

在此輸入圖像描述

我不是在這里寫一篇出版物,也不會用詳細的數學分析來回溯這些數字。 之前已經完成了,所以我建議每個人都懷疑這些數字來研究(2),以便對小型訓練數據集進行非常詳細的PCA(特征臉)和LDA(Fisherfaces)分析。

所以我建議在小樣本場景中使用局部二值模式直方圖(3)進行人臉識別。 這些也包含在OpenCV FaceRecognizer中,並且已被證明在小型訓練數據集上表現非常出色。 如果將它與TanTriggs預處理(4)結合使用,您應該擁有一個非常強大的人臉識別模型。 TanTriggs預處理在Python中是一個8行(或左右),請參閱https://github.com/bytefish/facerec/blob/master/py/facerec/preprocessing.py#L41以了解實現。 這應該很容易適應Java(或者我可以使用OpenCV實現它,如果人們請求它)。

文獻

  • (1)Belhumeur,PN,Hespanha,J。和Kriegman,D。Eigenfaces vs. Fisherfaces:使用類特定線性投影的識別。 IEEE Transactions on Pattern Analysis and Machine Intelligence 19,7(1997),711-720。
  • (2)Martinez,A和Kak, A。PCA與LDA IEEE Transactions on Pattern Analysis and Machine Intelligence,Vol。 23,No.2,pp.228-233,2001。
  • (3)Ahonen,T.,Hadid,A。和Pietikainen,M。 面部識別與局部二元模式。 計算機視覺 - ECCV 2004(2004),469-481。
  • (4)Tan,X。和Triggs,B。 在困難的光照條件下用於人臉識別的增強的局部紋理特征集。 IEEE Transactions on Image Processing 19(2010),1635-650。

您想知道的是如何只用一張訓練圖像進行人臉識別。 這是可能的,但也取決於您想要分類的不同人數。

當然不需要50多個訓練圖像。 對於基本的人臉識別,您需要大約50個面來計算您的面部空間(特征臉)。 也許你把它搞砸了。 看到這些面孔有很多變化(膚色,眼鏡,形狀......)你可以從你喜歡的任何面部數據庫中取出這些面孔。 http://www.face-rec.org/列出了幾個數據庫並解釋了不同的算法。

計算好您的面部空間后,您可以使用盡可能多的面部進行訓練。 在你的情況下,你只有一個。 根據您想要分類的不同主題數量,這可能已經有效。

如果你得到太多錯誤的分類,我會看看混合方法。 混合方法將模板匹配算法(特征臉,fisherfaces)與基於特征的算法相結合。 在這種情況下,您可以獲取第一個算法的輸出,並將眼睛,鼻子,眉毛,下巴形狀等與您的測試面相匹配。

簡而言之:

  1. 用haarcascades從每個圖像中提取面部
  2. 計算你的面部空間
  3. 為每張臉訓練
  4. 要求面部分類
  5. 采取最可能的分類並檢查面部特征

如果您還沒有找到它,OpenCV還有一個面部識別庫: https//github.com/bytefish/libfacerec

編輯:我不會使用超過10-15個組件(特征臉)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM