当前位置: 首页 > article >正文

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

http://www.kler.cn/a/599703.html

相关文章:

  • 常见的表单元素
  • Java并发编程面试汇总
  • Unity客户端一些面试高频题(自用)
  • 采样率24G DA子卡
  • Atlas 800I A2 双机直连部署DeepSeek-R1-w8a8
  • 塔能科技:智慧物联节能专利成就裴然
  • TCP netstat TIME_WAIT CLOSE_WAIT
  • WebSocket 传输大量数据好不好?稳定不稳定
  • 使用 Docker 部署 mysql 应用
  • C stm32f10x LED亮
  • go命令使用
  • 【微服务】SpringCloudGateway网关
  • Android App安装列表获取
  • k8s基础知识总结node+pod(上)
  • 跨域,前端
  • 埋点数据采集方案
  • 机器学习结合伏羲模型高精度多尺度气象分析与降尺度实现
  • C++ 性能优化隐藏危机:忽视数据结构与内存细节,效率大打折扣
  • 常见中间件漏洞:Apache篇
  • 使用 ByteDance 的 UI-TARS Desktop 探索 AI 驱动的 GUI 自动化新前沿