讲师博文
face_recognition 库介绍 来源 : 华清远见     2024-11-27

face_recognition 是一个流行的 Python 库,用于进行人脸检测和人脸识别。它基于深度学习技术,通过处理图

像来识别和验证人脸。这个库特别适用于需要人脸识别功能的应用程序,比如面部身份验证、照片组织、监控系统

等。

下面是它的主要功能介绍

人脸检测

检测图像中的人脸,并返回每张人脸的位置。

使用 face_recognition.face_locations() 函数来检测图像中的人脸。

案例演示:

人脸识别

识别图像中的人脸,并与已知的人脸进行比较。

使用 face_recognition.face_encodings() 来提取人脸的特征向量,这些向量可以用于比对。

import face_recognition

image = face_recognition.load_image_file("your_image.jpg")

face_locations = face_recognition.face_locations(image)

import face_recognition

from PIL import Image

image = face_recognition.load_image_file("D:/faceImages/999.jpg")

face_locations = face_recognition.face_locations(image)

print(face_locations)

# 遍历所有检测到的人脸

pil_image = Image.fromarray(image)

for (top, right, bottom, left) in face_locations:

# 裁剪人脸区域

face_image = pil_image.crop((left, top, right, bottom))

face_image.save("test.jpg") # 保存裁剪后的图像

face_encodings = face_recognition.face_encodings(image)[0]计算人脸编码之间的欧几里得距离来判断它们是否属于同一个人

distance 值越小,相似度越高

案例:

欧几里得距离

欧几里得距离(Euclidean distance)是一种测量两个点之间直线距离的方式,常用于数学、物理学和计算机科学

中的各种应用,包括机器学习中的数据点距离计算。它是基于欧几里得几何的概念,通常用于计算空间中两点之间

的距离。

应用

数据分析: 欧几里得距离常用于计算数据点之间的距离,例如在聚类算法(如K均值聚类)中。

计算机视觉: 在人脸识别等任务中,欧几里得距离用于计算特征向量之间的相似度。

优化: 在路径规划和优化问题中,计算两点之间的欧几里得距离可以帮助寻找最短路径。

欧几里得距离的意义

1. 距离越小,相似度越高:

特征向量相似:当欧几里得距离越小说明两个特征向量之间的差异越小,即这两个人脸在特征空间中很

接近。因此,这两个图像可能是同一个人或者相似度很高。

# 获取已知的人脸的编码

train_encode01=

# 获取要检测的人脸的编码

train_encode02=

# 计算两个人脸编码之间的欧几里得距离。

distance = np.linalg.norm(train_encode01 ‐ train_encode02)

import face_recognition

import numpy as np

image01 = face_recognition.load_image_file("D:/faceImages/999.jpg")

face_locations01 = face_recognition.face_locations(image01)

# 获取已知的人脸的编码

train_encode01 = face_recognition.face_encodings(image01, face_locations01)[0]

image02 = face_recognition.load_image_file("D:/faceImages/888.jpg")

face_locations02 = face_recognition.face_locations(image02)

# 获取要检测的人脸的编码

train_encode02 = face_recognition.face_encodings(image02, face_locations02)[0]

# 计算两个人脸编码之间的欧几里得距离。

distance = np.linalg.norm(train_encode01 ‐ train_encode02)

print(distance)相同身份的概率大:在许多人脸识别系统中,如果计算出的距离小于某个设定的阈值,则系统会认为这

两个面孔属于同一个人。

2. 距离阈值:

匹配判断:通常,系统会设置一个阈值来判断两个特征向量是否属于同一身份。如果计算出的距离小于

这个阈值,则认为两张图片中的人脸是相同的;如果距离大于阈值,则认为是不同的身份。

误识别率:设置的阈值会影响系统的误识别率(假阳性和假阴性率)。距离阈值的选择需要根据具体应

用场景进行调整。

python中计算欧几里得距离的函数

np.linalg.norm() 是 NumPy 库中的一个函数,用于计算数组或矩阵的范数(norm)。范数是一个衡量向量或

矩阵大小的指标。常见的范数包括欧几里得范数(2-范数)、曼哈顿范数(1-范数)等

例如:

web页面开启摄像头

这里采用javascript封装好的打开摄像头的工具库

1 导入faceUitl.js文件到项目中

2 在页面创建一个 id='video'的p,在文档加载事件调用打开摄像头函数

django项目中获取摄像头传来的图片

1 前端通过faceUtile 获取图片的编码,传值到后端

import numpy as np

vector1 = np.array([3, 4,5])

vector2 = np.array([4, 4,5])

norm = np.linalg.norm(vector1‐vector2)

print(norm)

<p id="video"></p>

$(function () {

//设置调用摄像头的宽度和高度

faceUtile.width = 900;

faceUtile.height = 500;

//调用摄像头

faceUtile.openVideo('video');

})

function getFace() {

//获取图片的编码

const dataURL = faceUtile.getDecode()2 在后端接受图片编码,把图片转换成二进制变,然后写入到指定目录中,保存图片

$.ajax({

url: '/faceCollect/',

type: 'POST',

data: JSON.stringify({ image: dataURL }),

success: function(rs) {

console.log(rs)

},

});

}

import json

import base64

import io

from PIL import Image

from django.http import JsonResponse

import numpy as np

#

def register(request):

if request.method == 'POST':

data = json.loads(request.body.decode('utf‐8'))

image_data = data['image']

# 解码图像数据

image_data = image_data.split(',')[1]

#获取图片的二进制编码

image_bytes = base64.b64decode(image_data)

file_path = f'D:/faceImages/1.jpg' # 指定保存路径

with open(file_path, 'wb') as file:

file.write(image_bytes)

data ={"code":200,"data":"success"}

return JsonResponse(data)

扫码申领本地嵌入式教学实录全套视频及配套源码

上一篇:实时操作系统的设计与分析是确保关键任务及时完成的核心

下一篇:HEX与BIN

400-611-6270

Copyright © 2004-2024 华清远见教育科技集团 版权所有
京ICP备16055225号-5京公海网安备11010802025203号