[英]eigenfaces with openCV
我剛剛用cv2.createEigenFaceRecognizer
識別了一些面孔。 但我想要的是知道輸入面看起來像計算的特征臉多少。 這個想法是你可以重新識別不在數據庫中的人。
編輯:
例如:我在我的模型上訓練了面部A,B和C,然后我看到面部C和D.我希望能夠將面部C與D區分開來。
謝謝!
您可以在cv::FaceRecognizer
的文檔中找到有關設置閾值的部分:
它與OpenCV Python Wrapper的工作原理相同,在Python中調用help(cv2.createFaceRecognizer)
時可以很容易地看到它:
Help on built-in function createEigenFaceRecognizer in module cv2:
createEigenFaceRecognizer(...)
createEigenFaceRecognizer([, num_components[, threshold]]) -> retval
因此,在代碼中,您將使用閾值創建模型,我將其設置為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
鑒於事實,您正在使用閾值。
至於迭代地添加新面部而不重新估計整個模型。 這對於特征臉或Fisherfaces方法是不可能的。 您總是需要為這兩種算法調用FaceRecognizer::train
來學習模型。 可以使用cv2.createLBPHFaceRecognizer
創建的局部二進制模式直方圖(LBPH)模型支持更新模型,而無需重新計算其他訓練樣本。 請參閱以下API文檔:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.