深度学习在面部识别与定制广告中的应用

想象一下,2020年,不再需要视网膜扫描仪,因为有了人工智能(AI)和机器学习(ML)。在本系列文章中,将展示如何利用深度学习进行面部识别,然后基于识别出的面部,使用神经网络文本到语音(TTS)引擎播放定制广告。可以在CodeProject上浏览代码,或者下载.zip文件在本地机器上查看代码。假设对AI/ML的基本概念有所了解,并且熟悉Python。

阶段与工具

本系列文章的前四篇对应于面部识别过程的四个阶段:

  • 面部检测 - 在图像或视频中检测所有人类面部并提取(裁剪)这些面部
  • 数据集处理 - 大多数ML过程中包含的阶段;获取和解析数据,以及数据集变量的归一化和分类
  • 设计、实现和训练卷积神经网络(CNN)
  • 使用CNN的预测能力进行实际的面部识别

在讨论面部识别和TTS时,将使用以下工具集:

  • Python - 在AI/ML中常用的编程语言
  • TensorFlow (TF) - 帮助开发和训练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) 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 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()

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

看看会发生什么

让使用维基百科上的示例图像来运行这段代码。

# 面部检测器 face_detector = MTCnnDetector(constant.CELEBRITY_VGG_PATH) resized_faces = face_detector.process_image(plot=True)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485