使用AI进行人脸检测

目录

介绍

阶段和工具

检测、提取、调整大小、绘制...

…看看会发生什么

下一步?


介绍

如果您看过《少数派报告》电影,您可能还记得汤姆·克鲁斯(Tom Cruise)走进一家Gap商店的场景。视网膜扫描仪读取他的眼睛,并为他播放定制的广告。好吧,这是2020年。我们不需要视网膜扫描仪,因为我们拥有人工智能AI)和机器学习ML)!

在本系列中,我们将向您展示如何使用深度学习进行面部识别,然后基于被识别的面部,使用神经网络语音合成TTS)引擎播放自定义广告。

我们假设您熟悉AI/ML的基本概念,并且可以找到使用Python的方法。

阶段和工具

本系列的前四篇文章对应于识别人脸的四个阶段,分别是:

  1. 人脸检测——检测图像或视频中的所有人脸并提取(裁剪)这些人脸
  2. 数据集处理——大多数机器学习过程中包括的一个阶段;提取和解析数据,以及数据集变量的归一化和分类
  3. 卷积神经网络(CNN)的设计、实现和训练
  4. 利用CNN的预测能力进行实际人脸识别

在介绍人脸识别和TTS时,我们将使用一系列工具:

  • Python – AI/ML中常用的编程语言
  • TensorFlowTF核心开源库,可帮助您开发和训练ML模型
  • Keras –支持核心ML功能的API
  • NumPy –使用Python进行科学计算的软件包
  • SK-Image –图像处理算法的集合

检测、提取、调整大小、绘制...

因此,人脸检测——是时候深入研究一些代码了。这是一个实现我们的面部检测器的Python类:

from PIL import Image
from matplotlib import pyplot
from mtcnn import MTCNN
from numpy import asarray
from skimage import io
from util import constant
class MTCnnDetector:

    def __init__(self, image_path):
        self.detector = MTCNN()
        self.image = io.imread(image_path)

该类的名称是MTCnnDetector因为我们将使用的预定义检测器是MTCNN(多任务卷积神经网络)。这是一种遵循多任务学习原理的CNN。换句话说,它能够同时学习多个任务,从而支持同时检测多个面部。使用MTCNN算法,我们可以检测图像中人脸的边界框,以及每个人脸的5点面部界标(最简单的模型,它可以检测眼睛的边缘和鼻子的底部)。通过将输入输入通过一个CNN来逐步改进检测结果,CNN返回候选边界框及其概率分数。

这是该类的主要方法:

def process_image(self, plot=False):
    faces = self.__detect_face();
    resized_face_list = []
    for f in faces:
        extracted_face = self.__extract_face(f)
        resized_face = self.__resize_img_to_face(extracted_face)
        resized_face_list.append(resized_face)
        if plot:
            self.__plot_face(resized_face)
    return resized_face_list

该方法非常简单:它调用detect_face()方法以从图像中获取所有面孔(其路径是在通过类构造函数输入之前输入的),提取这些面孔并调整其大小,然后返回一个已调整大小的图像列表。此外,如果plotTrue ,它将绘制检测到的面部。它使用以下私有方法作为辅助:

def __detect_face(self):
    return self.detector.detect_faces(self.image)

def __extract_face(self, face):
    x1, y1, width, height = face['box']
    x2, y2 = x1 + width, y1 + height
    return self.image[y1:y2, x1:x2]

def __resize_img_to_face(self, face):
    image = Image.fromarray(face)
    image = image.resize((constant.DETECTOR_FACE_DIM, constant.DETECTOR_FACE_DIM))
    return asarray(image)

def __plot_face(self, face):
    pyplot.imshow(face)
    pyplot.show()

因此,detect_face()方法使用self.detector.detect_faces()方法检测面部。extract_face()方法从图像中提取与较早返回的边界框相对应的部分。最后,resize_img_to_face()方法输入图像的先前获得的部分,并将其调整为预定义的尺寸。plot_face()方法绘制结果人脸。

看看会发生什么

让我们使用来自Wikipedia的示例图像来查看此代码的实际应用。

# Face detector
face_detector = MTCnnDetector(constant.CELEBRITY_VGG_PATH)
resized_faces = face_detector.process_image(plot=True)

在上面的代码中,constant.CELEBRITY_VGG_PATH是一个常量文件,它将用作项目中所有路径和常量的容器。让我们运行代码并检查检测到的面部图。这是我们看到的——使用matplotlib绘制的。

下一步?

在本文中,我们介绍了检测图像中人脸的步骤。如果用于训练CNN的图像没有提前裁剪到被摄对象面部,则此阶段是必要的。在接下来的文章中,我们将讨论有关准备数据集用于输送正确的数据到CNN。敬请关注!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值