2017-09-06 5 views
0

J'essaie de prédire les chiffres manuscrits en utilisant MNIST comme jeu de données & python. En ce moment, je dois donner des images déjà recadrées en entrée du programme. Un traitement supplémentaire pour le format de jeu de données MNIST est effectué en utilisant la fonction suivante, mais comment recadrer automatiquement une image aléatoire donnée en entrée?python - Recadrage d'une image d'un chiffre manuscrit

def imageprepare(argv): 
    """ 
    This function returns the pixel values. 
    The imput is a png file location. 
    """ 
    im = Image.open(argv).convert('L') 
    width = float(im.size[0]) 
    height = float(im.size[1]) 
    newImage = Image.new('L', (28, 28), (255)) #creates white canvas of 28x28 pixels 

    if width > height: #check which dimension is bigger 
     #Width is bigger. Width becomes 20 pixels. 
     nheight = int(round((20.0/width*height),0)) #resize height according to ratio width 
     if (nheigth == 0): #rare case but minimum is 1 pixel 
      nheigth = 1 
     # resize and sharpen 
     img = im.resize((20,nheight), Image.ANTIALIAS).filter(ImageFilter.SHARPEN) 
     wtop = int(round(((28 - nheight)/2),0)) #caculate horizontal pozition 
     newImage.paste(img, (4, wtop)) #paste resized image on white canvas 
    else: 
     #Height is bigger. Heigth becomes 20 pixels. 
     nwidth = int(round((20.0/height*width),0)) #resize width according to ratio height 
     if (nwidth == 0): #rare case but minimum is 1 pixel 
      nwidth = 1 
     # resize and sharpen 
     img = im.resize((nwidth,20), Image.ANTIALIAS).filter(ImageFilter.SHARPEN) 
     wleft = int(round(((28 - nwidth)/2),0)) #caculate vertical pozition 
     newImage.paste(img, (wleft, 4)) #paste resized image on white canvas 

    #newImage.save("sample.png") 

    tv = list(newImage.getdata()) #get pixel values 

    #normalize pixels to 0 and 1. 0 is pure white, 1 is pure black. 
    tva = [ (255-x)*1.0/255.0 for x in tv] 
    return tva 

Répondre

0

Vous pouvez utiliser les contours OpenCV pour localiser les chiffres potentiels au sein de votre image réelle, certaines des techniques dépendra des données réelles que vous travaillez. Il y a un exemple d'emplacement de candidat de chiffre à http://www.pyimagesearch.com/2017/02/13/recognizing-digits-with-opencv-and-python/ qui peut vous donner quelques indicateurs. Cependant, vous risquez d'avoir des problèmes avec certains scripts car je pense que dans tous les scripts européens, chaque chiffre est supposé être contigu et distinct, mais je ne suis pas sûr que les deux points s'appliquent à tous les scripts.