头歌——机器、深度学习——人脸识别

第1关:人脸检测

在前面的几个实训中,我们已经学习了人脸识别的基本流程,包括人脸图像采集、人脸检测、特征点提取和人脸识别的整个流程。不仅了解了其中的原理,还学会了编写实际应用的代码。

本实训主要将介绍使用Face Recognition库进行人脸识别。因为Face Recognition是对Dlib的封装,所以其原理和我们前几个实训中,讲解的相同。在本实训中主要为大家讲解其基本使用方法。

为什么在学习完整个流程之后还要讲Face Recognition库呢?因为,在前面的实训中,我们主要使用Dlib库,它是一个在工业界和学术界广受好评,极其优秀的库。而Face Recognition基于Dlib库做了高度封装,当之无愧的称之为世界上最简洁的人脸识别库。

所以,我们学习完基础的原理以及Dlib库,就好比学会了“走路”;而Face Recognition库的高效与简洁,可以让我们彻底“跑起来”。

任务描述

本关任务:使用 face_recognitionface_locations 函数,定位人脸位置。

相关知识

face recognition库中,人脸检测只需两步:

  1. 读取照片;
  2. 检测人脸。

也就是将模型选择之类的操作都封装,默认使用Dlib库中已经训练完成的模型。

例如,我们要识别以下图片中的人脸:

读取照片

face rcognition中使用 load_image_file 函数读取图片:

load_image_file(file, mode='RGB')

其中,各个参数的含义如下:

file:带检测的图片文件路径;

mode:可选值,默认为RGB,也可以指定为L ,代表转化为灰度照片。

示例代码如下:

image = face_recognition.load_image_file("./images/Sheldon.jpg")

检测照片中人脸并返回人脸位置

我们使用face_locations函数检测人脸:

face_locations(img, number_of_times_to_upsample=1, model="hog")

其中,各个参数的含义如下:

  • img:待检测的图片对象;

  • number_of_times_to_upsample:可选值,为寻找人脸进行多少次图片变换,值越大,越能找到更小的人脸;

  • model:可选值,默认使用hog模式, hog 模式在CPU上运行表现更好;如果有GPU加速,也可以指定为cnn模式。

示例代码如下:

face_locations = face_recognition.face_locations(image)

完整示例

一个简单的完整示例非常简洁,只需几行:

  • # 加载face_recognition库
  • import face_recognition
  • # 读取照片
  • image = face_recognition.load_image_file("./images/Sheldon.jpg")
  • # 获取检测到的人脸位置
  • face_locations = face_recognition.face_locations(image)
  • # 打印人脸位置
  • print(face_locations)

运行程序,输出如下:

[(171, 438, 439, 171)]

同之前所学的人脸检测输出一样,输出包含了人脸左上角的位置 (247, 718), 以及人脸的宽度632,和人脸的高度332

绘制人脸区域

我们同样可以使用之前学到的OpenCV绘制人脸区域,再前面识别的基础代码上,加上下面的绘制代码:

  • import cv2
  • for face_location in face_locations:
  • top, right, bottom, left = face_location
  • cv2.rectangle(image, (left, top), (right, bottom), (0, 255, 0), 2)
  • # Show the picture
  • image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
  • cv2.imshow("sd.png", image_rgb)
  • cv2.waitKey(0)

得到的绘制图片结果如下:

编程要求

根据提示,在右侧编辑器补充代码,检测图片中人脸并绘制:

  • 获取指定路径中图片文件中的人脸,并打印输出结果;

  • 使用cv2绘制人脸区域框。

第1关任务——代码题

'''****************BEGIN****************'''
import face_recognition
image_path = './step1/image/children.jpg'
image = face_recognition.load_image_file(image_path)
face_locations = face_recognition.face_locations(image)
print(face_locations)
'''**************** END ****************'''
 
import cv2
for face_location in face_locations:
    '''****************BEGIN****************'''
    top,right,bottom,left = face_location
    cv2.rectangle(image,(left,top),(right,bottom),(0,255,0),2)
    '''**************** END ****************'''
 
# 保存图片
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
cv2.imwrite("./step1/out/children.jpg", image_rgb)

第2关:人脸特征点获取

任务描述

本关任务:使用 face_recognitionface_landmarks 函数,获取人脸特征点。

相关知识

人脸特征点的提取,在face_recognition库中同样分为两步:

  1. 读取照片;

  2. 获取照片中人脸特征点。

假设我们要获取如下图片的特征点:

1. 读取照片

同样的,我们使用 load_image_file 函数读取照片,传入参数为照片文件路径,代码如下:

image = face_recognition.load_image_file("./images/face.jpg")

2. 获取照片中人脸特征点

可以使用face_landmarks函数,获取人脸中特征点:

face_landmarks(face_image, face_locations=None, model="large")

其中,各个参数含义如下:

  • face_image:图片对象;

  • face_locations:可选,默认为空,也可以指定要识别的人脸区域位置;

  • model:可选,不指定时的默认值为 large,另一个值为 smalllarge 代表识别68个特征点,small 代表识别5个特征点。

例如:

face_landmarks_list = face_recognition.face_landmarks(image)

完整代码示例

完整的人脸特征点检测,代码同样十分简洁:

  • # 导入face_recogni
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花来❀勿Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值