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

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

相关文章:

  • vue数据重置
  • RFID测温技术:提升电缆安全监测的理想选择
  • docker pull时报错:https://registry-1.docker.io/v2/
  • 开源链动2+1模式与AI智能名片赋能的S2B2C共享经济新生态
  • 批量配置Linux ~/.bash_profile
  • 医学图像分割数据集肺分割数据labelme格式6299张2类别
  • 数据库基础知识点(系列二)
  • Atlas 800I A2 双机直连部署DeepSeek-R1-w8a8
  • SAP Activate Methodology in a Nutshell Phases of SAP Activate Methodology
  • 位运算题目:最大单词长度乘积
  • Netty源码—客户端接入流程
  • Linux应用:select、poll
  • 算法每日一练 (18)
  • 23种设计模式-创建型模式-原型
  • 4、操作系统结构和发展史
  • 深入理解8086指令集与反汇编技术
  • Pythonload JSON文件需要手动关闭吗?
  • 钞票准备好了吗?鸿蒙电脑 5 月见
  • linux去掉绝对路径前面部分和最后的/符号
  • CSS语言的服务器管理
  • 总有黑眼圈是因为“虚”吗?怎么睡才能改善?
  • 法治日报调查直播间“杀熟”乱象:熟客越买越贵,举证难维权不易
  • 王毅会见俄罗斯外长拉夫罗夫
  • 日月谭天丨赖清德强推“脱中入北”是把台湾带向死路
  • “中国游”带火“中国购”,“即买即退”让外国游客购物更丝滑
  • 影子调查|23岁男子驾照拟注销背后的“被精神病”疑云