2014-09-05 242 views
2

我正在使用LBP類型的OpenCV FaceRecognizer進行雙面比較工作。我的問題是如何計算百分比格式預測信心?給下面的代碼(javacv):如何使用opencv計算面部識別的百分比格式預測置信度?

int n[] = new int[1]; 
double p[] = new double[1]; 
personRecognizer.predict(mat, n, p); 
int confidence = p[0]; 

但信心的雙重價值,how我應該convert它變成一個probabilitypercentage %? 有沒有現成的配方?

對不起,如果我沒有以明確的方式陳述我的問題。好的,這裏是場景:

我想比較兩幅臉部圖像,並找出兩張臉的可能性,例如輸入John的圖片和他的同學湯姆的圖片,假設可能性爲30%;然後輸入約翰的照片和他的兄弟傑克的照片,來的可能性是80%。 這兩個可能性因素表明,傑克比湯姆更像他的兄弟約翰......所以百分比格式的可能性因素是我想要的,更多的價值意味着兩個輸入面孔更具有可能性。 目前我通過使用opencv函數FaceRecognizer.predict來計算輸入的置信度值來做到這一點,但置信度值實際上代表了它們的特徵向量空間中輸入之間的距離,那麼如何將距離(置信度)縮放到可能性百分比格式?

+0

double值代表什麼?它的規模是什麼? – EdChum 2014-09-05 10:13:31

+0

[OpenCV的FaceRecognizer的信心是什麼?](http://stackoverflow.com/questions/13652778/what-is-confidence-in-opencvs-facerecognizer) – blgt 2014-09-05 10:23:43

+0

@EdChum double值置信度應該是距離值從opencv獲取Recognizer.predict()函數。 – 2014-09-09 05:42:23

回答

4

你正在挖掘你的問題太深。那麼,根據OpenCV的文檔: predict()

預言,一個給定的 輸入圖像

標籤和相關的置信度(例如距離)我不知道你在這裏尋找,但問題不容易回答。人臉內部變體(同一個人的變體)是巨大的,並且人臉間變化(來自不同人的臉部)可以更緊湊(例如,當兩個人都面向前方而人內第二面部圖像被剖析時),所以這是一個期待答案的整個話題。

也許你應該有一個基本事實(即一些標籤已知的人臉),並扣除表格,設置你想要的距離與標籤的關聯百分比。雖然這也常常是不準確的,因爲距離不會與你的相似感知相一致(正如之前人際面孔所提到的那樣)。

編輯:

首先,沒有普遍的人類感知面部相似性。另一方面,大多數人會認出一張屬於同一個人的姿勢和姿勢。 大多數這裏的詞很重要。當你壓力極限時,人類的感知會開始發散,例如,當被要求承認多年來的一張臉,時間跨度變得相當大(孩子vs青春期vs老年人)。

你是要求計算鼻子/眼睛等的相似性?如果是這樣,我認爲最好的辦法是找到一組屬於同一個人的鼻子/眼睛,然後訓練這個人,然後檢查你的表演是否與不同人不同。

我知道的常用方法是使用包含正片和負片樣本的圖像對進行訓練和測試。正樣本是屬於同一個人的一對圖像,而負樣本屬於兩個不同的圖像對。

我不確定你在問什麼,也許你可以看看這個link

希望它有幫助。

編輯2:

好,既然你想,你得到以百分比表示你能以某種方式反轉的距離獲得相似度的相似度的距離轉換。這裏有,雖然出現了一些問題:

  • 沒有絕對匹配的值,這是dis = 0;或等價相似度sim = 100%但目前還沒有明確的價值總額不匹配:dis = infinite這樣sim = 0%。另一方面,反向進程具有明確的邊界0% - 100%
  • 由於極值包括0和無限,所以必須有比簡單的反演更明智的轉換。

您可以輕鬆地分配1.0(或100%到相似性)所對應的絕對比賽,但你要採取的總不匹配什麼是不明確的。你可以考慮一個任意的高值作爲0.0(因爲你沒有什麼大的差別,例如在使用10000到11000的距離時我猜測)以及所有高於這個值(即距離值)被認爲是0.0

要找到哪個值應該是我會建議比較兩個完全不同的圖像,並使用它們之間的距離爲0.0。

讓我們假設這個值是disMax = 250.0;simMax = 100.0; 然後一個簡單的方法可以是: 雙SIM = simMax - simMax/disMax * DIS;

其給出0距離的100.0相似度和250距離的0.0相似度。大於250的值會給出負相似值,應該將其視爲0.0。

+0

Thans @Eypros,我只是更新了我的問題,希望明確指出我的問題。 – 2014-09-09 08:08:20

+0

感謝您的建議,這似乎是有道理的。但是你假設simValue與distanceValue是線性的,那是對的嗎? – 2014-09-09 13:57:08

+0

我想不是,但它是一個簡單的方法。如果你有證據表明應該遵循其他關係,那麼按照這個。但如果你不這樣做,我會建議堅持線性。 – Eypros 2014-09-09 14:16:33