我剛剛認識了一些臉與cv2.createEigenFaceRecognizer
。 但我想要的是知道多少輸入面看起來像計算的特徵臉。 這個想法是,你可以重新識別不在數據庫中的人。本徵臉與openCV
編輯:
例如:我的臉A,B和C的培訓對我的模型,然後我看到C面和D我希望能夠從D.
區分C面謝謝!
我剛剛認識了一些臉與cv2.createEigenFaceRecognizer
。 但我想要的是知道多少輸入面看起來像計算的特徵臉。 這個想法是,你可以重新識別不在數據庫中的人。本徵臉與openCV
編輯:
例如:我的臉A,B和C的培訓對我的模型,然後我看到C面和D我希望能夠從D.
區分C面謝謝!
您可以找到相應文件,設定閾值的部分上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
。任何低於此將在預測,這意味着這張臉產生-1
是unknown
:
# 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)
所以,如果你訓練的科目A
,B
模型,C
和您使用的閾值,則D
預測應該產生-1
,而A
,B
或C
應該被識別。鑑於事實,你正在使用一個門檻。
至於迭代地添加新面孔而不重新估計整個模型。這對於Eigenfaces或Fisherfaces方法是不可能的。對於這兩種算法,您總是需要撥打FaceRecognizer::train
來學習該模型。局部二元圖案直方圖(LBPH)模型(可使用cv2.createLBPHFaceRecognizer
創建)支持在不重新計算其他訓練樣本的情況下更新模型。查看該API文檔:
抱歉,用「rerecognize人不在數據庫中的」我的意思是,你能看到它無需再培訓後再次rerecognize一個未知的臉模型。 – nomoral
對於以opencv開頭的人,'help(cv2.createFaceRecognizer)'會導致錯誤,因爲沒有模塊'createFaceRecognizer',在放棄搜索源代碼之前花了我一段時間。 – Isaias
這是不正確的。你可以在https://github.com/Itseez/opencv/blob/master/samples/python2/facerec_demo.py找到關於如何使用OpenCV Python Bindings和Eigenface Model的完整源代碼示例。沒有像''cv2.createFaceRecognizer''這樣的方法,這就是你得到錯誤的原因。查看上述答案中鏈接的API文檔,查看哪些功能可用。 – bytefish