【问题标题】:How to make a face recognition(identification and verification) program?如何制作人脸识别(识别和验证)程序?
【发布时间】:2022-01-26 05:31:27
【问题描述】:

所以,我使用 OpenCV2 在 Python 中为网络摄像头制作了一个面部检测程序。但这只是检测人脸,并不能识别/识别它是谁。那么,如何训练我的程序来识别是不是我呢?
到目前为止我的代码:


video = cv2.VideoCapture(0)

while True:
    check, frame = video.read()
    faces = face_cascade.detectMultiScale(frame,
                                          scaleFactor=1.1, minNeighbors=5)
    for x,y,w,h in faces:
        frame = cv2.rectangle(frame, (x,y), (x+w,y+h), (0,255,0), 3)

    cv2.imshow('Face Detector', frame)

    key = cv2.waitKey(1)

    if key == ord('q'):
        break

video.release()
cv2.destroyAllWindows()

我还想知道程序是否有办法告诉 它检测到了多少张面孔?

【问题讨论】:

  • 1- 你需要收集正面图像(包括你的脸)和标签(txt 文件,包括相关人脸的坐标) 2- 你需要训练它(使用 yolo、haar 等)跨度>
  • 谢谢,但您能否详细说明“标签”部分以及如何训练它?你能推荐任何网页或资源等来训练它吗?
  • 训练过程很难处理自定义检测。对于一个好的训练模型,你需要 appx。 1000 张正面图像,您需要将每个图像中您的脸所在的位置定义为一个矩形。这些矩形坐标和图像名称需要保存在一个txt文件中。这部分对你来说真的很难。完成此步骤后,您可以训练自己的模型。 Herehere 可能会对您有所帮助。
  • 有更便宜的方法来(重新)识别人脸。为此有预先训练的网络。他们发出一个特征向量。剩下的是数据库查询问题。 -- 无论如何,在询问 SO 时,您应该进行研究(文献综述)。如果你这样做,你会找到答案。

标签: python opencv face-recognition facial-identification


【解决方案1】:

您可以将预训练的 openface 模型与 opencv 的 dnn 模块一起使用,从裁剪后的人脸图像中获取特征向量,可以很容易地与 L2 或余弦距离进行比较

从这里获取模型: https://storage.cmusatyalab.org/openface-models/nn4.small2.v1.t7

net = cv2.dnn.readNetFromTorch("nn4.small2.v1.t7")

# then, for each image:
blob = cv2.dnn.blobFromImage(img, 1./255, (96,96), (0,0,0), True, False)
net.setInput(blob)
feature = net.forward() # 128 floats

if cv2.norm(f1,f2) < 0.5:
    # SAME !!! 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-11
    • 2020-10-18
    • 2018-06-14
    • 1970-01-01
    • 2018-06-28
    • 2023-03-06
    • 2015-07-05
    • 2011-10-13
    相关资源
    最近更新 更多