步骤:定位、对齐、识别
1.使用openCV定位多个人脸
先确认路径,不正确用os.chdir()修改;
须找到cv2在电脑中的安装路径
import cv2
import os
import matplotlib.pyplot as plt#别名,缩短字符串
os.chdir(r'D:a learn sth大三上Python程序设计人脸识别')
def detect(filename):
face_cascade=cv2.CascadeClassifier(r'D:anacondainstallfolderLibsite-packagescv2datahaarcascade_frontalface_default.xml')
#我在python的东西安装包在D:anacondainstallfolderLibsite-packages下
img=cv2.imread(filename)#读取,查一下
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将彩色的转换为灰度图片
faces=face_cascade.detectMultiScale(gray,1.3,5)
for(x,y,w,h)in faces:
img=cv2.rectangle(img,(x,y),(x+w,y+w),(255,0,0),2)#用cv2函数画矩形;定义线的颜色(红,绿,蓝)
plt.imshow(img)
plt.axis('off')
plt.show()
detect('yu.jpg')
2.人脸对齐
先安装 dlib,再装face_recognition(依赖于dlib);
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)改成灰度图;
import cv2 import dlib import matplotlib.pyplot as plt path="yu2.jpg" img=cv2.imread(path) gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#改成灰度图
人脸分类器detector;
detector=dlib.get_frontal_face_detector()#人脸分类器
选用人脸检测器(5/68点),需要找到所在电脑中的路径
#68点人脸检测器 predictor=dlib.shape_predictor(r"D:anacondainstallfolderLibsite-packagesface_recognition_modelsmodelsshape_predictor_5_face_landmarks.dat") #5点 #predictor=dlib.shape_predictor(r"D:anacondainstallfolderLibsite-packagesface_recognition_modelsmodelsshape_predictor_68_face_landmarks.dat")
dets=detector(gray,1)
for face in dets:
shape=predictor(img,face)#寻找人脸的568个标记点;遍历所有点,打印出其坐标,并圈出来
for pt in shape.parts():
pt_pos=(pt.x,pt.y)
img=cv2.circle(img,pt_pos,6,(255,0,0),1)#(255,0,0)是点的颜色
plt.imshow(img)
plt.axis('off')
plt.show()
3.人脸识别
known_image;unknown_image;
import cv2
import face_recognition
import matplotlib.pyplot as plt
#known_image=cv2.imread('1.jpg')
known_image=face_recognition.load_image_file('1.jpg')
#unknown_image=cv2.imread('2.jpg')
unknown_image=face_recognition.load_image_file('2.jpg')
known_encoding;unknown_encoding
known_encoding=face_recognition.face_encodings(known_image)[0] unknown_encoding=face_recognition.face_encodings(unknown_image)[0]
results=face_recognition.compare_faces([known_encoding],
unknown_encoding,
tolerance=0.4)
if results[0]==True:
print("匹配成功,该未知图片与已有图片人脸可匹配!")
else:
print("匹配失败!")
#print(known_encoding)
#print(unknown_encoding)
plt.imshow(known_image)
plt.axis('off')
plt.show()
plt.imshow(unknown_image)
plt.axis('off')
plt.show()
相关知识
报错1:eclipse中使用Opencv报错 error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
解决方法:是路径错误,注意:输出的图片中不要用带有中文的路径名和文件名
【查看文档】pydoc可查看所安装内容的文档
【安装】不能直接下载dlib就先下载对应版本的whl(我Python3.8),再直接pip下载dlib和face_recognition即可



