NiceCore でPython 02 | kazenokinositaのブログ

kazenokinositaのブログ

Telloは少しお休みで、pythonそしてPearOSとたわむれてます

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で加工してみようと。

vscode 表示されたところ

 

 

<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)