tensorflow搭建cnn人脸识别训练+识别代码(python)

通过Python+TensorFlow实现人脸识别(二) 1.简介 上一篇中我们已经搭建好了环境,下面就该进入正题了。要想通过TensorFlow实现人脸识别,并“认识我”,需要准备两个数据集:一个是自己的人脸,一个是其他人的人脸。 在准备好这两个数据集过后,我们便可以来训练神经网络,让她“认出我”。 仍然参考了http://tumumu.cn/2017/05/02/deep-learning-face/ 这篇博客。 其他人脸的数据集使用了这个,... 阅读详情

环境介绍:

Balabalabala

任何东西的起步都是把它的环境给搭建好,关于tensorflow的环境搭建网上一众博客这里就不多说了,自己使用的是Anaconda那套安装流程。这次代码还需要的一些其他python库,大家可以在跑的时候发现哪个no moudle了在install即可。

总的来说代码的大致情况如下:

1.搭建工具:windows +tensorflow 1.4.0 + python 3.5 + opencv3

2.训练代码:test3.py

训练的代码cmd运行就好了,你要做的就是双手离开键盘睡一觉第二天就能跑完。训练后的模型保存为ckpt1 文件夹,里面有四种文件


3.识别代码:hahaha.py(不要在意我丢死人的文件名)

在cmd 窗口运行hahaha.py。

cmd 窗口显示让你选择识别图片(G)或者视频流(V)识别。

①选择图片识别

输入图片路径,自动弹出识别框,人脸部分画框,cmd 窗口显示学号。

②选择摄像头视频流识别

按下英文字母“s”,会进行识别,画人脸框,cmd 窗口显示学号。

按下英文字母“q”,结束识别。

注:如果像素过低,此时不会在人脸部分画框,而是识别整个画面。如果像素不低,会在人脸部分画框。


废话不多说来看代码吧(最后会给出完整源码):

训练代码test3.py:

# -*- coding: utf-8 -*-

from skimage import io,transform
import glob
import os
import tensorflow as tf
import numpy as np
import time

导包不多说,有报moudle XXX没有的去Anaconda环境里装上就好

 

接下来是一系列准备工作,我们的训练集是由60个同学每人500张经过裁剪的128*128的jpg图片构成的,每个人的500张照片都装在由其学号构成的文件夹中(如下图)

所以我们的准备工作分为两部分:

1.练集目录下读取60*500张照片resize统一一下大小,并且更重要的是,伴随着打开每一个子文件夹,我们要为其设置一个labels,一个文件夹的500张照片对应一个label,共60个label,这是后面检验acc的唯一指标,即是否能把测试集的照片通过我们的网络输出到指定出口得到正确的label。

path='D:/code/python/Anaconda3/envs/faces'

#将所有的图片resize成100*100
w=128
h=128
c=3

#读取图片
def read_img(path):
    cate=[path+'/'+x for x in os.listdir(path) if os.path.isdir(path+'/'+x)]
    imgs=[]
    labels=[]
    for idx,folder in enumerate(cate):
        for im in glob.glob(folder+'/*.png'):
            print('reading the images:%s'%(im))
            img=io.imread(im)
            img=transform.resize(img,(w,h,c))
            imgs.append(img)
            labels.append(idx)
    return np.asarray(imgs,np.float32),np.asarray(labels,np.int32)

data,label=read_img(path)

当然,为了我们后边批量拿数据时候不会只拿到同一个人的几十张图片而尽量是几十个人的不同图片,我们借用np的一些函数将他们打乱一下顺序。


#打乱顺序
num_example=data.shape[0]
arr=np.arange(num_example)
np.random.shuffle(arr)
data=data[arr]
label=label[arr]

2.第二个步骤就是在这30000张照片里二八分成验证集和训练集

#将所有数据分为训练集和验证集
ratio=0.8
s=np.int(num_example*ratio)
x_train=data[:s]
y_train=label[:s]
x_val=data[s:]
y_val=label[s:]

这里需要定义一个函数,为了最后训练时候一批一批的传入数据而不是几万张一起丢

#定义一个函数,按批次取数据
def minibatches(inputs=None, targets=None, batch_size=None, shuffle=False):
    assert len(inputs) == len(targets)
    if shuffle:
        indices = np.arange(len(inputs))
        np.random.shuffle(indices)
    for start_idx in range(0, len(inputs) - batch_size + 1, batch_size):
        if shuffle:
            excerpt = indices[start_idx:start_idx + batch_size]
        else:
            excerpt = slice(start_idx, start_idx + batch_size)
        yield inputs[excerpt], targets[excerpt]

之后进入正式的构建CNN的步骤,首先是两个占位符,使用占位符的原因教程说的很清楚了,为了不使网络过于庞大二设计的

#-----------------构建网络----------------------
#占位符
x=tf.placeholder(tf.float32,shape=[None,w,h,c],name='x')
y_=tf.placeholder(tf.int32,shape=[None,],name='y_')

四个卷积层按照tesorflow1.0以后的版本按照参数要求填入对应的数值即可,具体每个参数的要求大家看看官方教程对应了解。同理几个全连接层也是如此。

def CNNlayer():
    #第一个卷积层(128——>64)
    conv1=tf.layers.conv2d(
          inputs=x,
          filters=32,
          kernel_size=[5, 5],
          padding="same",
          activation=tf.nn.relu,
          kernel_initializer=tf.truncated_normal_initializer(stddev=0.01))
    pool1=tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)

    #第二个卷积层(64->32)
    conv2=tf.layers.conv2d(
          inputs=pool1,
          filters=64,
          kernel_size=[5, 5],
          padding="same",
          activation=tf.nn.relu,
          kernel_initializer=tf.truncated_normal_initializer(stddev=0.01))
    pool2=tf.layers.max_pooling2d(inputs=conv2, pool_size=[2, 2], strides=2)

    #第三个卷积层(32->16)
    conv3=tf.layers.conv2d(
          inputs=pool2,
          filters=128,
          kernel_size=[3, 3],
          padding="same",
          activation=tf.nn.relu,
          kernel_initializer=tf.truncated_normal_initializer(stddev=0.01))
    pool3=tf.layers.max_pooling2d(inputs=conv3, pool_size=[2, 2], strides=2)

    #第四个卷积层(16->8)
    conv4=tf.layers.conv2d(
          inputs=pool3,
          filters=128,
          kernel_size=[3, 3],
          padding="same",
          activation=tf.nn.relu,
          kernel_initializer=tf.truncated_normal_initializer(stddev=0.01))
    pool4=tf.layers.max_pooling2d(inputs=conv4, pool_size=[2, 2], strides=2)

    re1 = tf.reshape(pool4, [-1, 8 * 8 * 128])

    #全连接层
    dense1 = tf.layers.dense(inputs=re1, 
                          units=1024, 
                          activation=tf.nn.relu,
                          kernel_initializer=tf.truncated_normal_initializer(stddev=0.01),
                          kernel_regularizer=tf.contrib.layers.l2_regularizer(0.0
OpenCV+TensorFlow的人脸识别 说一下项目思路: 1、先用OpenCV拍摄自己人脸1万张,制作成自己的人脸数据集; 2、下载lfw数据集,并利用OpenCV裁剪出人脸; 3、利用卷积神经网络训练数据集,使用TensorFlow框架 4、重新拍摄自己人脸,并利用训练好的模型来检测识别是否是自己的人脸。 接下来直接上代码: 1、(对应标题1) import cv2 import os import sy... 阅读详情

相关推荐

Face-api.js:利用TensorFlow.js的JavaScript人脸识别

Face-api.js是一个JavaScript API,是基于tensorflow.js核心API的人脸检测和人脸识别的浏览器实现。它实现了一系列的卷积神经网络(CNN),针对网络和移动设备进行了优化。在InfoQ的访谈中,face-api和face-recognition.js的创造者文森特•穆勒解释了他们的动机:其实,我有另一个类库face-recognition.js,它能够检测脸部和用...

weixin_33670713的博客 1133

基于Python的OpenCV+TensorFlow+Keras人脸识别实现

前言:本节要讲的人脸识别主要是借鉴了 一位研究生前辈的文章 我只是在他的基础上进行了改动,让代码能在现在的TensorFlow2.X 等的环境下运行 先看一下效果图 一、准备工作,安装环境 注意:下列Python第三方包的版本比较重要,应为在这里用到的包比较多,如果两个包版本相差较大可能会导致错误,接下来我列出我用的包名及其版本信息供你参考 Python – 3.8.4 TensorFlow-GPU – 2.3.0 OpenCV – 4.4.0 keras – 2.0.9 sklearn –

冰河的博客 2万+

Python实战 | 使用 Python 和 TensorFlow 构建卷积神经网络(CNN)进行人脸识别

通过使用卷积神经网络,我们可以让计算机从图像中学习特征,从而实现对图像的分类、识别和分析等任务。根据你的人脸数据集和任务需求,你可能需要调整网络结构、训练参数和数据预处理方法。这个例子使用了预训练的 VGG16 模型,你可以根据需要修改网络结构和相关参数。需要注意的是,这里仅提供一个简单的示例,实际应用中可能需要根据任务需求调整网络结构、参数和训练策略。你可以使用人脸检测算法(如 dlib 库)来提取人脸区域,然后将人脸图像裁剪到固定大小(如 224x224 像素)。

AI时代光年 1万+

用Python和NumPy可视化理解波函数:从概率密度到薛定谔方程的可视化教程

本文通过Python和NumPy实现量子力学波函数的可视化,从概率密度到薛定谔方程的动态演化,帮助读者直观理解量子态的特性。教程涵盖无限深势阱、量子谐振子等模型,结合代码示例展示时间演化和期望值计算,为量子力学学习提供实用工具。

weixin_27303545的博客 226

yolo自动化项目实例解析(九) 导航

比如我们经常使用的导航,说白了就是寻找两点之间最近的路径,也就是所谓的寻路,我们需要想办法让程序知道他要去哪里,路径包含(起点、轨迹、路径)

默子昂 1996

基于C#的跨平台上位机开发:一次编写,多平台运行

摘要: 本文探讨了如何利用C#进行跨平台上位机开发,以适配Windows、Linux、macOS等多平台需求。通过分析传统单平台开发的局限性(如API差异、硬件接口兼容性),提出基于.NET 5/6/7的解决方案,重点推荐Avalonia(类WPF的跨平台UI框架)和GtkSharp(基于GTK+)实现图形界面。同时,针对硬件通信需求,介绍了System.IO.Ports串口通信和LibUsbDotNet的跨平台支持,并强调多平台调试(VS Code、Docker)的重要性,最终实现一次编码、多端部署的高效

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1409

ESP32驱动GC9A01圆形屏实战:Arduino平台LVGL移植与图像显示优化

本文详细介绍了在Arduino平台上使用ESP32驱动GC9A01圆形屏的实战指南,包括硬件连接、LVGL移植与图像显示优化。通过SPI配置、LVGL库安装和双缓冲机制等技巧,帮助开发者快速实现高效显示效果,适用于智能家居控制面板等应用场景。

weixin_29182481的博客 735

YOLOv8改进 - 注意力篇 - 引入CAA注意力机制

YOLOv8改进 - 注意力篇 - 引入CAA注意力机制

浪子L的博客 5223

YOLOv9电力巡检实战:绝缘子破裂/鸟巢识别+无人机自动定位

摘要:本文聚焦电力输电线路巡检的效率与安全痛点,提出基于YOLOv9与无人机的智能巡检解决方案。针对绝缘子破裂、鸟巢等高危缺陷,通过“无人机改装-模型训练-缺陷识别-工单生成”四阶段工程落地流程,实现全自动化巡检。系统采用大疆M300无人机搭载RTK模块与Jetson边缘计算盒,结合改进YOLOv9模型实时识别5类缺陷,通过4G传输将GPS定位与缺陷数据同步至工单系统。实测表明,该方案巡检效率达50公里/天(较人工提升10倍),缺陷发现率95%(提升40%),事故预防率98%。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1511

PyQt5数据库开发3 6 QSqlQuery完整实操案例【图文详解】

PyQt5数据库开发3 6.1 QSqlQuery实操案例【多图详解】,本文有点长,主要每一个步骤都有对应的图文教程!!!

qq_53317005的博客 2963

ssd训练自己的数据集

基于SSD实现目标检测(训练自己的数据集)

reset2021的博客 6804

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 爬取百度对应词汇页面量
下一篇: geopy.geocoders解决关于具体地址和经纬度互转的问题
codes_first
博客等级 码龄10年 255粉丝 34原创
评论 170
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值