Deeplearning!-pythonで。3
ちょっと本を離れて、機械学習ライブラリのscikit-learnを使って雰囲気を感じてみます。
手書きの数字を認識させてみます。
googleのcolabを使います。ライブラリはすぐに使える状態です。
学習します。
from sklearn.model_selection import train_test_split
from sklearn import datasets,svm,metrics
from sklearn.metrics import accuracy_score
digits = datasets.load_digits()
x = digits.images
y = digits.target
#二次元配列を一次元配列に変換
x = x.reshape((-1,64))
# データを学習用とテスト用に分割する
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)
# データを学習
clf = svm.LinearSVC()
clf.fit(x_train, y_train)
from sklearn.externals import joblib
joblib.dump(clf, 'digits.pkl')
で保存します。
次に手書き文字を認識させてみます。画像で保存しました。(test.jpg)
を認識させてみます。まずこの画像をcolabにアップロードします。
赤丸をクリックするとファイルがアップロードできます。こんな感じ。
アップロードをクリックして手書きした画像(test.jpg)を選択してファイルをアップロードします。これで準備は終わりです。
認識してみます。cv2をimportして、
import cv2
from sklearn.externals import joblib
def predict_digit(filename):
clf = joblib.load("digits.pkl")
#画像を読み込む
my_img = cv2.imread(filename)
#グレースケールに変換する
my_img = cv2.cvtColor(my_img, cv2.COLOR_BGR2GRAY)
# 8 * 8のサイズに変換する
my_img = cv2.resize(my_img,(8,8))
#白黒反転する
my_img = 15 - my_img // 16
#二次元を一次元に変換
my_img = my_img.reshape((-1,64))
res = clf.predict(my_img)
return res[0]
n = predict_digit("test.jpg")
print("test = " + str(n))
実行すると、
test = 5
と出力されました。認識できました。
この記事が気に入ったらサポートをしてみませんか?