【日本語 – 手書き編】1文字判定(ひらがな・カタカナ・漢字・ローマ字・、点・。丸)

【日本語 - 手書き編】1文字判定(ひらがな・カタカナ・漢字・ローマ字・、点・。丸)機械学習

 

【動画】日本語 – 手書き編:1文字判定

 

 

【日本語 – 手書き編 #2】
1文字判定(平仮名・片仮名・漢字・ローマ字・点・丸)
– Japanese handwritten character OCR :Image recognition


視聴時間:8分5秒

 




 

【動画の内容】

ステップ2 – OCRプログラミングのための1文字判定(日本語手書き)
0:00 事前準備
0:39 自前画像で判定
6:49 画像認識精度向上へ向けて

 

機械学習モデルのディープラーニング(深層学習)でおなじみの「畳み込みニューラルネットワーク」(CNN:Convolutional Neural Network)で、日本語画像(ひらがな・カタカナ・漢字・ローマ字・、点・。丸)のオリジナルデータセットを学習させた学習済みモデルを使って、1文字の画像認識のできる簡単なプログラムを作成してみました。

既存のOCRプログラムで日本語の手書き文字の画像認識をしてみても、思ったよりも上手く行かない経験をされる方もいるのではないかと思います。
一連のプログラムが、これから、日本語をはじめとしたOCRに挑戦したい方の参考になることがありましたら幸いです。

Japanese handwritten character OCR Edition
:Single character recognition.
Introduction to Continuous Japanese handwritten character Image Recognition Python Programming.

 

今回のプログラムは、以前投稿させていただいた

【コード解説】自作画像認識AI:Keras・CNN・Pythonオリジナルデータセット対応の機械学習サンプルコード

のオリジナルデータセットで自作画像認識AIを作れるプログラムを改変して作っています。そのため、AIプログラムの詳細を知りたい方は、記事ページを参照ください。Google Colaboratoryですぐに試せる、サンプルコードと学習用のPDFなども無料公開しています。

 

 

サンプル学習済みモデル・1文字日本語手書き文字画像・サンプルコードリンク:日本語の連続文字画像認識プログラム用

 

 

事前に

【ステップ1】
日本語手書き文字画像認識用オリジナル学習済みモデルの作成(ひらがな・カタカナ・漢字・、点・。丸)
【日本語 – 手書き編】OCR用のオリジナル学習済みモデルの作成方法(ひらがな・カタカナ・漢字・ローマ字・、点・。丸)

の手順を実行し、学習済みモデルを作成した状態でサンプルコードを実行するか、日本語手書き文字画像の学習済みモデル作成プログラムで作成したサンプル学習済みモデル(「〜.h5」のファイル)をGoogle Colaboratoryにアップロードしてからサンプルコードを実行してください。

 

モノクロ・グレースケール版の学習済みモデル


画像設定:モノクロ・グレースケール
大きさの設定:横の幅14 * 縦の高さ14ピクセル

 

カラー版の学習済みモデル


画像設定:カラー
大きさの設定:横の幅14 * 縦の高さ14ピクセル

 

日本語手書き文字画像認識用のサンプル画像


日本語手書き文字画像認識評価用サンプル画像です。
漢字(日)・ひらがな(い)・カタカナ(プ)・ローマ字(R)・丸(。)の画像があります。

 

すぐに使えるGoogle Colaboratoryサンプルコードリンク

Keras-CNN-Japanese-handwritten-character-text-originaldataset.ipynb | Google Colaboratory
(ファイル – ドライブにコピーを保存後にコピー環境で実行。プログラムを動かすにはGoogleアカウントでログインする必要があります)

* 2021年6月に確認時点では、macOS Big Sur バージョン 11.4(20F71)・Firefox バージョン 89.0(64ビット)のブラウザの環境では、Google Colaboratoryに画像ファイル以外のアップロードでエラーが起きるようでした。
そのため、チュートリアルで利用する
・オリジナルデータセットの圧縮ファイル(ZIP形式ファイル)
・学習済みモデル(.h5形式のファイル)
等のアップロードでエラーが出る場合には、その他のブラウザ(例.Macの場合はSafari。Mac・Windows共通のブラウザ Google Chrome など)でも試してみてください。

 

 

【プログラムのライセンス】

 

 

The MIT License

Copyright 2021 child programmer

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

 

 

【日本語手書き1文字認識用:Pythonサンプルコード】

 

 

KerasでCNN機械学習。自作・自前画像のオリジナルデータセットで画像認識入門

 

 

バージョン情報(Python・各種ライブラリ)

 

 

python 3.7.10
tensoflow 2.5.0
keras 2.5.0
opencv(opencv-python)4.1.2
matplotlib 3.2.2

ローカル環境で、指定したバージョンのインストールが難しい場合、Python・TensorFlow・Keras以外は最新のバージョンを入れてみてください。

 

 

自前画像で判定(手書き日本語画像)

 

 

実行前に認識したい画像ファイルを1つアップロードしてください。
デフォルトでは、

:画像のカラーモード – モノクロ・グレースケール
:学習時の画像の大きさ – 横の幅14・縦の高さ14ピクセル

の「model.h5」という名前の学習済みモデルを利用するプログラムになっています。
必ず、「③ 用意した自前画像で学習(畳み込みニューラルネットワーク:CNN)」までの手順を実行後にプログラムを実行します。

#1 ライブラリのインポート等

from keras.models import load_model
import os
import cv2 
import matplotlib.pyplot as plt
import numpy as np


#2 各種設定

recognise_image = '日.png' # ここを変更
                           # 画像認識したい画像ファイル名。(実行前に認識したい画像ファイルを1つアップロードしてください)
                           # エラーが出る場合は、「パスをコピー」の利用や、「ファイル名の変更」でファイル名をコピー&ペーストしてみてください
                           # 文字形式の兼ね合いでエラーが出る時もあるようでした
                           # 直接「プ」を入力するとエラーがでました。右端の「」内の文字をコピー&ペーストで成功しました:「プ.png」

image_width = 14   # ここを変更
                   # 利用する学習済みモデルの横の幅のピクセル数と同じにする
image_height = 14  # ここを変更
                   # 利用する学習済みモデルの縦の高さのピクセル数と同じにする
color_setting = 1  # ここを変更。利用する学習済みモデルのカラー形式と同じにする
                   # 「1」はモノクロ・グレースケール。「3」はカラー。


#3 各種読み込み

model = load_model('model.h5')  # ここを変更
                                # 読み込む学習済みモデルを入れます

# モノクロ・グレー形式の学習済みモデルを読み込む例:color_setting = 1 の学習済みモデルを使う場合  
#model = load_model('keras_cnn_japanese_handwritten_gray14*14_model.h5')  

# カラー形式の学習済みモデルを読み込む例:color_setting = 3 の学習済みモデルを使う場合  
#model = load_model('keras_cnn_japanese_handwritten_color14*14_model.h5') 


#4 画像の表示・各種設定等

if color_setting == 1:
  img = cv2.imread(recognise_image, 0)   
elif color_setting == 3:
  img = cv2.imread(recognise_image, 1)
img = cv2.resize(img, (image_width, image_height))
plt.imshow(img)
if color_setting == 1:
  plt.gray()  
  plt.show()
elif color_setting == 3:
  plt.show()


img = img.reshape(image_width, image_height, color_setting).astype('float32')/255 


#5 予測と結果の表示等

prediction = model.predict(np.array([img]))
result = prediction[0]

for i, accuracy in enumerate(result):
  print('画像認識AIは「', os.path.basename(folder[i]), '」の確率を', int(accuracy * 100), '% と予測しました。')

print('-------------------------------------------------------')
print('予測結果は、「', os.path.basename(folder[result.argmax()]),'」です。')
print(' \n\n * 「確率精度が低い画像」や、「間違えた画像」を再学習させて、オリジナルのモデルを作成してみてください。')
print(' \n * 「間違えた画像」を数枚データセットに入れるだけで正解できる可能性が向上するようでした。')
print(' \n * 何度も実行すると「WARNING:tensorflow」が表示されますが、結果は正常に出力できるようでした。')

 

【出力結果例】

出力結果例:【日本語 - 手書き編】1文字判定(ひらがな・カタカナ・漢字・ローマ字・、点・。丸)

 

【次のステップ】

作成した学習済みモデル「model.h5」を使って、OCRを開発するために、まずは、以下のプログラムで文字検出に挑戦

【ステップ3】
日本語認識:横書き・縦書き文字検出
シンプルな横書き・縦書き文章の日本語手書き文字検出(ブロック→行と列→個別文字)

 

 

by 子供プログラマー | プログラミング入門ウェブ教室

 

【日本語手書きOCR編】連続文字画像認識プログラミング入門(Python・OpenCV・Keras・CNN)| 一覧ページ