2017-01-25 4 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 

Je veux utiliser tensorflow ou tout ce qui est nécessaire pour prédire quel numéro est dans cette image recadrée afin que je puisse continuer à le faire jusqu'à ce que tous les numéros peuvent être prédit.Python - Comment utiliser MNIST pour prédire une np.darray avec une forme différente

Les propriétés du tableau sont assez différentes de la base de données MNIST car il ne s'agit pas d'une image 28x28.

Y a-t-il un moyen pour que je puisse comprendre des transformations linéaires pour le faire pour moi ou quelque chose comme ça?

Merci

+0

L'utilisation d'un modèle formé sur MNIST est-elle importante? Vous pouvez utiliser l'une des bibliothèques pour la reconnaissance optique de caractères (OCR) disponible pour Python pour atteindre le même résultat beaucoup plus facilement à la place. Surtout compte tenu du fait que vos numéros ne sont pas écrits à la main. –

+0

@MartinValgur toutes les réponses qui résoudraient ce problème seraient super utiles mais ce serait vraiment génial si je pouvais apprendre à adapter les trucs MNIST pour reconnaître les nombres d'une autre source. BTW J'ai essayé pytesseract et j'ai fini avec beaucoup de numéros inégalés. – EduGord

Répondre

1

Vous pouvez ajouter une opération de modification de taille avant la première circonvolution:

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

Pour que peuvent accepter les différentes tailles d'image. Assurez-vous que votre tableau d'entrée a la forme:

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

Merci pour votre réponse, mais je ne sais pas comment mettre en œuvre ce que vous avez dit. Je suis désolé mais je n'ai pas d'expérience en Python et Tensorflow. J'ai essayé: 'url = 'http: //static.bn-static.com/pg/0rmrKX8jCvpmF8b7ab+coivEApi2iNNpgVTrfyFFA0g ==. Gif'' ' img = Image.open (urllib.request.urlopen ((url))) ' ' img = img.convert ('1'). Convert ('L') #convertir en niveaux de gris' 'data2 = img.crop ((7,0,14,15))' 'x = tf .image.resize_images (data2, [28,28]) ' Mais j'obtiens: ValueError: L'argument doit être un tenseur dense: - a la forme [15, 7], mais voulu []. – EduGord