我剛開始學習python。當我執行下面的代碼時,我得到一個錯誤。它告訴 回溯(最近最後一次通話): 文件 「predict_1.py」,第87行,在 主(sys.argv中[1]) IndexError:列表索引超出範圍sys.argv [1])IndexError:列表索引超出範圍
任何幫助是很大的讚賞。感謝您的閱讀!
#import modules
import sys
import tensorflow as tf
from PIL import Image,ImageFilter
def predictint(imvalue):
"""
This function returns the predicted integer.
The imput is the pixel values from the imageprepare() function.
"""
# Define the model (same as when creating the model file)
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)
init_op = tf.initialize_all_variables()
saver = tf.train.Saver()
"""
Load the model.ckpt file
file is stored in the same directory as this python script is started
Use the model to predict the integer. Integer is returend as list.
Based on the documentatoin at
https://www.tensorflow.org/versions/master/how_tos/variables/index.html
"""
with tf.Session() as sess:
sess.run(init_op)
new_saver = tf.train.import_meta_graph('model.ckpt.meta')
new_saver.restore(sess, "model.ckpt")
#print ("Model restored.")
prediction=tf.argmax(y,1)
return prediction.eval(feed_dict={x: [imvalue]}, session=sess)
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
#print(tva)
def main(argv):
"""
Main function.
"""
imvalue = imageprepare(argv)
predint = predictint(imvalue)
print (predint[0]) #first value in list
if __name__ == "__main__":
main(sys.argv[1])
不,_this_ code只會給縮進錯誤。發佈Python代碼時,您需要準確地重現縮進。嚴重縮減的Python代碼是無稽之談。 – khelwood
請閱讀[問]並嘗試提供[mcve] - 目前您的代碼存在嚴重的縮進問題(很可能是由於格式化)。 –
爲什麼我們需要查看所有代碼?它大部分與這個錯誤無關。你是如何運行腳本的?你在命令行中提供了一個合適的'imageprepare'參數字符串嗎? –