スポンサーリンク

【Python】Kerasでひらがな画像の文字分類の流れ。

Python
スポンサーリンク

今回の記事はKerasを使って日本語のひらがな画像「あ」「い」を文字分類する流れをご紹介する記事です。データの準備からモデルの作成、モデルの学習までの一連の流れを紹介していきます。初学者でもわかるように動くサンプルコードと合わせて解説していきますので是非参考にしてみてください。

スポンサーリンク

データの準備

必要画像数は、経験上各クラス100枚程度必要です。

画像は適当に手書き、もしくはフォントを変えて、スクショなどを撮り10枚程度まずは作成します。この画像を、Kerasメソッドで画像水増しを行なっていきます。

画像の水増し方法は様々ありますが、Kerasの基本的な水増しは下記などがありますので参照してください。

Kerasを使って学習データの水増し。

├── a
│   └── a.jpg
└── i
    └── i.jpg

モデル学習

モデル学習は下記のコードで実施できます。

import keras
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.layers.core import Dense, Dropout, Activation, Flatten
import numpy as np
from sklearn.model_selection import train_test_split
from PIL import Image
import glob



folders = ['a','i']
print("147,151,149,152,154,153,154,137,149,153,158,158,157,157,154,152")
X = []
Y = []

image_size = 50
# 対象Aの画像
index = 0
for folder in folders:
    files = glob.glob('./test/' + str(folder) + '/*.JPG')
    print(files)
    for file in files:
        print(file)
        image = Image.open(file)
        image = image.convert("RGB")
        image = image.resize((image_size, image_size))
        data = np.asarray(image)
        X.append(data)
        Y.append(index)
    index = index + 1
X = np.array(X)
Y = np.array(Y)


X = X.astype('float32')
X = X / 255.0

# 正解ラベルの形式を変換
Y = np_utils.to_categorical(Y, 16)

# 学習用データとテストデータ
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.20)

# CNNを構築
model = Sequential()
 
model.add(Conv2D(32, (3, 3), padding='same',input_shape=X_train.shape[1:]))
model.add(Activation('relu'))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
 
model.add(Conv2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
 
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(16))
model.add(Activation('softmax'))
 
# コンパイル
model.compile(loss='categorical_crossentropy',optimizer='SGD',metrics=['accuracy'])

history = model.fit(X_train, y_train, epochs=200)
print("完了")

model.save('/only_test/model.hdf5')
print("保存完了")

まず初めに必要なモジュールのインポートがあって、その後に画像の読み込みを行っております。画像の読み込み時はPILのImageを使って読み込んでおります。読み込み時に配列として読み込み、データYは成果ラベルが格納されています。

この読み込んだ画像の配列データをmodel学習させていきます。

モデルの作成方法はSequential関数でネットを定義し、中間層にあたる関数メソッドをaddで追加します。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

Python
スポンサーリンク
スポンサーリンク

コメント

  1. […] ここまで来れればあとは自作AIモデルの作成や既存のAIモデルを利用して、画像の分類を行ってみましょう。私の記事でも多数書いておりますがまずはmnistモデルで数字画像を分類してみたり、こちらの記事のように「自作AIモデルでひらがなの「あ」「い」を分類してみる」などを行ってみましょう。 […]

  2. […] 「日本語文字を画像分類する方法」 […]

  3. […] 「【Python】日本語の文字分類を行う方法ご紹介。」 […]

タイトルとURLをコピーしました