2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonで手書き数字を識別する人工知能を簡単につくってみた。#Pythonの練習

Posted at

事前準備

手順1:4つのライブラリをインストール

・scikit-learn:機械学習のライブラリ
・scipy:scikit-learnが計算するためにつかう科学計算のライブラリ
・numpy:画像データを数値リストに変換するためにつかう数値計算のライブラリ
・matplotlib:数値リストを画像として出力する

py -m pip install numpy
py -m pip install scipy
py -m pip install scikit-learn
py -m pip install matplotlib

学習用のデータを読み込む

学習用データを確認しよう

今回は教師あり学習に含まれるため、
学習をさせるには、手書きの数字と答えのペアデータが大量に必要ですが、sklearnにはすでに学習用のデータがあるため、これを使います。

では、どのような学習データが入っているのか、見てみましょう。

digitsData1.py
import sklearn.datasets

digits = sklearn.datasets.load_digits()

print("データの個数=",len(digits.images))
print("画像データ="+"\n",digits.images[0])
print("何の数字か=",digits.target[0])

#datasets.load_digits() は、Scikit-learnライブラリで提供されている関数で、手書き数字(digits)のデータセットをロードするために使用します。

実行結果

image.png

#0から9までの手書きの数字が8×8ピクセルの画像として提供されておr、0が一番明るい色になります。

matplotlibを用いて、数値データを画像化しよう

digitsImage1.py
import sklearn.datasets
import matplotlib.pyplot as plt

digits = sklearn.datasets.load_digits()

plt.imshow(digits.images[0], cmap="Greys")
    #数値データをグレーの濃淡画像にする。
plt.show()
    #作ったがぞうを表示する。

image.png

数値予想プログラムを作ってみよう

プログラムの内容は以下になります。
imageToData関数は数字の画像を数値リストに変換し、それを受け取ったpredictDigits関数がどの数字化を予測します。

predictDigits.py
import sklearn.datasets
import sklearn.svm
from PIL import Image  # Imageモジュールをインポート
import numpy

# 手書き数字のデータセットを読み込む
digits = sklearn.datasets.load_digits()

# 画像ファイルを数値リストに変換する。
def imageToData(filename):
    grayImage = Image.open(filename).convert("L")  # 画像をグレースケールに変換
    grayImage = grayImage.resize((8, 8), Image.LANCZOS)  # LANCZOSを使用

    numImage = numpy.asarray(grayImage, dtype=float)
    numImage = 16 - numpy.floor(17 * numImage / 256)
    numImage = numImage.flatten()

    return numImage

# 数字を予測する
def predictDigits(data):
    clf = sklearn.svm.SVC(gamma=0.001)
    clf.fit(digits.data, digits.target)

    n = clf.predict([data])
    print("予測=", n)
data = imageToData("2.png")  # ここで画像を指定
predictDigits(data)  # 予測を実行

例: 画像を読み込んで数字を予測する

今回は無料アプリのMediBang Paintを使用し、下図のようなpng画像を自分で書き、実際に予測できるか見てみます。
image.png

結果は、、、

image.png

きちんと予測できてますね!

今回は以上です!ありがとうございました!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?