2012-09-05 92 views
0

我剛剛認識了一些臉與cv2.createEigenFaceRecognizer。 但我想要的是知道多少輸入面看起來像計算的特徵臉。 這個想法是,你可以重新識別不在數據庫中的人。本徵臉與openCV

編輯:

例如:我的臉A,B和C的培訓對我的模型,然後我看到C面和D我希望能夠從D.

區分C面謝謝!

回答

2

您可以找到相應文件,設定閾值的部分上cv::FaceRecognizer

它的工作原理只是OpenCV的Python包裝,它調用的時候,你可以很容易地看到相同help(cv2.createFaceRecognizer)在Python中:

Help on built-in function createEigenFaceRecognizer in module cv2: 

createEigenFaceRecognizer(...) 
    createEigenFaceRecognizer([, num_components[, threshold]]) -> retval 

所以在代碼中,您將創建模型w如果有閾值,我會將其設置爲100.0。任何低於此將在預測,這意味着這張臉產生-1unknown

# Create the Eigenfaces model. We are going to use the default 
# parameters for this simple example, please read the documentation 
# for thresholding: 
model = cv2.createEigenFaceRecognizer(threshold=100.0) 

如演示所示,你可以得到的預測和相關置信(這是在近鄰的距離您訓練數據集)具有:

[predicted_label, predicted_confidence] = model.predict(image) 

所以,如果你訓練的科目AB模型,C您使用的閾值,則D預測應該產生-1,而A,BC應該被識別。鑑於事實,你正在使用一個門檻。

至於迭代地添加新面孔而不重新估計整個模型。這對於Eigenfaces或Fisherfaces方法是不可能的。對於這兩種算法,您總是需要撥打FaceRecognizer::train來學習該模型。局部二元圖案直方圖(LBPH)模型(可使用cv2.createLBPHFaceRecognizer創建)支持在不重新計算其他訓練樣本的情況下更新模型。查看該API文檔:

+0

抱歉,用「rerecognize人不在數據庫中的」我的意思是,你能看到它無需再培訓後再次rerecognize一個未知的臉模型。 – nomoral

+0

對於以opencv開頭的人,'help(cv2.createFaceRecognizer)'會導致錯誤,因爲沒有模塊'createFaceRecognizer',在放棄搜索源代碼之前花了我一段時間。 – Isaias

+0

這是不正確的。你可以在https://github.com/Itseez/opencv/blob/master/samples/python2/facerec_demo.py找到關於如何使用OpenCV Python Bindings和Eigenface Model的完整源代碼示例。沒有像''cv2.createFaceRecognizer''這樣的方法,這就是你得到錯誤的原因。查看上述答案中鏈接的API文檔,查看哪些功能可用。 – bytefish