【Python深度学习】Tensorflow+CNN进行人脸识别实战(附源码和数据集)

这篇具有很好参考价值的文章主要介绍了【Python深度学习】Tensorflow+CNN进行人脸识别实战(附源码和数据集)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需要源码和数据集请点赞关注收藏后评论区留言私信~~~

下面利用tensorflow平台进行人脸识别实战,使用的是Olivetti Faces人脸图像 部分数据集展示如下

tensorflow人脸识别实战,机器学习,深度学习,tensorflow,深度学习,python,cnn,人脸识别

 程序训练过程如下

tensorflow人脸识别实战,机器学习,深度学习,tensorflow,深度学习,python,cnn,人脸识别

 接下来训练CNN模型 可以看到训练进度和损失值变化

tensorflow人脸识别实战,机器学习,深度学习,tensorflow,深度学习,python,cnn,人脸识别

接下来展示人脸识别结果

 tensorflow人脸识别实战,机器学习,深度学习,tensorflow,深度学习,python,cnn,人脸识别

程序会根据一张图片自动去图片集中寻找相似的人脸 如上图所示

部分代码如下 需要全部源码和数据集请点赞关注收藏后评论区留言私信~~~

from os import listdir
import numpy as np
from PIL import Image
import cv2
from tensorflow.keras.models import Sequential, load_model
from tensorflow.keras.layers import Dense, Activation, Convolution2D, MaxPooling2D, Flatten
from sklearn.model_selection import train_test_split
from tensorflow.python.keras.utils import np_utils

# 读取人脸图片数据
def img2vector(fileNamestr):
    # 创建向量
    returnVect = np.zeros((57,47))    
    image = Image.open(fileNamestr).convert('L')    
    img = np.asarray(image).reshape(57,47)    
    return img

# 制作人脸数据集
def GetDataset(imgDataDir):   
    print('| Step1 |: Get dataset...')
    imgDataDir='faces_4/'
    FileDir = listdir(imgDataDir)

    m = len(FileDir)
    imgarray=[]
    hwLabels=[]
    hwdata=[]

    # 逐个读取图片文件
    for i in range(m):
        # 提取子目录
        className=i
        subdirName='faces_4/'+str(FileDir[i])+'/'
        fileNames = listdir(subdirName)                
        lenFiles=len(fileNames)
        # 提取文件名
        for j in range(lenFiles): 
            fileNamestr = subdirName+fileNames[j]
            hwLabels.append(className)    
            imgarray=img2vector(fileNamestr)
            hwdata.append(imgarray)

    hwdata = np.array(hwdata)
    return hwdata,hwLabels,6

# CNN模型类
class MyCNN(object):
    FILE_PATH = "face_recognition.h5"  # 模型存储/读取目录
    picHeight = 57  # 模型的人脸图片长47,宽57
    picWidth = 47  

    def __init__(self):
        self.model = None

    # 获取训练数据集
    def read_trainData(self, dataset):        
        self.dataset = dataset

    # 建立Sequential模型,并赋予参数
    def build_model(self):
        print('| Step2 |: Init CNN model...')
        self.model = Sequential()
        print('self.dataset.X_train.shape[1:]',self.dataset.X_train.shape[1:])
        self.model.add( Convolution2D( filters=32,
                                      kernel_size=(5, 5),
                                      padding='same',
                                      #dim_ordering='th',
                                      input_shape=self.dataset.X_train.shape[1:]))

        self.model.add(Activation('relu'))
        self.model.add( MaxPooling2D(pool_size=(2, 2),
                                     strides=(2, 2),
                                     padding='same' ) )
        self.model.add(Convolution2D(filters=64, 
                                     kernel_size=(5, 5), 
                                     padding='same') )
        self.model.add(Activation('relu'))
        self.model.add(MaxPooling2D(pool_size=(2, 2), 
                                    strides=(2, 2), 
                                    padding='same') )
        self.model.add(Flatten())
        self.model.add(Dense(512))
        self.model.add(Activation('relu'))

        self.model.add(Dense(self.dataset.num_classes))
        self.model.add(Activation('softmax'))
        self.model.summary()

    # 模型训练
    def train_model(self):
        print('| Step3 |: Train CNN model...')
        self.model.compile( optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
        # epochs:训练代次、batch_size:每次训练样本数
        self.model.fit(self.dataset.X_train, self.dataset.Y_train, epochs=10, batch_size=20)

    def evaluate_model(self):
        loss, accuracy = self.model.evaluate(self.dataset.X_test, self.dataset.Y_test)
        print('| Step4 |: Evaluate performance...')
        print('===================================')        
        print('Loss   Value   is :', loss)
        print('Accuracy Value is :', accuracy)

    def save(self, file_path=FILE_PATH):        
        print('| Step5 |: Save model...')
        self.model.save(file_path)
        print('Model ',file_path,'is succeesfuly saved.')

# 建立一个用于存储和格式化读取训练数据的类
class DataSet(object):
    def __init__(self, path):
        self.num_classes = None
        self.X_train = None
        self.X_test = None
        self.Y_train = None
        self.Y_test = None
        self.picWidth = 47
        self.picHeight = 57        
        self.makeDataSet(path)  # 在这个类初始化的过程中读取path下的训练数据

    def makeDataSet(self, path):
        # 根据指定路径读取出图片、标签和类别数
        imgs, labels, clasNum = GetDataset(path)

        # 将数据集打乱随机分组
        X_train, X_test, y_train, y_test = train_test_split(imgs, labels, test_size=0.2,random_state=1)

        # 重新格式化和标准化
        X_train = X_train.reshape(X_train.shape[0], 1, self.picHeight, self.picWidth) / 255.0
        X_test = X_test.reshape(X_test.shape[0], 1, self.picHeight, self.picWidth) / 255.0

        X_train = X_train.astype('float32')
        X_test = X_test.astype('float32')

        # 将labels转成 binary class matrices
        Y_train = np_utils.to_categorical(y_train, num_classes=clasNum)
        Y_test = np_utils.to_categorical(y_test, num_classes=clasNum)

        # 将格式化后的数据赋值给类的属性上
        self.X_train = X_train
        self.X_test = X_test
        self.Y_train = Y_train
        self.Y_test = Y_test
        self.num_classes = clasNum
# 人脸图片目录
dataset = DataSet('faces_4/')
model = MyCNN()
model.read_trainData(dataset)
model.build_model()
model.train_model()
model.evaluate_model()
model.save()

 创作不易 觉得有帮助请点赞关注收藏~~~文章来源地址https://www.toymoban.com/news/detail-697902.html

到了这里,关于【Python深度学习】Tensorflow+CNN进行人脸识别实战(附源码和数据集)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据深度学习:基于Tensorflow深度学习卷积神经网络CNN算法垃圾分类识别系统

    随着社会的发展和城市化进程的加速,垃圾分类已经成为了环境保护和可持续发展的重要课题。然而,传统的垃圾分类方法通常依赖于人工识别,效率低下且易出错。因此,本项目旨在利用大数据和深度学习技术,构建一个基于 TensorFlow 深度学习的神经网络 CNN(Convolutional

    2024年04月14日
    浏览(108)
  • 【深度学习】基于卷积神经网络(tensorflow)的人脸识别项目(一)

    ​ 活动地址:CSDN21天学习挑战赛 经过前段时间研究,从LeNet-5手写数字入门到最近研究的一篇天气识别。我想干一票大的,因为我本身从事的就是C++/Qt开发,对Qt还是比较熟悉,所以我想实现一个基于Qt的界面化的一个人脸识别。 对卷积神经网络的概念比较陌生的可以看一看

    2024年02月04日
    浏览(61)
  • 【深度学习】基于卷积神经网络(tensorflow)的人脸识别项目(四)

    经过前段时间研究,从LeNet-5手写数字入门到最近研究的一篇天气识别。我想干一票大的,因为我本身从事的就是C++/Qt开发,对Qt还是比较熟悉,所以我想实现一个界面化的一个人脸识别。 对卷积神经网络的概念比较陌生的可以看一看这篇文章:卷积实际上是干了什么 想了解

    2024年01月17日
    浏览(183)
  • 第56步 深度学习图像识别:CNN梯度权重类激活映射(TensorFlow)

    一、写在前面 类激活映射(Class Activation Mapping,CAM)和梯度权重类激活映射(Gradient-weighted Class Activation Mapping,Grad-CAM) 是两种可视化深度学习模型决策过程的技术。他们都是为了理解模型的决策过程,特别是对于图像分类任务,它们可以生成一种热力图,这种图可以突出显

    2024年02月13日
    浏览(51)
  • 第55步 深度学习图像识别:CNN特征层和卷积核可视化(TensorFlow)

    一、写在前面 (1)CNN可视化 在理解和解释卷积神经网络(CNN)的行为方面,可视化工具起着重要的作用。以下是一些可以用于可视化的内容: (a)激活映射(Activation maps): 可以显示模型在训练过程中的激活情况,这可以帮助我们理解每一层(或每个过滤器)在识别图像

    2024年02月14日
    浏览(82)
  • 深度学习实战:基于TensorFlow与OpenCV的手语识别系统

    本期内容:基于TensorFlow与OpenCV的手语识别系统 实验环境: python(3.11.4) tensorflow(2.13.0) cv2(4.8.0) 下载地址:https://download.csdn.net/download/m0_68111267/88518189 这些是Python中的标准库及第三方库及其相关的模块。 具体来说,这个代码导入了以下库: Pandas:数据分析和数据处理库。 NumP

    2024年02月06日
    浏览(52)
  • 基于深度学习的人脸专注度检测计算系统 - opencv python cnn

    1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的人脸专注度检测计算算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 List item 工作量:3分 创新点:5分 🧿 更多资料, 项目分享:

    2024年03月22日
    浏览(99)
  • 深度学习实战项目(一)-基于cnn和opencv的车牌号识别

    网上大部分是关于tensorflow,使用pytorch的比较少,本文也在之前大佬写的代码的基础上,进行了数据集的完善,和代码的优化,效果可比之前的pytorch版本好一点。 数据集来自github开源的字符数据集: 数据集有:0-9,26个字母减去I和O,还有中文字,这里可以看看几张图片:

    2024年02月06日
    浏览(58)
  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之六 简单进行人脸训练与识别

    目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之六 简单进行人脸训练与识别 一、简单介绍 二、简单进行人脸训练与识别 1、LBPH(Local Binary Patterns Histograms)算法进行人脸训练和识别 2、实现步骤: 3、判断是谁的人脸: 案例中涉及的关键函数说

    2024年04月26日
    浏览(91)
  • 竞赛保研 基于深度学习的人脸专注度检测计算系统 - opencv python cnn

    🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的人脸专注度检测计算算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:5分 🧿 更多资料, 项目分享: https://gitee.co

    2024年02月02日
    浏览(221)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包