Python 人脸识别
人脸检测是一个在图像或视频中识别人脸的过程。它是计算机视觉的一个迅速扩展的领域,提供了各种有用的应用,如安全系统、人脸识别和图片分析。
在这篇文章中,我们可以研究在Python中执行人脸检测的许多方法。
有几种方法可以在Python中编写人脸检测代码,使用不同的库和框架。一些最流行的库和框架包括。
- OpenCV :OpenCV是一个强大的开源计算机视觉库,可用于检测图像和视频中的人脸。它为人脸检测提供了一个预先训练好的级联分类器,可以开箱即用。
- Dlib :Dlib是一个机器学习库,可用于人脸检测,以及其他任务。它为人脸检测提供了一个预先训练好的形状预测器,可用于检测图像和视频中的人脸。
- Face_recognition : face_recognition是一个python库,为人脸检测和识别提供了一个易于使用的界面。用深度学习创建的现代面部识别是由dlib在该库中使用的。
- MTCNN : 多任务级联卷积网络(MTCNN)是一种流行的人脸检测算法,可用于检测图像和视频中的人脸。它提供了一个预先训练好的模型,可以开箱即用。
- TensorFlow :TensorFlow是一个流行的机器学习框架,可用于建立自定义人脸检测模型。它为用户提供了一个强大的API,用于开发和实现系统掌握的模型。
使用OpenCV方法进行人脸检测
一个名为OpenCV的开源计算机识别库提供了大量的图像处理和笔记本视觉技术的选择。它在工业界和学术界被广泛使用,为开发者提供了一个简单和易于使用的界面。
在我们开始用Python进行人脸检测之前,需要安装OpenCV库。
这可以用以下命令完成 。
pip install opencv-python
一旦库安装完毕,我们就可以开始编写代码了。作为早期阶段,相关模块必须首先被导入并在图像中读取。
import cv2
image = cv2.imread("image.jpg")
接下来,我们将使用CascadeClassifier类来检测图像中的人脸。这个类接收了一个预先训练好的级联分类器,可以用来检测图像中的人脸。
该分类器可以使用人脸图像的数据集进行训练,它使用边缘、形状和纹理等特征的组合来检测人脸。
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
faces = face_cascade.detectMultiScale(image, scaleFactor=1.1, minNeighbors=5)
多尺度检测方法需要输入图像和一些参数,如比例系数和最小邻居数。
比例因子用于控制检测窗口的大小,最小邻居数用于控制假阳性的数量。
一旦检测到人脸,我们就可以用矩形函数在其周围画出矩形 。
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0),2)
Finally, we can display the image with the detected faces:
// displaying the image //
cv2.imshow("Faces", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
使用OpenCV实现
import cv2
// load the cascade classifier for face detection //
face_cascade = cv2.CascadeClassifier('path/to/haarcascade_frontalface_default.xml')
// load the image //
img = cv2.imread('path/to/image.jpg')
// convert the image to grayscale //
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
// detect faces in the image //
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)
// draw a rectangle around the detected faces //
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
// display the image //
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出
人脸识别代码的Dlib方法
- Dlib是Python中一个强大的机器学习和计算机视觉库。Dlib的特点之一是它能够在图像和视频流中检测人脸。
- 该库包括一个预先训练好的人脸检测模型,可以开箱即用,这使得在你的Python项目中添加人脸检测功能变得很容易。
- Dlib库包括一个名为 “get_frontal_face_detector() “的函数,它返回一个预先训练好的对象检测器,专门用于检测图像中的人脸。
- 这个检测器可以用来定位图像中的人脸,并返回每个人脸的边界框的坐标。
- Dlib还提供了检测面部地标的功能,如眼睛、鼻子和嘴,这对面部识别和面部跟踪等应用非常有用。
Dlib方法的实现:-
import dlib
// Create a face detector //
detector = dlib.get_frontal_face_detector()
// Load an image //
img = dlib.load_rgb_image("image.jpg")
// Detect faces in the image //
faces = detector(img)
// Print the number of faces detected //
print("Number of faces detected: ", len(faces))
// Loop through the faces and print their coordinates //
for face in faces:
print("Left: ", face.left())
print("Top: ", face.top())
print("Right: ", face.right())
print("Bottom: ", face.bottom())
输出
Dlib方法的解释: –
- “import dlib” – 这一行导入了Dlib库,它为Python中的机器学习和计算机视觉提供功能。
- “detector = dlib.get_frontal_face_detector()” – 这一行使用Dlib库提供的 “get_frontal_face_detector() “函数创建一个人脸检测器对象。这个函数返回一个预先训练好的对象检测器,专门用于检测图像中的人脸。
- “img = dlib.load_rgb_image(“image.jpg”)”- 这一行使用Dlib库的 “load_rgb_image “函数加载一个名为 “image.jpg “的图像,该函数从指定的文件路径加载一个图像并以RGB值数组的形式返回。
- “faces = detector(img)” – 这一行使用人脸检测器对象,通过调用图像上的检测器函数来检测图像中的人脸。检测器函数返回一个 “rect “对象的列表,每个对象代表图像中检测到的人脸的边界框。
- “print(“检测到的人脸数量。”, len(faces))”- 这一行使用 “len(faces) “函数打印图像中检测到的人脸数量,该函数返回 “rect “对象列表中的元素数量。
- “for faces in faces:”- 这一行开始一个循环,遍历检测器函数返回的人脸列表中的所有 “矩形 “对象。
- “print(“Left: “, face.left())”- 这一行,在循环中,使用 “rect “对象的 “left() “方法,打印出当前面的边界框的左坐标。
- “print(“Top: “, face.top())- 这一行,在循环内,使用 “rect “对象的 “top() “方法打印当前面的边界框的顶点坐标。
- “print(“Right: “, face.right())- 这一行,在循环内,使用 “rect “对象的 “right() “方法打印当前面的边界框的右坐标。
- “print(“Bottom:”, face.bottom())”- 这一行,在循环中,使用 “rect “对象的 “bottom() “方法打印当前面的边界框的底部坐标。
使用人脸识别库
最受欢迎的人脸识别库之一是face_recognition库,它是建立在dlib之上的。这个集合提供了广泛的方法来寻找和识别静态照片和动态电影中的人脸。
face_recognition库还提供了其他检测人脸的方法,如检测眼睛、鼻子和嘴巴等面部特征的face_landmarks(),以及将人脸编码为128维向量的face_encodings()。
dlib库是一个强大的图像处理包,被用于人脸识别。
代码的实现 : –
import face_recognition
// load the image //
image = face_recognition.load_image_file("image.jpg")
// detect faces in the image //
face_locations = face_recognition.face_locations(image)
// loop through the face locations and draw rectangles around the faces //
for face_location in face_locations:
top, right, bottom, left = face_location
cv2.rectangle(image, (left, top), (right, bottom), (0, 0, 255), 2)
// display the image //
cv2.imshow("Faces", image)
cv2.waitKey(0)
输出
代码的解释: –
- 第一行导入face_recognition库,它可以检测和识别图像和视频中的人脸。
- 下一行使用face_recognition.load_image_file()方法从文件 “image.jpg “加载图像。
- 之后的一行使用face_recognition.face_locations()方法检测图像中的人脸,该方法为每个人脸返回一个由四个坐标(上、右、下、左)表示的人脸位置列表。
- 下面一行开始一个for循环,循环浏览列表中的每个脸部位置。循环的每一次迭代都将一个脸部位置的四个坐标分配给变量top, right, bottom, and left。
- 循环中的下一行使用了cv2.X,这一行的目的是在面的上方创建一个矩形。要在面的上方创建一个矩形,使用rectangle()方法。图片、矩形的左上象限、矩形的右下象限、矩形的颜色和矩形的厚度都是该函数接受的输入。在本例中,矩形为红色(0,0,255),厚度为2像素。
- 之后的一行使用cv2.imshow()方法来显示图像,并在面的周围画上矩形。
- 最后一行使用cv2.waitKey()方法来等待用户在关闭窗口之前按下一个键。对这个方法的参数是窗口关闭前的时间,单位是毫秒。在本例中,它被设置为0,这意味着窗口将无限期地等待用户按下一个键。
人脸识别的MTCCN方法
MTCCN(多任务级联卷积网络)是一种基于深度学习的方法,用于检测和对齐图像中的人脸。它由三个网络组成:P-网、R-网和O-网。
对于识别图像中的个人和定义和衔接的目的,P网是一个简单的社区。
R网是一个更复杂的网络,用于细化P网检测到的边界框和面部地标。
O-Net是一个网络,用于输出最终的边界框和面部标志。
地标。
- 要在Python中使用MTCNN编写人脸检测代码,你首先需要安装必要的库,如TensorFlow、Keras和MTCNN。
- 然后,你需要为P-Net、R-Net和O-Net加载预先训练好的权重。
- 接下来,你需要创建一个MTCNN类的实例,并传入加载的权重。
- 最后,你将使用MTCNN类的detect_faces()方法来检测图像中的人脸,该方法将返回检测到的每个人脸的边界框和面部标志。
代码的实现
from mtcnn import MTCNN
import cv2
// load image from file //
filename = "image.jpg"
pixels = cv2.imread(filename)
// we need to create a detector by default weights //
detector = MTCNN()
// to find faces in an img //
faces = detector.detect_faces(pixels)
// display faces on the original image //
for face in faces:
x, y, width, height = face['box']
cv2.rectangle(pixels, (x, y), (x+width, y+height), (0, 0, 255), 2)
cv2.imshow('Face', pixels)
cv2.waitKey(0)
输出
代码的解释
- “from mtcnn import MTCNN” 从mtcnn库中导入MTCNN类。这个类将被用来检测图像中的人脸。
- “import cv2 “导入OpenCV库,它将被用来读取和显示图像。
- “filename = “image.jpg” 将被处理的图像的文件名分配给一个名为 “filename “的变量。
- “pels = cv2.imread(filename)” 读取由 “filename “变量指定的图像文件,并将像素数据分配给 “pels “变量。
- “detector = MTCNN()” 创建一个MTCNN类的实例并将其分配给 “detector “变量。使用P-Net、R-Net和O-Net的默认权重。
- “faces = detector.detect_faces(pels)” 使用MTCNN类的 “detect_faces() “方法来检测存储在 “pels “变量中的图像中的人脸。每张被识别的脸都会被返回,其周围的容器和视觉线索被添加到 “faces “参数中。
- “for faces in faces: “开始一个循环,将迭代检测到的每张脸。
- “x, y, width, height = face[‘box’]” 将当前面孔的x和y坐标、宽度和高度分配给相应的变量。
- “cv2.rectangle(pelsels, (x, y), (x+width, y+height), (0, 0, 255), 2) “在存储在 “pelselsels “变量中的原始图像上,围绕当前脸部画一个红色矩形。
- “cv2.imshow(‘Face’, pixels)” 显示用红色勾勒出脸部的图像。
- “cv2.waitKey(0) “在关闭显示图像的窗口之前等待用户按下一个键。这使得用户能够在系统关闭之前查看个人的图像。
人脸识别的TensorFlow方法
TensorFlow是一个开源的机器学习库,广泛用于建立深度学习模型。它提供了各种预建的模型和功能,可以很容易地定制,以适应项目的具体需求。
其中一个模型是多任务级联卷积网络(MTCNN),我们在之前的方法中讨论过这个模型。
使用TensorFlow在Python中编写人脸检测代码的过程包括以下步骤:—-。
- 导入必要的库 :第1步是导入必要的库,如TensorFlow、OpenCV和Numpy。
- 加载MTCNN模型 :TensorFlow提供了一个预训练的MTCNN模型,可以加载到代码中。这个模型被训练为检测图像中的人脸,并预测人脸周围的边界框的坐标。
- 读取视觉: 下一阶段是读取图片,在此期间,需要对人脸进行定位。可以使用OpenCV库来完成这一工作。
- 预处理照片:– 在图像可以提交给MTCNN模型之前,必须首先进行预处理。这包括将图像的大小调整到合适的尺寸,将其转换为张量,并将像素值归一化。
- 运行模型 :预处理后的图像将被传递给MTCNN模型,该模型将检测图像中的人脸并预测边界框坐标。
- 绘制边界 框:边界框的坐标随后被用来使用OpenCV库在检测到的人脸周围绘制一个矩形。
- 显示输出 :最后一步是在屏幕上显示带有边界框的输出图像。
Tenserflow方法的例子
import tensorflow as tf
// Load the Caffe model //
model = tf.keras.models.load_model('path/to/caffe_model.h5')
// Define the input image //
img = tf.keras.Input(shape=(224, 224, 3))
//Preprocess the image for the model //
x = tf.keras.layers.Lambda(lambda x: x / 255.0)(img)
// Run the image through the model //
predictions = model(x)
// Find the location of the face in the image //
face_locations = tf.where(predictions > 0.5)
// Print the location of the face in the image //
print(face_locations)
输出