shoeisha様よりコピーしました
<predictDigits.py>
数字の画像を読みとって、機械学習でなんの数字か
推測するというプログラムです。
grayImage = PIL.Image.open(filename).convert("L")
この行でつまづきました。
ファイルを開いて、白黒データーになおしているらしいことは
わかったのですが、PIL という関数と、変換後の
画像はどうなっているのか、見たくなりました
PILを取り出し表示させてみました。
画像も適当にコピーして、いざ▷再生 表示しません
どうやら img.show()はシステムの標準画像ビューワーを動かすこと
PearLinux はArk よく知らんのが設定され、うまく起動してもArkはプラグインがないので
表示できませんなどといいます。
なら表示ビューワーを変えてしまえということで、Feh というビューワーを入れました
yay -S Feh
インストールできました。
その後 システム設定 →アプリケーション →ファイルの関連付け→▶image bmp、png を選んで
アプリケーションの優先順位をFehにしました。
ようやく表示、明日はPILで加工してみようと。
<PILsamp01.py>
## Pillow
from PIL import Image
## 画像の読み込み
img = Image.open("Lenna.bmp")
img.show()
<predictDigits.py>
import sklearn.datasets
import sklearn.svm
import PIL.Image
import numpy
# 画像ファイルを数値リストに変換する
def imageToData(filename):
# 画像を8x8のグレースケールに変換
grayImage = PIL.Image.open(filename).convert("L")
grayImage = grayImage.resize((8,8),PIL.Image.Resampling.LANCZOS)
# 数値リストに変換
numImage = numpy.asarray(grayImage, dtype = float)
numImage = 16 - numpy.floor(17 * numImage / 256)
numImage = numImage.flatten()
return numImage
# 数字を予測する
def predictDigits(data):
# 学習用データを読み込む
digits = sklearn.datasets.load_digits()
# 機械学習する
clf = sklearn.svm.SVC(gamma = 0.001)
clf.fit(digits.data, digits.target)
# 予測結果を表示する
n = clf.predict([data])
print("予測=",n)
# 画像ファイルを数値リストに変換する
data = imageToData("6.png")
# 数字を予測する
predictDigits(data)