■■■ 序論
作業や売上の日報、棚卸しなど実際業務の現場においては、
・所定フォームを印刷した記入用紙を現場に配布
・現場担当者が用紙に数値などをペンやマジックで手記入
・記入用紙を回収、入力担当者が端末に打ち込み
といったシーンをよく目にしますが、
・配布&回収はロス作業
・記入と打ち込みは重複工数
とみなされ、工数削減を目的として、
方案A:紙記入をやめて現場担当が直接に端末に打ち込み
方案B:手書き記入された数字の自動認識、データ化
などの解決方案例が容易に引き出されると思います。
が、、、(予算無尽蔵な現場は別として・・・)
方案Aは、端末の現場配備に費用がかさんだり、現に手記入で済ませているのに不慣れな画面操作をやらすんかい?といった現場抵抗感を解消(懐柔)するといった点で、実際のところはすぐに容易に着手できるとは言えません。流行りのスマホクラウド入力は手軽ですが、使う限りずっと費用がかかり続けることを忘れてはなりません。
また、
方案Bは、印刷数値であれば簡単かつ安価で実現可能なようですが、
手書きとなるとたとえ数字だけでも簡単にはいきません。
AI-OCRを利用するとすぐにでもできそうですが、たいていは
日本語文字全体の認識ができる
ようになっており、それには専用サーバを設置や、クラウド認識にしたり・・・
数値だけ取り出したい
というニーズには過剰な装備で、
使う限りずっと、それもかなり高額な費用
がかかり続けます。
重要な「数値」、しかし単なる「数字」
だからこそ最小費用でなんとかならんか?
と調査、試用、考察し、確信をもって方法を確定したいと思い立ちました。
■■■ 事前調査
□出典1 ********************************
↑上記出典から勝手引用すると、
・CNN 畳み込みニューラルネットワーク
・RNN 再帰型ニューラルネットワーク
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ディープニューラルネットワークとして,深く何層も畳み込み層や活性化層を経て特徴マップを変換しながら奥へ伝搬していく.その点ではCNNとRNNの両者は共通している.
しかし,RNNでは回帰(再帰)構造を利用し,「同一のパラメータの全結合層」を何度もシーケンシャルに使い回す,再帰型の更新をおこなう.省パラメータを再帰で使い回して,(シンプルに)系列データの変化をモデル化しているのがRNNである.
一方,CNNの主眼は,入力画像の物体認識である.どの物体クラスの2次元パターンが入力画像に映っているかを,小・中・大の空間フィルタを順に適用することで,絞りこんでいく.従って,RNNのように同じ線形を使い回したりはせず,解像度ごとに,そのサイズにあった異なる畳み込みフィルタを学習することになる.
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ということで、数値認識にはCNNが合うらしい。
□出典2 ********************************
↑GoogleCoraboにおいてKeras/Tensorflowを使う方法
◎ GPUが手元になくてもGPU動作させられる。
○ GoogleCoraboにはKeras/Tensorflowがセットされている。
(アップデートで動かない場合もあるそうだ)
KerasはTensorflowを短いコードで扱える。
またCNNとRNNの両方を使える・・・だそうです。
−>初学者がTensorflowを使うならkerasから入れ、とな。
○ MNISTを使うと手軽に学習データを得られる
X 手元のVSCodeで動作させるのではない
GoogleCorabo使ってないし、Googleに左右されたないし。
VSCodeで動作可能させる方法は別途調査。
・上記出典2のサンプルコードは流れが参考になる
□出典3 *****************************
↑こちらはより目的的に解説されている。
◎ 画像である手書き数字の「前処理」が勝負の分かれ道だが、
目的がほぼ同一である出典3に記述された手順を引用すればよい。
? 数値認識処理もまたほぼ固定的な方法であるから、その難易度は別として、
出典3のとおりにやればよいはず。
◎ モデル学習はColaboratory上のGPUで行い、そのモデルを保存、
モデルをダウンロード、ローカルPC上でモデルをロード、
手書き数字認識、という流れを使っており、一番手軽な手順を示している。
−>なるほど、そうすればよいのか!!!
具体的な手順
1:CNN構築と学習(ディープラーニング)実行
↑この出典の項目1〜3の部分を参照すればよい。
2:所定フォーム記入済画像の所定箇所から目的の数字部分を抽出
3:数字部分の画像データの前処理
4:CNN構築と学習(ディープラーニング)実行
↑前述1と同じ出典の項目4〜6の部分を参照すればよい。