人脸识别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的主要内容,如果未能解决你的问题,请参考以下文章