【问题标题】:Use "Face Recognition" (lib) to recognize new face between 100k existing faces?使用“人脸识别”(lib)在 10 万张现有面孔之间识别新面孔?
【发布时间】:2017-11-23 12:49:28
【问题描述】:

我想使用 "Face Recognition" 库来识别新面孔。我有一个 100k 用户的数据集,每个用户有 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 个图像)才能“识别”未知图像中的人?还是我将每个图像的所有face_encodings() 保存在数据库中,然后使用新图像的face_encoding 在数据库中进行搜索?如果是这样,这种方法不会受益于我的数据集有 5 张同一个人的不同图像这一事实吗?

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

【问题讨论】:

  • 根据示例,这似乎是一个非常缩减或设计不良的库。不确定是否可以将缺少的步骤添加到此管道(不检查所有对;例如,使用 SVM 分类)。 Openface 可能对此更加开放,并且还应该有一个基于 SVM 的分类示例(并且在度量空间中人脸 -> 点的一般方法具有一些优势)。

标签: python machine-learning face-recognition


【解决方案1】:

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

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

$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/

/unknown_pictures/unknown.jpg,Barack Obama
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person

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

【讨论】:

  • 浏览代码似乎仍然会进行成对检查。您能否确认这一点(不会很好地扩展)?
  • @sascha 是的,在运行大量文件时,这将需要一些努力。但由于他有 100 多个文件。它训练有素,应该可以工作
  • 所以我不能使用同一个人的多个图像?或者我也可以为每个用户创建一个文件夹并将用户的每个图像放在以该人命名的文件夹中? => 当您向下滚动我链接的文章时,使用 OpenFace,您可以从每个人的图像中受益。你不在这里吗?
  • @Suisse 从技术上讲,openface(用于您的图像)不会利用某个给定人的多个图像(它只是将每个人脸映射到其他域),但如果您愿意,周围的管道可以。所以给定一些基于歧视的分类器,整个管道就可以了。
  • @Suisse 。是的,使用批量操作将一个人的所有图像存储在每个文件夹下,这将成为您的标签。您仍然可以从一个人的每一个图像中受益。事实上,您正在为您的分类器提供更多数据以进行训练
【解决方案2】:

如果您在 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"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 2016-07-15
    • 2015-06-02
    • 1970-01-01
    • 2018-06-14
    • 2020-10-12
    相关资源
    最近更新 更多