【7セグメント編】1文字判定(デジタル数字:0〜9+空白):連続デジタル数字画像認識プログラミング入門(Python・OpenCV・Keras・CNN)

【7セグメント編】1文字判定(デジタル数字:0〜9+空白):連続デジタル数字画像認識プログラミング入門(Python・OpenCV・Keras・CNN)

 

動画:【4桁 – 7セグメント編】連続デジタル数字画像認識プログラミング入門(Python・OpenCV・Keras・CNN)

 

 

【Python機械学習入門】高精度の自作OCRを作ろう
7セグメントデジタル連続数字画像認識AI:1桁〜4桁 – 静止画トリミング編(7 Segment Digits Training)

視聴時間:30分36秒

使い方がわからない方は動画の該当箇所をご視聴いただけますと幸いです。

 




 

【動画の内容】

0:00 はじめに – 7セグメントデジタル数字OCRについて
3:14 ステップ1 – 学習済みモデルの作成
9:58 ステップ2 – 1文字判定 7セグメントデジタル数字 ← ここ
16:24 ステップ3 – 1桁〜4桁の連続文字認識+再学習
29:14 おわりに – AIを賢く 

 

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

既存のOCRプログラムで7セグメントのデジタル数字認識をしてみても、思ったよりも上手く行かない経験をされる方もいるのではないかと思います。
一連のプログラムが、これから、計量器や時計、温度計をはじめとしたデジタル数字認識に挑戦したい方の参考になることがありましたら幸いです。

7 Segment Edition
:Single character recognition.
Introduction to Seven Segment Digital Number Display Image Recognition Python Programming.

 

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

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

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

 

 

サンプル学習済みモデル・1文字数字画像・サンプルコードリンク:7セグメント連続デジタル数字画像認識プログラム用

 

 

事前に

【7セグメント編】オリジナル学習済みモデルの作成方法:連続デジタル数字画像認識プログラミング入門(Python・OpenCV・Keras・CNN)

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

 

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


画像設定:モノクロ・グレースケール
大きさの設定:横の幅28 * 縦の高さ28ピクセル
python 3.6.9
tensoflow 2.4.1
keras 2.4.3
ランタイム:GPU

 

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


画像設定:カラー
大きさの設定:横の幅28 * 縦の高さ28ピクセル
python 3.6.9
tensoflow 2.4.1
keras 2.4.3
ランタイム:GPU

 

デジタル数字画像認識用のサンプル画像


7セグメントのデジタル数字画像認識評価用サンプル画像です。
「0〜9」+「blank」(数字が表示されてない場合)の画像があります。

 

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

Keras_CNN_7segment_digits_originaldataset.ipynb | Google Colaboratory
(ファイル – ドライブにコピーを保存後にコピー環境で実行)

 

 

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

 

 

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.

 

 

【7セグメントのデジタル数字1文字認識用:Pythonサンプルコード】

 

 

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

 

 

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

 

 

python 3.6.9
tensoflow 2.4.1
keras 2.4.3
opencv(opencv-python)4.1.2
matplotlib 3.2.2

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

 

 

自前画像で判定(7セグメントのデジタル数字画像)

 

 

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

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

の「model.h5」という名前の学習済みモデルを利用するプログラムになっています。

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

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


#2 各種設定

recognise_image = '1.png' #ここを変更。画像認識したい画像ファイル名。(実行前に認識したい画像ファイルを1つアップロードしてください)
folder = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '']  # 空白の表示に対応させるため、blankのところを「' '」で空白に設定
image_width = 28  # ここを変更。利用する学習済みモデルの横の幅のピクセル数と同じにする。
image_height = 28 # ここを変更。利用する学習済みモデルの縦の高さのピクセル数と同じにする。
color_setting = 1    # ここを変更。利用する学習済みモデルのカラー形式と同じにする。「1」はモノクロ・グレースケール。「3」はカラー。
cv2_color_setting = 0   # ここを変更。学習済みモデルと同じ画像のカラー設定にする。cv2.imreadではモノクロ・グレースケールの場合は「0」。カラーの場合は「1」 。      

#3 各種読み込み

model = load_model('model.h5')  #ここを変更。読み込む学習済みモデルを入れます
#model = load_model('keras_cnn_7segment_digits_gray28*28_model.h5')  #モノクロ・グレー形式の学習済みモデルを読み込む例:color_setting = 1 の学習済みモデルを使う場合  
#model = load_model('keras_cnn_7segment_digits_color28*28_model.h5')  #カラー形式の学習済みモデルを読み込む例:color_setting = 3 の学習済みモデルを使う場合  


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

img = cv2.imread(recognise_image, cv2_color_setting)   
img = cv2.resize(img, (image_width, image_height))
plt.imshow(img)
plt.gray()  #ここを変更。カラーの場合は「plt.gray()」を消す。モノクロ・グレースケールの場合は「plt.gray()」が無いと変な色になります。
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は「', folder[i], '」の確率を', int(accuracy * 100), '% と予測しました。')

print('-------------------------------------------------------')
print('予測結果は、「', folder[result.argmax()],'」です。')
print(' \n\n * 「確率精度が低い画像」や、「間違えた画像」を再学習させて、オリジナルのモデルを作成してみてください。')
print(' \n * 「間違えた画像」を数枚データセットに入れるだけで正解できる可能性が向上するようでした。')
print(' \n * 「0」と「」(blank)の認識で迷う傾向があるようです。')

 

続いて、作成した7セグメントデジタル数字の学習済みモデル「model.h5」を使い、1桁〜4桁の画像認識をさせてみましょう。

 

【7セグメント編-手動抽出OCR】連続文字判定(デジタル数字:4桁連続数字)+再学習:連続デジタル数字画像認識プログラミング入門(Python・OpenCV・Keras・CNN)

 

【7セグメント編-手動抽出OCR】連続文字判定(デジタル数字:4桁連続数字)+再学習

 

 

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

 

【4桁 – 7セグメント編】連続デジタル数字画像認識プログラミング入門講座(Python・OpenCV・Keras・CNN)| 一覧ページ