使用 CNN 进行面部表情检测

使用网络摄像头进行面部情绪检测的模型训练和部署的端到端指南。

虽然使用 tet 进行情绪检测是非常有用的行业,但现在我们正专注于另一个领域,即面部情绪检测。使用图像的情绪检测对于驾驶员的睡意检测、学生行为检测等非常有用。

在本文中,我们将介绍计算机视觉的这一有趣应用。众所周知,如今计算机视觉正在变得越来越先进。主要科技巨头正在构建他们的模型,使其变得更像人类,为此,机器必须能够检测你的情绪并做出相应的行为。

本文向你展示了如何使用 Tensorflow 构建模型,它可以使用你的图片或实时网络摄像头告诉你情感。

我们将在本文中讨论的检查点是:

  • 获取数据

  • 准备数据

  • 图像增强

  • 建立模型并训练

  • 使用网络摄像头进行检测

面部表情检测入门

那么让我们直接进入面部表情检测的实现部分。

获取数据

我们将使用fer-2013 在Kaggle上公开可用的数据集。它有 48*48 像素的人脸灰度图像及其情感标签。

数据集:https://www.kaggle.com/ashishpatel26/facial-expression-recognitionferchallenge

该数据集包含 7 种情绪:0=愤怒,1=厌恶,2=恐惧,3=快乐,4=悲伤,5=惊讶,6=中性

首先导入pandas 和一些基本库,然后加载数据集。

import matplotlib.pyplot as plt
import numpy as np
import scipy
import pandas as pddf = pd.read_csv('../input/facial-expression-recognitionferchallenge/fer2013/fer2013/fer2013.csv')
df.head()

161b99174c1421698c406922b9452555.png

该数据集包含 3 列,emotionpixelsUsage。emotion列包含整数编码的情绪,pixels列包含以空格分隔的字符串形式的像素,Usage说明数据是用于训练还是测试目的。

准备数据

你会看到数据格式不正确。我们需要对数据进行预处理。这里X_train, X_test包含像素,y_test , y_train包含情绪。

X_train = []
y_train = []
X_test = []
y_test = []
for index, row in df.iterrows():
    k = row['pixels'].split(" ")
    if row['Usage'] == 'Training':
        X_train.append(np.array(k))
        y_train.append(row['emotion'])
    elif row['Usage'] == 'PublicTest':
        X_test.append(np.array(k))
        y_test.append(row['emotion'])

6f4c53961e94ed7314a00ba8254951cb.png

在这个阶段,X_train, X_test包含像素的数字是一个字符串的形式,把它转换成数字很容易,我们只需要进行类型转换。

X_train = np.array(X_train, dtype = 'uint8')
y_train = np.array(y_train, dtype = 'uint8')
X_test = np.array(X_test, dtype = 'uint8')
y_test = np.array(y_test, dtype = 'uint8')

y_test, y_train包含一维整数编码标签,我们需要将它们连接成分类数据以进行有效训练。

import keras
from keras.utils import to_categorical
y_train= to_categorical(y_train, num_classes=7)
y_test = to_categorical(y_test, num_classes=7)

num_classes = 7表示我们有 7 个类要分类。

重塑数据

你需要以 4d 张量 **(row_num, width, height, channel)**的形式转换数据以进行训练。

X_train = X_train.reshape(X_train.shape[0], 48, 48, 1)
X_test = X_test.reshape(X_test.shape[0], 48, 48, 1)

这里 1 告诉我们训练数据是灰度形式的, 在这个阶段,我们已经成功地将我们的数据预处理成X_train , X_test , y_train , y_test

面部情绪检测的图像增强

图像数据增强用于提高模型的性能和泛化能力。在将数据传递给模型之前应用一些数据增强总是一个好习惯**&

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值