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)]

python --face_recognition(人脸识别,检测,特征提取,绘制鼻子,眼睛,嘴巴,眉毛)/活体检测_第1张图片

人脸分割(切割)

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()

python --face_recognition(人脸识别,检测,特征提取,绘制鼻子,眼睛,嘴巴,眉毛)/活体检测_第2张图片

提取人脸特征向量

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 np

def 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 np


def cosine_similarity_to_confidence(similarity):
    # 将余弦相似度从 [-1, 1] 映射到 [0, 1]
    confidence = (similarity + 1) / 

你可能感兴趣的:(python,开发语言)