2017-01-25 34 views
0
import numpy as np 
import scipy.ndimage 
from PIL import Image 
import urllib.request 

url = 'http://static.bn-static.com/pg/0rmrKX8jCvpmF8b7ab+coivEApi2iNNpgVTrfyFFA0g==.gif' 
img = Image.open(urllib.request.urlopen((url))) 
img = img.convert('1').convert('L') #convert to graysclae 

# Optional to visualize it all: 
# plt.imshow(img) 
# plt.show() 
# a = array(img) 
# a = a.transpose() 
# np.place(a,a==0,1) 
# np.place(a,a==255,0) 

# Croping only one number out of it and vectorize it with binary values. 
data = array(img.crop((7, 0, 14, 15))) 
np.place(data, data == 0, 1) 
np.place(data, data == 255, 0) 
plt.imshow(data, cmap=plt.cm.binary) 
# visualize crop 
plt.show() 
# visualize matrix 
data 

我想用Tensorflow或任何需要预测哪些号码是在这种剪裁的图像,所以我可以继续这样做,直到所有的数字可以预料到的。Python的 - 如何使用MNIST预测np.darray具有不同的形状

数组属性与MNIST数据库有很大不同,因为这不是28x28图像。

有没有什么办法可以找出线性变换来为我或某物做些什么?

感谢

+0

正在使用MNIST培训的模型很重要吗?您可以使用任何可用于Python的光学字符识别(OCR)库来更轻松地实现相同的结果。特别是考虑到你的号码不是手写的。 –

+0

@MartinValgur任何解决这个问题的答案都会非常有帮助,但如果我能够学习如何调整MNIST的内容来识别来自其​​他来源的数字,这将是非常好的。 顺便说一句我已经尝试pytesseract和我结束了许多不匹配的数字。 – EduGord

回答

1

您可以第一卷积之前增加一个调整操作:

x = tf.image.resize_images(x, [28, 28]) 

因此,可以接受不同的图像大小。确保你的输入阵列有形状:

x.get_shape().as_list() == [ None, width, height, channels] 
+0

感谢您的回复,但我不确定如何实施您所说的话。我很抱歉,但我没有在Python和Tensorflow方面经验丰富。 我试过了: 'url ='http://static.bn-static.com/pg/0rmrKX8jCvpmF8b7ab+coivEApi2iNNpgVTrfyFFA0g ==。gif'' 'img = Image.open(urllib.request.urlopen((url)) )' 'img = img.convert('1')。convert('L')#convert to grayys' 'data2 = img.crop(((7,0,14,15))' 'x = tf .image.resize_images(data2,[28,28])' 但我得到:ValueError:参数必须是一个稠密张量: - 得到形状[15,7],但想要[]。 – EduGord

相关问题