# -*- coding: utf-8 -*-
import random
import numpy as np
from sklearn.cross_validation import train_test_split
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.optimizers import SGD
from keras.utils import np_utils
from keras.models import load_model
from keras import backend as K
from load_face_dataset import load_dataset, resize_image, IMAGE_SIZE
class Dataset:
def __init__(self, path_name):
#训练集
self.train_images = None
self.train_labels = None
#验证集
self.valid_images = None
self.valid_labels = None
#测试集
self.test_images = None
self.test_labels = None
#数据集加载路径
self.path_name = path_name
#当前库采用的维度顺序
self.input_shape = None
#加载数据集并按照交叉验证的原则划分数据集并进行相关预处理工作
def load(self, img_rows = IMAGE_SIZE, img_cols = IMAGE_SIZE,
img_channels = 3, nb_classes = 2):
#加载数据集到内存
images, labels = load_dataset(self.path_name)
train_images, valid_images, train_labels, valid_labels = train_test_split(images, labels, test_size = 0.3, random_state = random.randint(0, 100))
_, test_images, _, test_labels = train_test_split(images, labels, test_size = 0.5, random_state = random.randint(0, 100))
#当前的维度顺序如果为'th',则输入图片数据时的顺序为:channels,rows,cols,否则:rows,cols,channels
#这部分代码就是根据keras库要求的维度顺序重组训练数据集
if K.image_dim_ordering() == 'th':
train_images = train_images.reshape(train_images.shape[0], img_channels, img_rows, img_cols)
valid_images = valid_images.reshape(valid_images.shape[0], img_channels, img_rows, img_cols)
test_images = test_images.reshape(test_images.shape[0], img_channels, img_rows, img_cols)
self.input_shape = (img_channels, img_rows, img_cols)
else:
train_images = train_images.reshape(train_images.shape[0], img_rows, img_cols, img_channels)
valid_images = valid_images.reshape(valid_images.shape[0], img_rows, img_cols, img_channels)
test_images = test_images.reshape(test_images.shape[0], img_rows, img_cols, img_channels)
self.input_shape = (img_rows, img_cols, img_channels)
#输出训练集、验证集、测试集的数量
print(train_images.shape[0], 'train samples')
print(valid_images.shape[0], 'valid samples')
print(test_images.shape[0], 'test samples')
#我们的模型使用categorical_crossentropy作为损失函数,因此需要根据类别数量nb_classes将
#类别标签进行one-hot编码使其向量化,在这里我们的类别只有两种,经过转化后标签数据变为二维
train_labels = np_utils.to_categorical(train_labels, nb_classes)
valid_labels = np_utils.to_categorical(valid_labels, nb_classes)
test_labels = np_utils.to_categorical(test_labels, nb_classes)
#像素数据浮点化以便归一化
train_images = train_images.astype('float32')
valid_images = valid_images.astype('float32')
test_images = test_images.astype('float32')
#将其归一化,图像的各像素值归一化到0~1区间
train_images /= 255
valid_images /= 255
test_images /= 255
self.train_images = train_images
self.valid_images = valid_images
self.test_images = test_images
self.train_labels = train_labels
self.valid_labels = valid_labels
self.test_labels = test_labels
#CNN网络模型类
class Model:
def __init__(self):
self.model = None
#建立模型
def build_model(self, dataset, nb_classes = 2):
#构建一个空的网络模型,它是一个线性堆叠模型,各神经网络层会被顺序添加,专业名称为序贯模型或线性堆叠模型
self.model = Sequential()
#以下代码将顺序添加CNN网络需要的各层,一个add就是一个网络层
self.model.add(Convolution2D(32, 3, 3, border_mode='same',
input_shape = dataset.input_shape)) #1 2维卷积层
self.model.add(Activation('relu')) #2 激活函数层
self.model.add(Convolution2D(32, 3, 3)) #3 2维卷积层
self.model.add(Activation('relu')) #4 激活函数层
self.model.add(MaxPooling2D(pool_size=(2, 2))) #5 池化层
self.model.add(Dropout(0.25)) #6 Dropout层
self.model.add(Convolution2D(64, 3, 3, border_mode='same')) #7 2维卷积层
self.model.add(Activation('relu')) #8 激活函数层
self.model.add(Convolution2D(64, 3, 3)) #9 2维卷积层
self.model.add(Activation('relu')) #10 激活函数层
self.model.add(MaxPooling2D(pool_size=(2, 2))) #11 池化层
self.model.add(Dropout(0.25)) #12 Dropout层
self.model.add(Flatten()) #13 Flatten层
self.model.add(Dense(512)) #14 Dense层,又被称作全连接层
self.model.add(Activation('relu')) #15 激活函数层
self.model.add(Dropout(0.5)) #16 Dropout层
self.model.add(Dense(nb_classes)) #17 Dense层
self.model.add(Activation('softmax')) #18 分类层,输出最终结果
#输出模型概况
self.model.summary()
#训练模型
def train(self, dataset, batch_size = 20, nb_epoch = 10, data_augmentation = True):
sgd = SGD(lr = 0.01, decay = 1e-6,
momentum = 0.9, nesterov = True) #采用SGD+momentum的优化器进行训练,首先生成一个优化器对象
self.model.compile(loss='categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy']) #完成实际的模型配置工作
#不使用数据提升,所谓的提升就是从我们提供的训练数据中利用旋转、翻转、加噪声等方法创造新的
#训练数据,有意识的提升训练数据规模,增加模型训练量
if not data_augmentation:
self.model.fit(dataset.train_images,
dataset.train_labels,
batch_size = batch_size,
nb_epoch = nb_epoch,
validation_data = (dataset.valid_images, dataset.valid_labels),
shuffle = True)
#使用实时数据提升
else:
#定义数据生成器用于数据提升,其返回一个生成器对象datagen,datagen每被调用一
#次其生成一组数据(顺序生成),节�
没有合适的资源?快使用搜索试试~ 我知道了~
本项目采用Opencv实现对视频信号的实时采集与帧提取.zip
共1204个文件
jpg:1191个
py:6个
ini:4个
需积分: 5 0 下载量 194 浏览量
2023-12-28
09:10:33
上传
评论
收藏 64.51MB ZIP 举报
温馨提示
本项目采用Opencv实现对视频信号的实时采集与帧提取,用Adaboost算法实现人脸图像的提取分割,并基于Keras搭建CNN卷积神经网络结构,用提取到的人脸图像训练CNN模型,并实现对视频中人脸的实时检测识别。
资源推荐
资源详情
资源评论
收起资源包目录
本项目采用Opencv实现对视频信号的实时采集与帧提取.zip (1204个子文件)
me.face.model.h5 49.56MB
workspace.ini 489B
vcs.ini 87B
encoding.ini 60B
codestyle.ini 58B
38.jpg 31KB
40.jpg 30KB
287.jpg 29KB
33.jpg 29KB
286.jpg 28KB
9.jpg 28KB
73.jpg 27KB
47.jpg 27KB
283.jpg 27KB
31.jpg 27KB
293.jpg 27KB
6.jpg 27KB
8.jpg 27KB
60.jpg 27KB
45.jpg 27KB
284.jpg 27KB
285.jpg 27KB
51.jpg 26KB
1.jpg 26KB
30.jpg 26KB
74.jpg 26KB
28.jpg 26KB
282.jpg 26KB
44.jpg 26KB
15.jpg 26KB
71.jpg 26KB
16.jpg 26KB
3.jpg 26KB
17.jpg 26KB
66.jpg 26KB
75.jpg 26KB
34.jpg 26KB
4.jpg 25KB
20.jpg 25KB
65.jpg 25KB
52.jpg 25KB
49.jpg 25KB
48.jpg 25KB
10.jpg 25KB
2.jpg 25KB
29.jpg 25KB
21.jpg 25KB
294.jpg 25KB
7.jpg 25KB
63.jpg 25KB
69.jpg 25KB
18.jpg 25KB
64.jpg 25KB
56.jpg 25KB
67.jpg 25KB
26.jpg 25KB
59.jpg 25KB
70.jpg 25KB
61.jpg 25KB
11.jpg 25KB
32.jpg 25KB
58.jpg 25KB
37.jpg 25KB
35.jpg 25KB
68.jpg 25KB
72.jpg 25KB
12.jpg 25KB
291.jpg 24KB
36.jpg 24KB
46.jpg 24KB
39.jpg 24KB
53.jpg 24KB
19.jpg 24KB
280.jpg 24KB
22.jpg 24KB
288.jpg 24KB
14.jpg 24KB
62.jpg 24KB
292.jpg 24KB
290.jpg 24KB
43.jpg 24KB
41.jpg 23KB
281.jpg 23KB
57.jpg 23KB
5.jpg 23KB
13.jpg 23KB
78.jpg 23KB
289.jpg 23KB
27.jpg 23KB
302.jpg 23KB
299.jpg 23KB
54.jpg 23KB
50.jpg 23KB
42.jpg 23KB
0.jpg 23KB
279.jpg 22KB
55.jpg 22KB
25.jpg 22KB
77.jpg 22KB
298.jpg 22KB
共 1204 条
- 1
- 2
- 3
- 4
- 5
- 6
- 13
资源评论
Lei宝啊
- 粉丝: 1998
- 资源: 1330
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功