tensorflow2.0手势识别【图片分类练手】

写在前面:感谢阿里天池实验室,让我免费白嫖到GPU训练数据

本文参考价值不大,只是本人练手的代码,简单保存下代码而已,若有错误,尽管提出,不胜感激。
-------------------------------------分割线--------------------------------

1-导入所需要的包
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import os
import re
from PIL import Image
import random
%matplotlib inline
2-从文件中获取数据集
def make_data():   
    file_list = os.listdir('dataset/')
    pic_to_label = {'nothing':0,'ok':1,'peace':2,'punch':3,'stop':4}
    data_path = []
    data = []
    label = []

    for item in file_list:
        data_path.append(item)
        
    for i in range(10):
        random.shuffle(data_path)
    
    for item in data_path:
        temp = 'dataset/'+item
        if re.match('n+othing',item) != None:
            label.append([0])
            im  = Image.open(temp)
            im = im.convert('L')
            img_ndarray = np.asarray(im, dtype='float64')
            data.append(img_ndarray)
        elif re.match('iiok',item) != None:
            label.append([1])
            im  = Image.open(temp)
            im = im.convert('L')
            img_ndarray = np.asarray(im, dtype='float64')
            data.append(img_ndarray)
        elif re.match('peace',item) != None:
            label.append([2])
            im  = Image.open(temp)
            im = im.convert('L')
            img_ndarray = np.asarray(im, dtype='float64')
            data.append(img_ndarray)
        elif re.match('punch',item) != None:
            label.append([3])
            im  = Image.open(temp)
            im = im.convert('L')
            img_ndarray = np.asarray(im, dtype='float64')
            data.append(img_ndarray)
        elif re.match('stop',item) != None:
            label.append([4])
            im  = Image.open(temp)
            im = im.convert('L')
            img_ndarray = np.asarray(im, dtype='float64')
            data.append(img_ndarray)
    return data,label
3-加载数据集,分为训练集和测试集(6:4)
def load_data():
    data,label = make_data()
    data_number = len(data)
    train_number = data_number*6//10
    test_data = data_number-train_number

    data_train = data[0:train_number]
    label_train = label[0:train_number]
    data_test = data[train_number:-1]
    label_test = label[train_number:-1]

    return(data_train,label_train),(data_test,label_test)

4-预处理数据(归一化,标签变one_hot)
def process_data():
    (data_train,label_train),(data_test,label_test) = load_data()

    data_train = np.array(data_train)
    #data_train =  data_train.reshape(data_train.shape[0],1,200,200)/255
    data_test = np.array(data_test)
   # data_test = data_test.reshape(data_test.shape[0],1,200,200)/255

    data_train = np.expand_dims(data_train,-1)/255
    data_test = np.expand_dims(data_test,-1)/255

    label_train = np.array(label_train,dtype='uint8')
    label_test = np.array(label_test,dtype='uint8')
    
    label_train_onehot = tf.keras.utils.to_categorical(label_train)
    label_test_onehot = tf.keras.utils.to_categorical(label_test)
    
    return(data_train,label_train_onehot),(data_test,label_test_onehot)
5-搭建卷积网络
def build_model():
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Conv2D(16,(3,3),input_shape=(200,200,1),activation='relu',padding='same'))
    model.add(tf.keras.layers.Conv2D(16,(3,3),activation='relu',padding='same'))
    model.add(tf.keras.layers.MaxPool2D())
    model.add(tf.keras.layers.Dropout(0.3))

    model.add(tf.keras.layers.Conv2D(32,(3,3),activation='relu',padding='same'))
    model.add(tf.keras.layers.Conv2D(32,(3,3),activation='relu',padding='same'))
    model.add(tf.keras.layers.MaxPool2D())
    model.add(tf.keras.layers.Dropout(0.3))
    
    model.add(tf.keras.layers.Conv2D(64,(3,3),activation='relu',padding='same'))
    model.add(tf.keras.layers.Conv2D(64,(3,3),activation='relu',padding='same'))
    model.add(tf.keras.layers.MaxPool2D())
    model.add(tf.keras.layers.Dropout(0.3))
    
    model.add(tf.keras.layers.Conv2D(128,(3,3),activation='relu',padding='same'))
    model.add(tf.keras.layers.Conv2D(128,(3,3),activation='relu',padding='same'))
    model.add(tf.keras.layers.MaxPool2D())
    model.add(tf.keras.layers.Dropout(0.3))

    model.add(tf.keras.layers.Conv2D(256,(3,3),activation='relu',padding='same'))
    model.add(tf.keras.layers.Conv2D(256,(3,3),activation='relu',padding='same'))
    model.add(tf.keras.layers.MaxPool2D())
    model.add(tf.keras.layers.Dropout(0.3))


    model.add(tf.keras.layers.GlobalAveragePooling2D())


    model.add(tf.keras.layers.Dense(256,activation='relu'))
    model.add(tf.keras.layers.Dropout(0.3))

    model.add(tf.keras.layers.Dense(256,activation='relu'))
    model.add(tf.keras.layers.Dropout(0.3))

    model.add(tf.keras.layers.Dense(5,activation='softmax'))
    
    return model


6-后续训练数据,预测数据
model = build_model()
model.summary()
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['acc']
)
(data_train,label_train),(data_test,label_test) = process_data()
history = model.fit(data_train,label_train,epochs=30,validation_data=(data_test,label_test))
history.history.keys()     
plt.plot(history.epoch,history.history.get('loss'),label='loss')
plt.plot(history.epoch,history.history.get('val_loss'),label='val_loss')
plt.legend()
plt.plot(history.epoch,history.history.get('val_acc'),label='val_acc')
plt.plot(history.epoch,history.history.get('acc'),label='acc')
plt.legend()
model.evaluate(data_test,label_test)
7-训练过程情况

在这里插入图片描述

8-训练结果测试
pic_to_label = {0:'nothing',1:'ok',2:'peace',3:'punch',4:'stop'}
im = Image.open('dataset/punch100.png')
im = im.convert('L')
im = np.asarray(im, dtype='float64')
plt.imshow(im)
im = im.reshape(1,200,200,1)
ans = model.predict(im)
ans = np.argmax(ans)
print('                ',pic_to_label[ans])

在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
TensorFlow是一个开源机器学习框架,可以帮助我们构建各种人工智能模型。在TensorFlow2.0中,我们可以使用深度学习模型来进行水表的识别。 水表识别是一个目标检测问题,我们可以使用现有的深度学习模型来解决。首先,我们需要准备水表的训练数据集。这个数据集应包含水表的图像及其对应的标注框,表示水表在图像中的位置。 接下来,我们可以使用TensorFlow2.0的高级API - Keras来构建一个目标检测模型。我们可以使用预训练的卷积神经网络(如ResNet、Inception等)作为模型的基础。通过在这个基础模型上添加一些额外的层,我们可以使模型适应水表的识别任务。 在模型准备好之后,我们可以使用数据集进行训练。训练过程中,模型会根据输入的图像和标注框,学习如何预测水表的位置。为了提高模型的准确性,我们可以使用一些技巧来优化模型的性能,如数据增强、调整学习率等。 训练完成后,我们可以使用训练好的模型来进行水表的识别。给定一张图像,我们可以使用模型来预测出图像中所有水表的位置。可以根据需要,对这些位置进行进一步的处理,如计算水表读数等。 总结来说,使用TensorFlow2.0可以很方便地实现水表的识别。通过准备训练数据集、构建目标检测模型、进行训练和使用训练好的模型进行预测,可以达到较好的水表识别效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值