TensorFlow框架实现数字识别
安装TensorFlow
安装TensorFlow有CPU安装和GPU安装之分,每个都有自己的优缺点,看自己喜好安装
具体安装可以参考
这里面写的已经很详细了,只要按照步骤一步一步的进行下去不会有什么问题的
图片要求
进行测试的图片有一定的要求
- 像素必须为28x28的
- 在用demo进行处理之前必须将图片转为灰度图
具体python实现如下:
from PIL import Image
import os
input_dir = 'D:/Python36/Mnist手写体训练/mnist_test/ss/'
out_dir = 'D:/Python36/Mnist手写体训练/mnist_test/gg/'
a = os.listdir(input_dir)
for i in a:
print(i)
I = Image.open(input_dir+i)
L = I.convert('L')
L.save(out_dir+i)
注意:
需要自己修改图片输入输出路径,此方法是直接对一个文件夹里的图片进行处理。省去了一张一张图片进行处理的麻烦
初始界面
初始界面如下图所示:
选择完图片后运行结果如下图所示:
但是也会有识别错误的时候,此时可能和数字图片不清晰、训练出的网路有一定的关系,最后导致了识别误差,如下图:
将8误识别成6
源代码:
trainMnistFromImages:
#coding:utf8
import os
import cv2
import numpy as np
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
sess = tf.InteractiveSession()
def getTrain():
train=[[],[]] # 指定训练集的格式,一维为输入数据,一维为其标签
# 读取所有训练图像,作为训练集
train_root="mnist_train"
labels = os.listdir(train_root)
for label in labels:
imgpaths = os.listdir(os.path.join(train_root,label))
for imgname in imgpaths:
img = cv2.imread(os.path.join(train_root,label,imgname),0)
array = np.array(img).flatten() # 将二维图像平铺为一维图像
array=MaxMinNormalization(array)
train[0].append(array)
label_ = [0,0,0,0,0,0,0,0,0,0]
label_[int(label)] = 1
train[1].append(label_)
train = shuff(train)
return train
def getTest():
test=[[],[]] # 指定训练集的格式,一维为输入数据,一维为其标签
# 读取所有训练图像,作为训练集
test_root="mnist_test"
labels = os.listdir(test_root)
for label in labels:
imgpaths = os.listdir(os.path.join(test_root,label))
for imgname in imgpaths:
img = cv2.imread(os.path.join(test_root,label,imgname),0)
array = np.array(img).flatten() # 将二维图像平铺为一维图像
array=MaxMinNormalization(array)
test[0].append(array)