python --face_recognition(人脸识别,检测,特征提取,绘制鼻子,眼睛,嘴巴,眉毛)/活体检测
dlib
安装方法 之前博文 https://blog.csdn.net/weixin_44634704/article/details/141332644
环境:
python==3.8
opencv-python==4.11.0.86
face_recognition==1.3.0
dlib==19.24.6
人脸检测
import cv2
import face_recognition# 读取人脸图片
img = cv2.imread(r"C:\Users\123\Desktop\1.jpg")
face_List = face_recognition.face_locations(img) # 检测人脸,返回人脸坐标信息
print(face_List)for x in face_List: # 画框cv2.rectangle(img, (x[3], x[0]), (x[1], x[2]), (0, 255, 0), 2)
cv2.imshow("a", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 输出: [(116, 306, 223, 199)]
人脸分割(切割)
import cv2
import face_recognition# 读取人脸图片
img = cv2.imread(r"C:\Users\123\Desktop\1.jpg")
face_List = face_recognition.face_locations(img) # 检测人脸,返回人脸坐标信息
print(face_List)for x in face_List: # 画框cv2.rectangle(img, (x[3], x[0]), (x[1], x[2]), (0, 255, 0), 2)qie_img = img[x[0]:x[2], x[3]:x[1]]cv2.imshow("a", qie_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
提取人脸特征向量
img = cv2.imread(r"C:\Users\123\Desktop\1.jpg")
# 提取人脸特征向量
face01 = face_recognition.face_encodings(img)[0]
print(face01)
人脸比对(欧式距离)
import cv2
import face_recognition
import numpy as np# 读取人脸图片
img = cv2.imread(r"C:\Users\123\Desktop\1.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # face_recognition库,处理是RGB格式, CV默认为BGR
# 提取人脸特征向量
face01 = face_recognition.face_encodings(img)[0]
# 读取人脸原图的图片
img2 = cv2.imread(r"C:\Users\123\Desktop\1.jpg")
face02 = face_recognition.face_encodings(img2)[0]
#
# 计算欧几里得距离
v = np.linalg.norm(face01 - face02)
if v < 0.8:print("是一个人")
else:print("不是一个人")
转为置信度
import cv2
import face_recognition
import numpy as npdef euclidean_distance_to_confidence(distance, max_distance):# 确保距离在合理范围内distance = min(distance, max_distance)# 计算置信度confidence = 1 - (distance / max_distance)return confidence# 读取人脸图片
img = cv2.imread(r"C:\Users\123\Desktop\1.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # face_recognition库,处理是RGB格式, CV默认为BGR
# 提取人脸特征向量
face01 = face_recognition.face_encodings(img)[0]
# 读取人脸原图的图片
img2 = cv2.imread(r"C:\Users\123\Desktop\1.jpg")
face02 = face_recognition.face_encodings(img2)[0]
#
# 计算欧几里得距离
v = np.linalg.norm(face01 - face02)
w = euclidean_distance_to_confidence(v, 1) # 置信度最大阈值为1
print(w) # 计算置信度,距离越小,置信度越高。
人脸比对(余弦)
import cv2
import face_recognition
import numpy as npdef cosine_similarity_to_confidence(similarity):# 将余弦相似度从 [-1, 1] 映射到 [0, 1]confidence = (similarity + 1) /