import cv2 as cv
import tensorflow as tf
import numpy as np
import random ##以下为数据预处理,分类为cata,总共样本为cata*num_batch,总共图像为cata*num_img
cata=2 #需要分的类别
num_img=49 #图像个数
#该函数返回x与y,输入批量,产生cata*num_batch
def XANDY(num_batch): x_mouse=np.zeros([num_batch,500,500,1]) #保存鼠标图片矩阵
x_keyboard=np.zeros([num_batch,500,500,1]) #保存键盘图片矩阵
temp_mouse=random.sample(range(0,num_img),num_batch)
temp_keyboard=random.sample(range(0,num_img),num_batch)
for i in range(num_batch):
img_mouse1 = cv.imread('C:\\Users\\HHQ\\Desktop\\tangjun\\mouse\\data_mouse\\'+str(temp_mouse[i])+'.PNG', cv.IMREAD_GRAYSCALE)
img_mouse=cv.resize(img_mouse1,(500,500))
x_mouse[i,:,:,0]=img_mouse
img_keyboard1 = cv.imread('C:\\Users\\HHQ\\Desktop\\tangjun\\mouse\\data_keyboard\\'+str(temp_keyboard [i])+'.bmp', cv.IMREAD_GRAYSCALE)
img_keyboard = cv.resize(img_keyboard1, (500, 500))
x_keyboard [i,:,:,0] = img_keyboard xx=np.vstack((x_mouse,x_keyboard))
#表签中0表示鼠标,1表示键盘
y_0=np.zeros([num_batch,1])
y_1=np.ones([num_batch,1])
y_mouse=np.hstack((y_1,y_0))
y_keyboard=np.hstack((y_0,y_1))
yy_=np.vstack((y_mouse,y_keyboard)) #标签为二维数组,行保存样本数量,列保存分类
return xx,yy_ x=tf.placeholder(dtype=tf.float32,shape=[None ,500,500,1])
y_=tf.placeholder(dtype=tf.float32,shape=[None,cata])
#建立卷积
#第一层卷积
W_cov1=tf.Variable(tf.truncated_normal([5,5,1,32],stddev=0.1),dtype=tf.float32)
B_cov1=tf.Variable(tf.truncated_normal([32],stddev=0.1),dtype=tf.float32)
A_cov1=tf.nn.relu(tf.nn.conv2d(x,W_cov1,strides=[1,1,1,1],padding='SAME')+B_cov1)
P_cov1=tf.nn.max_pool(A_cov1,ksize=[1,2,2,1],strides=[1,2,2,1],padding='VALID')
#得到250*250*32维度的图像 #第二层卷积
W_cov2=tf.Variable(tf.truncated_normal([5,5,32,64],stddev=0.1),dtype=tf.float32)
B_cov2=tf.Variable(tf.truncated_normal([64],stddev=0.1),dtype=tf.float32)
A_cov2=tf.nn.relu(tf.nn.conv2d(P_cov1,W_cov2,strides=[1,1,1,1],padding='SAME')+B_cov2)
# #第三层卷积
# W_cov3=tf.Variable(tf.truncated_normal()) # 建立全连接层,识别2物体
w=tf.Variable(tf.zeros([250*250*64,cata]),dtype= tf.float32)
b=tf.Variable(tf.zeros([cata]),dtype=tf.float32)
x_reshape=tf.reshape(A_cov2,[-1,250*250*64])
y=tf.matmul(x_reshape,w)+b #定义交叉熵,为了定义损失函数
loss=tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y)
# loss=-tf.reduce_mean(y_*tf.log(y))
#定义优化器
# train=tf.train.GradientDescentOptimizer(0.001).minimize(loss)
# train=tf.train.AdagradDAOptimizer(0.01).minimize(loss)
train=tf.train.AdamOptimizer(0.001).minimize(loss)
#定义预测准确率
predict1=tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
predict=tf.reduce_mean(tf.cast(predict1,tf.float32)) init=tf.initialize_all_variables()
sess=tf.Session() sess.run(init)
x_pr,y_pr=XANDY(40) for i in range(30):
x_ba,y_ba=XANDY(15)
sess.run(train,feed_dict={x:x_ba,y_:y_ba})
accuracy=sess.run(predict, feed_dict={x: x_pr, y_: y_pr})
print('训练步骤: %d , 训练精度:%g' %(i,accuracy))


基于tensorflow的简单鼠标键盘识别的更多相关文章

  1. 基于TensorFlow的简单验证码识别

    TensorFlow 可以用来实现验证码识别的过程,这里识别的验证码是图形验证码,首先用标注好的数据来训练一个模型,然后再用模型来实现这个验证码的识别. 生成验证码 首先生成验证码,这里使用 Pyth ...

  2. 基于tensorflow的MNIST手写识别

    这个例子,是学习tensorflow的人员通常会用到的,也是基本的学习曲线中的一环.我也是! 这个例子很简单,这里,就是简单的说下,不同的tensorflow版本,相关的接口函数,可能会有不一样哟.在 ...

  3. 个基于TensorFlow的简单故事生成案例:带你了解LSTM

    https://medium.com/towards-data-science/lstm-by-example-using-tensorflow-feb0c1968537 在深度学习中,循环神经网络( ...

  4. 深度学习(五)基于tensorflow实现简单卷积神经网络Lenet5

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/8954892.html 参考博客:https://blog.csdn.net/u01287127 ...

  5. 基于TensorFlow的手写中文识别(版本一)

    具体效果实现: 第一次由于设备问题所以只训练了是一些个简单的字: 第二选了23个字训练了3000在字迹清晰下能够识别: 类似于默,鼠,鼓,这类文字也能识别,由于训练数据的问题,在测试的时候应尽量写在正 ...

  6. 基于tensorflow的简单线性回归模型

    #!/usr/local/bin/python3 ##ljj [1] ##linear regression model import tensorflow as tf import matplotl ...

  7. 基于tensorflow实现mnist手写识别 (多层神经网络)

    标题党其实也不多,一个输入层,三个隐藏层,一个输出层 老样子先上代码 导入mnist的路径很长,现在还记不住 import tensorflow as tf import tensorflow.exa ...

  8. C#简单鼠标键盘钩子KMHook

    简介:由三个文件构成Pinvo.cs.KeyboardHook.cs.MouseHook.cs Pinvo.cs 是KeyboardHook与MouseHook需要的一些常量消息的定义 Keyboar ...

  9. 基于TensorFlow的MNIST手写数字识别-初级

    一:MNIST数据集    下载地址 MNIST是一个包含很多手写数字图片的数据集,一共4个二进制压缩文件 分别是test set images,test set labels,training se ...

随机推荐

  1. linux后台运行相关命令

    1.nohup & 让程序后台运行,nohup 命令 & 2.jobs 查看当前有多少在后台运行的命令 jobs -l选项可显示所有任务的PID,jobs的状态可以是running, ...

  2. LOJ 3120: 洛谷 P5401: 「CTS2019 | CTSC2019」珍珠

    题目传送门:LOJ #3120. 题意简述: 称一个长度为 \(n\),元素取值为 \([1,D]\) 的整数序列是合法的,当且仅当其中能够选出至少 \(m\) 对相同元素(不能重复选出元素). 问合 ...

  3. 网络编程 TCP协议:三次握手,四次回收,反馈机制 socket套接字通信 粘包问题与解决方法

    TCP协议:传输协议,基于端口工作 三次握手,四次挥手 TCP协议建立双向通道. 三次握手, 建连接: 1:客户端向服务端发送建立连接的请求 2:服务端返回收到请求的信息给客户端,并且发送往客户端建立 ...

  4. mysql数据库锁的机制-及事务事件

    事务隔离级别,脏读.不可重复读.幻读,乐观锁.悲观锁(共享锁.排它锁) 数据库事务具有四个特征,分别是原子性(Atomicity).一致性(Consistency).隔离性(Isoation).持久性 ...

  5. nexus pip proxy config

    nexus pip proxy config config for linux touch config touch ~/.pip/pip.conf content [global] index-ur ...

  6. contest14 CF160div2 oooxx oooxx ooooo

    DE E : 排序条件不能加等于号, 不然会T

  7. Ubuntu下Thunderbird设置

    安装 apt-get install thunderbird(software) thunderbird-locale-zh-cn(汉化包) 添加最小化插件 附加组件里安装 MinimizeToTra ...

  8. 洛谷 p2055 假期的宿舍 题解

    好长时间没更博客了 因为实在太蒻了 这让本蒟蒻怎么办 今天终于遇到了一道模板题(之前也有,不过太蒻了都不会) 不过...写代码5分钟,调试2小时 分界线:回归正题 这个就是普通的匈牙利算法 差不多 思 ...

  9. 记一次生产kafka消息消费的事故

    事故背景: 我们公司与合作方公司有个消息同步的需求,合作方是消息生产者,我们是消息消费者,他们通过kafka给我们推送消息,我们实时接收,然后进行后续业务处理.昨天上午,发现他们推送过来的广场门店信息 ...

  10. ACT开发初步(二)——XML

    由于pc无法发文,先挖坑,慢慢填