作成日: 2021/09/24 更新日: 2023/03/25 サイトの紹介と使い方
概要
- 1ページに複数行書かれた手書きの日本語文字を人工知能によって認識するシステムを構築したいと思います。
- このシステムは、完全自動の変換システムではなく、手作業との併用を想定しています。
現時点で想定される問題点
- 文字種とその数が把握できていません。
- 所有するコンピュータの性能が低いので、モデルを分割して行う必要がありますが、それを合成できるか確認が必要です。(複数モデルによる認識システム)
- 1行の文章の画像がある時、文字間を自動認識できるプログラムを書けるか確認が必要です。
- 行間の認識は、手作業でアノテーションする予定です。
- 1文字にどのくらいの学習用画像が必要か分かりません。
- 特に、漢字の場合にモデルに必要なレイヤーの種類と数が分かりません。
- 似た(人の目でも同じ文字と認識される)文字の扱いが問題です。
ステップ
- 第1ステップとして、一人の筆跡でシステムの検証を行います。
- 第2ステップとして、複数人の筆跡でシステムの運用検証を行います。
- 第3ステップとして、追加筆跡システムとその検証システムを作って、実運用の可能性を確かめます。
- 認識率とシステム構築の進捗を、複数回に分けて行います。(トライ&エラーによってシステムを完成させます。)
文字種と数
- 数字-10種類
- ひらがな-46種類
- カタカナ-46種類
- アルファベット(小文字)-26種類
- アルファベット(大文字)-26種類
- 記号-20種類
- 漢字-2136種類
- コンピュータに登録されているJISコードは1万を超えます。
- アルファベットの筆記体は、日本語とは別の難しさがあるので、今回は、除外します。
このシステムが対象とする文字種と数
- 上の見出し「文字種と数」の1-7を対象にします。
- すると、10+46+46+26+26+20+2136=2310文字種数になります。
画数別の漢字数
- 1画-2
- 2画-12
- 3画-31
- 4画-69
- 5画-99
- 6画-114
- 7画-153
- 8画-204
- 9画-193
- 10画-218
- 11画-215
- 12画-211
- 13画-172
- 14画-116
- 15画-121
- 16画-78
- 17画-43
- 18画-39
- 19画-24
- 20画-11
- 21画-6
- 22画-3
- 23画-1
- 24画-0
- 25画-0
- 26画-0
- 27画-0
- 28画-0
- 29画-1
学習モデルの合成(複数モデルの実装)
- モデルは、グループごとに作成します。
- 当面、数字グループ、カタカナグループ…に分類します。
文字間を自動で認識するプログラムの作成
- とりあえず、仮に命名した移動認識法を作ってみます。
- 基準となる文字の横のサイズを手動で設定します。
単位はピクセル数で、最低値と最大値を設定します。
この範囲で最も認識率の高い文字を採用します。 - 左側から、順番に認識させていきますが、行全体で考えれば改良の余地はありそうです。
- 認識率の合格確率を設定します。この合格確率を超えたら、移動認識を中止します。
- 不合格確率と再移動認識の最低値と最大値を設定します。
- それでも、不合格確率を超えなければ、認識不可文字と判定します。
行間認識
- 1行ごとに手作業で、矩形のアノテーションを付加します。
- 工数の把握が必要になります。
学習用画像
- システムの進捗により変更が必要ですが、1文字50画像を用意したいと思います。
- 50個は、同一の人の筆跡の場合を想定しています。
- サイズなどを考慮して学習用画像を用意したいと思います。
- 対象文字が2290文字種数あるので、x50=114,500画像が必要になります。
モデルの構築
- レイヤー種、レイヤー数の全てが予想できません。
unicode utf8 変換
- pandas でできる?
手順
モデルの実装
ステップ1
- 数字0~9までの手書き文字を60画像ずつ用意します。
- 60の画像を学習・内部評価用50枚、外部評価用10枚に分けます。
- 2,3のためのnumpy変換プログラムを作成します。
- 学習用プログラムを作成します(暫定モデルの作成)。
- 評価用プログラムを作成します。
ステップ2
- カタカナでステップ1と同じ作業を行います。
最後に
- このサイトのコンテンツ中、現在のところ最大のプロジェクトになります。
- 気長にやっていきます。
- もし文字認識が終わったら、音声認識と自然言語認識をやりたいと思っています。