人脸识别DEMO

Posted bruce128

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了人脸识别DEMO相关的知识,希望对你有一定的参考价值。

前言

写了一个用摄像头捕捉人脸匹配已知人脸的算法。包含两个主要的过程,人脸捕捉和人脸匹配。用的是github上的开源库 face_recognition

Recognize and manipulate faces from Python or from the command line with the world’s simplest face recognition library.

这个人脸识别库号称天下第一简洁。使用前进行安装两个库

pip3 install opencv-python-headless
pip3 install face_recognition

实验结果

别看广告,看疗效。我的训练图片是网上找的我的偶像李小龙先生的照片:

程序运行结果:

用手机搜了一张李小龙的图像用来验证。但是我自己的脸则无法匹配。

完整代码

# coding=utf-8

import cv2
import face_recognition

# 打开摄像头
capture = cv2.VideoCapture(0)

print(type(capture))
print(capture.read())

# 2.读取图片
filename = 'dataset/bruce.jpeg'
image = cv2.imread(filename)
know_encodings = face_recognition.face_encodings(image)

# 获取摄像头的实时画面
while True:
    # 5.读取当前摄像头一帧的画面 true false
    ret, image = capture.read()
    # print(ret)

    unknown_encodings = face_recognition.face_encodings(image)
    print(unknown_encodings)
    faces = face_recognition.face_locations(image)

    # 8.标记人脸
    for (top, right, bottom, left) in faces:
        # 1.原始图片 2.左上角坐标 3.右下角坐标 4.颜色值 5.线宽
        cv2.rectangle(image, (left, top), (right, bottom), (0, 255, 0), 2)

    if unknown_encodings.__len__() > 0:
        resultList = face_recognition.compare_faces(know_encodings, unknown_encodings[0])
        for result in resultList:
            if result:
                cv2.putText(image, "bruce", (faces[0][3], faces[0][0]), cv2.FONT_HERSHEY_DUPLEX, 2, (0, 255, 0))

    # 显示镜头捕捉到的图像
    cv2.imshow('Jim', image)

    # 暂停窗口
    if cv2.waitKey(5) & 0xFF == ord('q'):
        break

# 11.释放资源
capture.release()

# 12.销毁窗口
cv2.destroyAllWindows()

简单说明

  • 从训练用的照片中找出人脸,并用128维向量表示。
  • 摄像头取景,这个由cv2库完成
  • 从照片中找出人脸。由face_recognition库完成,并把捕捉到的人脸用128维的向量表示
  • 人脸匹配。把相机拍摄并捕捉到的人脸的128维向量同已知的人脸的128维向量求欧几里得距离,如果距离小于容忍度(tolerance,默认0.6),则认为match。

人脸匹配也可以用余弦定理,这个算法在新闻自动分类里有应用,吴军在《数学之美》里有讲过文章相似度的计算问题。

以上是关于人脸识别DEMO的主要内容,如果未能解决你的问题,请参考以下文章

C#实现基于ffmpeg加虹软Arcface的人脸识别demo

神目人脸识别Android SDK Demo说明

虹软人脸识别——官方 Qt Demo 移植到 Linux

C# 离线人脸识别 ArcSoft V2.0 Demo

有没有支持多人人脸识别的算法,要识别的人脸比较多

python opencv 人体/人脸识别 简易demo