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

と出力されました。認識できました。

この記事が気に入ったらサポートをしてみませんか?