import
1import tkinter.filedialog as fd 2import PIL.Image 3import PIL.ImageTk 4import sklearn.datasets 5import sklearn.svm 6import numpy #画像を数値リストに変換する時に必要 7 8def imageToData(filename): 9 #画像を8*8のグレースケールに変換 10 11 grayImage = PIL.Image.open(filename).convert("L")#色がついていると誤認識してしまうため白黒にしている。 12 grayImage = grayImage.resize((8,8),PIL.Image.ANTIALIAS) 13 14 #画像をラベルに表示 15 #dispImage = PIL.ImageTk.PhotoImage(grayImage) 16 dispImage = PIL.ImageTk.PhotoImage(grayImage.resize((300,300)))#縮小したものを拡大している。 17 imageLabel.configure(image =dispImage) 18 imageLabel.image=dispImage 19 20 #数値リストに変換する処理の追加 21 numImage = numpy.asarray(grayImage,dtype = float) 22 numImage = numpy.floor(16-16*(numImage/256)) 23 numImage = numImage.flatten() 24 25 return numImage 26 27def predictDigits(data): 28 #常習用データを読み込む 29 digits = sklearn.datasets.load_digits() 30 31 #機械学習を行う 32 clf = sklearn.svm.SVC(gamma = 0.001) 33 clf.fit(digits.data,digits.target) 34 35 #予測結果を表示する 36 n = clf.predict([data]) 37 textLabel.configure(text="この画像は"+str(n)+"です。") 38 39 40def openFile(): 41 fpath= fd.askopenfilename() 42 if fpath: 43 #画像ファイルを数値リストに変換する。 44 data = imageToData(fpath) 45 46 47root = tk.Tk() 48root.geometry("400x400") 49btn = tk.Button(root,text="ファイルを開く",command = openFile) 50imageLabel = tk.Label() 51 52btn.pack() 53imageLabel.pack() 54 55#予測結果を表示するラベル 56textLabel1= tk.Label(text="手書きの数字を認識します!") 57textLabel1.pack() 58tk.mainloop() 59コード
現在、python勉強中で画像の数値を予測するプログラムを作成しています。
数値リストに変換する処理の部分で、
コード #数値リストに変換する処理の追加 numImage = numpy.asarray(grayImage,dtype = float) numImage = numpy.floor(16-16*(numImage/256)) numImage = numImage.flatten()
三つ目の8次元のリストを1次元配列に変換するのは何故なのでしょうか?
8次元のままreturnを返しても処理はできないのでしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/21 07:21
2021/11/21 08:10
2021/11/21 10:43 編集
2021/11/22 12:40