- 我们已经学习了人脸识别的基本流程,包括人脸图像采集、人脸检测、特征点提取和人脸识别的整个流程。不仅了解了其中的原理,还学会了编写实际应用的代码。
- 本次主要将介绍使用Face Recognition库进行人脸识别。因为Face Recognition是对Dlib的封装,所以其原理和我们前几个讲解的相同。本次主要为大家讲解其基本使用方法。
- 为什么在学习完整个流程之后还要讲Face Recognition库呢?
…在前面我们主要使用Dlib库,它是一个在工业界和学术界广受好评,极其优秀的库。
…而Face Recognition基于Dlib库做了高度封装,当之无愧的称之为世界上最简洁的人脸识别库。
…所以,我们学习完基础的原理以及Dlib库,就好比学会了“走路”;而Face Recognition库的高效与简洁,可以让我们彻底“跑起来”。
【 1. 读取图片 】
load_image_file(file, mode='RGB')
# file:带检测的图片文件路径;
# mode:可选值,默认为RGB,也可以指定为L ,代表转化为灰度照片。
范例:
image = face_recognition.load_image_file("picture1.jpg")
【 2. 检测人脸并返回人脸位置 】
在face recognition库中,人脸检测只需两步:
- 读取照片;
- 检测人脸。
.
( 也就是将模型选择之类的操作都封装,默认使用Dlib库中已经训练完成的模型。)
face_locations(img, number_of_times_to_upsample=1, model="hog")
# img:待检测的图片对象;
# number_of_times_to_upsample:可选值,为寻找人脸进行多少次图片变换,值越大,越能找到更小的人脸;
# model:可选值,默认使用hog模式, hog 模式在CPU上运行表现更好;如果有GPU加速,也可以指定为cnn模式。
范例:
# 加载face_recognition库
import face_recognition
# 读取照片
image = face_recognition.load_image_file("picture.jpg")
# 获取检测到的人脸位置
face_locations = face_recognition.face_locations(image)
# 输出人脸位置
print(face_locations)
picture1.jpg:
运行结果:
【 3. 绘制人脸区域 】
我们同样可以使用之前学到的OpenCV绘制人脸区域,再前面识别的基础代码上,加上下面的绘制代码:
import cv2
# 加载face_recognition库
import face_recognition
# 读取照片
image = face_recognition.load_image_file("picture1.jpg")
# 获取检测到的人脸位置
face_locations = face_recognition.face_locations(image)
# 打印人脸位置
print(face_locations)
# 绘制人脸区域
for face_location in face_locations:
top, right, bottom, left = face_location
cv2.rectangle(image, (left, top), (right, bottom), (0, 255, 0), 2)
# 将图片转换成原来的色彩
#(因在前面的步骤中face recognition已自动将图片转化成了灰度图)
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 展示图片
cv2.imshow("picture1 Recognition", image_rgb)
# 等待用户关闭界面
cv2.waitKey(0)
运行结果: