[sklearn] SVMでillustratorで書いた数字を判定しよう

まずイラレで文字画像を作ります。


それを学習データから判定します。

import cv2
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)
	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("2.png")
print("2.png = " + str(n))
n = predict_digit("5.png")
print("5.png = " + str(n))
n = predict_digit("8.png")
print("8.png = " + str(n))

$ python3 app.py
2.png = 3
5.png = 7
8.png = 3

おいおいおい、全然合ってないじゃん
まー、2と3、5と7、8と3は似てるといえば似てるけど、せめて一個ぐらい合ってもいいのに。。