Python中用TensorFlow框架实现数字识别

这篇博客介绍了如何利用TensorFlow框架实现数字识别。首先讲解了TensorFlow的安装,包括CPU和GPU版本的选择。接着提到了图片的要求,如需28x28像素且转为灰度图。内容还涉及了图片处理的注意事项,并给出了可能出现的识别错误情况。最后,文章提供了源代码片段`trainMnistFromImages`和`trainMnistFromPackage`,以及一个Demo来展示整个过程。
摘要由CSDN通过智能技术生成

TensorFlow框架实现数字识别

安装TensorFlow

安装TensorFlow有CPU安装和GPU安装之分,每个都有自己的优缺点,看自己喜好安装
具体安装可以参考

https://blog.csdn.net/titansm/article/details/88755173

这里面写的已经很详细了,只要按照步骤一步一步的进行下去不会有什么问题的

图片要求

进行测试的图片有一定的要求

  1. 像素必须为28x28的
  2. 在用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)
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值