Python人脸微笑识别2-----Ubuntu16.04基于Tensorflow卷积神经网络模型训练的Python3+Dlib+Opencv实现摄像头人脸微笑检测

本文介绍如何使用Tensorflow卷积神经网络进行微笑数据集的模型训练,包括数据集下载、模型构建、训练过程及优化,最后利用Dlib和Opencv实现人脸微笑检测。


上次博客,我们在Ubuntu16.04上进行dlib模型训练进行人脸微笑识别检测,本次博客,我们将通过Tensorflow进行神经网络进行微笑数据集的模型训练,然后通过Opencv实现对微笑人脸的检测

  • Tensorflow版本:Tensorflow-2.2.0
  • Keras版本:Keras-2.3.1
  • Ubuntu版本:Ubuntu-16.04
  • Python版本:Python-3.6

一、微笑数据集下载

1、微笑数据集下载

1)、微笑数据集下载注意事项
小伙伴在进行微笑数据集下载的时候,请一定注意要有正负样本的划分,并且,最好已经分类好的,也就是训练集和测试集应该需要有smile和unsmlie的分别
2)、对于微笑数据集的下载,小伙伴可以通过如下链接进行下载,是林君学长整理好的微笑数据集,且分为正负样本,链接如下所示:
https://download.csdn.net/download/qq_42451251/12579015
3)、数据集展示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
smile和unsmile中的便是数据集图片啦!

2、创建人脸微笑识别项目

1)、打开终端,创建项目文件夹Smile-Python

cd ~/lenovo
mkdir Smile-Python
cd Smile-Python

在这里插入图片描述

3、数据集上传至Ubuntu人脸微笑识别项目文件夹

1)、将上面下载的数据集上传至Ubuntu,进行划分,林君学长之所以上传至Ubuntu上面做,是因为在Ubuntu上面配置好了Tensorflow以及Dlib环境,而在win上没有改环境,如果小伙伴在Win上面配置以上环境,便可以在Win下进行对应的操作哦!
在这里插入图片描述

二、Python代码实现Tensorflow神经网络模型训练

1、创建模型训练train.py文件

1)、创建训练模型文件

cd ~/lenovo/Smile-Python
touch train.py

在这里插入图片描述
2)、打开文件,写入步骤2的代码

gedit train.py

2、Tensorflow神经网络模型训练

1)、导入需要的库

import keras
import os, shutil
from keras import layers
from keras import models
from keras import optimizers
from keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt

2)、设置数据集训练测试集、正负样本路径

train_dir='./smile/train'
train_smiles_dir='./smile/train/smile'
train_unsmiles_dir='./smile/train/unsmile'
test_dir='./smile/test'
test_smiles_dir='./smile/test/smile'
test_unsmiles_dir='./smile/test/unsmile'

3)、定义打印出训练集和测试集的正负样本尺寸函数

def printSmile():
    print('total training smile images:', len(os.listdir(train_smiles_dir)))
    print('total training unsmile images:', len(os.listdir(train_unsmiles_dir)))
    print('total test smile images:', len(os.listdir(test_smiles_dir)))
    print('total test unsmile images:', len(os.listdir(test_unsmiles_dir)))

4)、定义构建小型卷积网络并进行数据集预处理函数

#构建小型卷积网络并进行数据集预处理
def convolutionNetwork():
    model = models.Sequential()
    model.add(layers.Conv2D(32, (3, 3), activation='relu',
                            input_shape=(150, 150, 3)))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(64, (3, 3), activation='relu'))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(128, (3, 3), activation='relu'))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(128, (3, 3), activation='relu'))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Flatten())
    model.add(layers.Dense(512, activation='relu'))
    model.add(layers.Dense(1, activation='sigmoid'))
    #数据预处理
    #对于编译步骤,我们将像往常一样使用RMSprop优化器。由于我们的网络是以一个单一的sigmoid单元结束的,所以我们将使用二元交叉矩阵作为我们的损失
    model.compile(loss='binary_crossentropy',
              optimizer=optimizers.RMSprop(lr=1e-4),
              metrics=['acc'])
    # 数据预处理
    #All images will be rescaled by 1./255
    train_datagen = ImageDataGenerator(rescale=1./255)
    test_datagen = ImageDataGenerator(rescale=1./255)
    train_generator = train_datagen.flow_from_directory(
        # This is the target directory
            train_dir,
        # All images will be resized to 150x150
            target_size=(150, 150),
            batch_size=20,
        # Since we use binary_crossentropy loss, we need binary labels
            class_mode='binary')

    test_generator = test_datagen.flow_from_directory(
            test_dir,
            target_size
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陈一月的编程岁月

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

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

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

打赏作者

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

抵扣说明:

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

余额充值