Recognizing numbers with an image using python and tensorflow

Details: Ubuntu 14.04 (LTS), OpenCV 2.4.13, Spyder 2.3.9 (Python 2.7), Tensorflow r0.10

I want to recognize Number from an image with Python and Tensorflow (optionally OpenCV).

Also, I want to use tensor flow MNIST data training

Like this (code applies to this video page ),

The code:

import tensorflow as tf
import random

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

x = tf.placeholder("float", [None, 784])
y = tf.placeholder("float", [None, 10])

W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

learning_rate = 0.01
training_epochs = 25
batch_size = 100
display_step = 1

### modeling ###

activation = tf.nn.softmax(tf.matmul(x, W) + b)

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y * tf.log(activation), reduction_indices=1))

optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cross_entropy)

init = tf.initialize_all_variables()

sess = tf.Session()
sess.run(init)

### training ###

for epoch in range(training_epochs) :

    avg_cost = 0
    total_batch = int(mnist.train.num_examples/batch_size)

    for i in range(total_batch) :

        batch_xs, batch_ys =mnist.train.next_batch(batch_size)
        sess.run(optimizer, feed_dict={x: batch_xs, y: batch_ys})
        avg_cost += sess.run(cross_entropy, feed_dict = {x: batch_xs, y: batch_ys}) / total_batch

    if epoch % display_step == 0 :
        print "Epoch : ", "%04d" % (epoch+1), "cost=", "{:.9f}".format(avg_cost)

print "Optimization Finished"

### predict number ###

r = random.randint(0, mnist.test.num_examples - 1)
print "Prediction: ", sess.run(tf.argmax(activation,1), {x: mnist.test.images[r:r+1]})
print "Correct Answer: ", sess.run(tf.argmax(mnist.test.labels[r:r+1], 1))

But the problem is how can I make a numpy array like

Adding code:

mnist.test.images[r:r+1]

[[0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0.50196081 0.50196081    0,50196081 0,50196081 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0.50196081 1. 1. 1.    1. 1. 1. 0.50196081 0.25098041 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0.50196081 1. 1. 1. 1.    1. 1. 1. 1. 1. 1.    0.25098041 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0.74901962 1. 1. 1.    1. 0,50196081 0,50196081 0,50196081 0,74901962 1. 1.    1. 0.74901962 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0.50196081 1. 1. 1.    0.74901962 0. 0. 0. 0. 0. 0.    0,50196081 1. 1. 0.74901962 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 1. 1. 1.    0,50196081 0. 0. 0. 0. 0. 0.    0. 0. 0.25098041 1. 1. 0.74901962    0.25098041 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0.74901962 1. 1.    0.74901962 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0.25098041 1. 1.    0.74901962 0. 0. 0. 0. 0. 0.    0. 0. 0. 0.50196081 1. 1.    0.74901962 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0.    0.25098041 1. 1. 0.50196081 0. 0. 0.    0. 0. 0. 0. 0. 0.50196081    1. 1. 0.25098041 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 1. 1. 0.50196081 0.0.    0. 0. 0. 0. 0. 0. 1.    1. 1. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0.25098041 1. 1. 1. 0. 0.    0. 0. 0. 0. 0. 0. 1.    1. 0.50196081 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0.25098041 1. 1. 1. 1. 0. 0.    0. 0. 0. 0. 0. 0.    0,74901962 1. 0,50196081 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0,74901962 1. 1. 1. 0.25098041    0. 0. 0. 0. 0. 0. 0.    0. 0.50196081 1. 1. 0. 0. 0.    0. 0. 0. 0. 0. 0.    0,25098041 0,74901962 1. 1. 1. 1.    0.74901962 0. 0. 0. 0. 0. 0.    0. 0. 0. 0.50196081 1. 1.    0.74901962 0. 0. 0. 0. 0.    0,25098041 0,50196081 1. 1. 1. 1. 1.    1. 0.50196081 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0.    0,74901962 1. 1. 1. 1. 0,50196081    0,50196081 0,74901962 1. 1. 1. 1. 1.    1. 1. 0.50196081 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0.74901962 1. 1. 1. 1.    1. 1. 1. 1. 1. 1. 1.    0,50196081 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0.25098041 1. 1. 1.    1. 1. 1. 1. 0.50196081 0.25098041    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0.    0,50196081 0,50196081 0,50196081 0,50196081 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0. 0. 0. 0. 0. 0.    0. 0.0. 0.]]

OpenCV , numpy , . ( 28x28)

:

image = cv2.imread("img_easy.jpg")
resized_image = cv2.resize(image, (28, 28))
<255 > 255 [255 255 255] [255 255 255] [255 255 255] [255 255 255] [255 255 255]] <255 255 255] [255 255 255]..., [255 255 255] [255 255 255] [255 255 255]] <255 255 255] [255 255 255]..., [255 255 255] [255 255 255] [255 255 255]]

...,

<255 255 255] [255 255 255]..., [255 255 255] [255 255 255] [255 255 255]] <255 255 255] [255 255 255]..., [255 255 255] [255 255 255] [255 255 255]] <255 255 255] [255 255 255]..., [255 255 255] [255 255 255] [255 255 255]]]

, ('resized_image') Tensorflow. ,

:

### predict number ###

print "Prediction: ", sess.run(tf.argmax(activation,1), {x: resized_image})
print "Correct Answer: 9"

.

ValueError: (28, 28, 3) u'Placeholder_2: 0 ', ' (?, 784) '

,

1) , , ( , numpy [784])

2) , ?

.

, , .

+4

Source: https://habr.com/ru/post/1651744/


All Articles