使用"面部识别" (lib)识别10万张现有面孔之间的新面孔?

时间:2017-06-20 20:08:36

标签: python machine-learning face-recognition

我想使用"Face Recognition" lib来识别新面孔。我有一个10万用户的数据集,每个用户3-5个图像。我并不完全了解如何使用这个库。

有这种方法:

import face_recognition
known_image = face_recognition.load_image_file("obama.jpg")
unknown_image = face_recognition.load_image_file("unknown.jpg")

obama_encoding = face_recognition.face_encodings(known_image)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]

results = face_recognition.compare_faces([obama_encoding], unknown_encoding)
if results[0] == True:
    print("It's a picture of Obama!")
else:
    print("It's not a picture of Obama!")

我是否必须遍历所有图像(100k用户* 5图像)到#34;识别"未知图像中的人?或者,我是否将每个图像的所有face_encodings()保存在数据库中,然后使用新图像的face_encoding在数据库中进行搜索?如果是这样的话,这个方法并没有从我的数据集有5个不同的同一个人的图像的事实中受益?

这个库来自@ageitgey他在这个article中描述了OpenFace和dlib的另一种方法,其中CNN从人的5个图像中计算出128个测量值。 (向下滚动到第2步) - 哪种方法更好?我无法通过" face recognition"找到此功能。库。

2 个答案:

答案 0 :(得分:0)

我正在和你一样从事类似的项目。您必须使用库训练图像数据集。选择一组图像进行训练并将其放在文件夹中。确保在人名后标记图像。现在选择一组不属于训练图像的测试图像(未知图像)并将其保存在文件夹中。

然后你只需运行命令face_recognition,传入已知人员的文件夹和包含未知人物的文件夹(或单个图像),它会告诉你每个图像中的人:

{{1}}

每张脸的输出中都有一行。数据以逗号分隔,文件名和找到的人的姓名。

答案 1 :(得分:0)

如果在deepface中使用dlib,则无需构建for循环即可执行此任务。

#!pip install deepface
from deepface import DeepFace
df = DeepFace.find("obama.jpg", db_path = "C:/my_db"
   , model_name = 'dlib', detector_backend = 'dlib')
print(df.head())

它将在my_db文件夹中查找img1.jpg的身份。

您也可以对图像对应用面部验证。

from deepface import DeepFace
obj = DeepFace.verify("obama.jpg", "unknown.jpg"
   , model_name = 'dlib', detector_backend = 'dlib')
print(obj["verified"])

此外,您也可以采用VGG-Face,Google Facenet,OpenFace,Facebook DeepFace,DeepID代替Dlib。

models = ["VGG-Face", "Facenet", "OpenFace", "DeepFace", "DeepID", "Dlib"]