【发布时间】:2019-10-06 08:01:48
【问题描述】:
我正在尝试构建一个识别人脸的 python 代码。我提取了训练人脸和测试人脸的 SIFT 特征,并匹配如下代码:
img1 = cv2.imread("path\of\tested\image")
img2 = cv2.imread("path\of\trained\image")
sift = cv2.xfeatures2d.SIFT_create()
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)
# Brute Force Matching
bf = cv2.BFMatcher(cv2.NORM_L1, crossCheck=True)
matches = bf.match(des1, des2)
matches = sorted(matches, key = lambda x:x.distance)
matching_result = cv2.drawMatches(img1, kp1, img2, kp2, matches[:50], None, flags=2)
我想选择其中最强的特征来比较两张脸是否属于同一个人。如何根据 SIFT 特征识别人脸?谁能帮帮我吗?任何提示都可能有用我是初学者。谢谢。
【问题讨论】:
-
使用 SIFT 特征,一种流行的方法是创建一个 Bag of Visual Words 框架,在其中获取从所有面部检测到的所有特征,然后创建一个字典,通常使用 k-Means。一旦你找到了这些聚类,你就可以为每一张脸找出哪个特征映射到哪个聚类,然后构建一个直方图。您获取这些直方图并训练分类模型。这是一个很好的起点:towardsdatascience.com/…。我会为你写一个完整的答案,但我无权访问你的数据。祝你好运!
-
@rayryeng 是个好主意,我会尝试实现它。非常感谢。
标签: python image-processing face-recognition feature-selection sift