(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022191777
(43)【公開日】2022-12-28
(54)【発明の名称】画像処理装置、画像処理方法及びプログラム
(51)【国際特許分類】
G06V 30/194 20220101AFI20221221BHJP
G06T 7/00 20170101ALI20221221BHJP
【FI】
G06K9/66
G06T7/00 350C
【審査請求】未請求
【請求項の数】18
【出願形態】OL
(21)【出願番号】P 2021100216
(22)【出願日】2021-06-16
(71)【出願人】
【識別番号】000001007
【氏名又は名称】キヤノン株式会社
(74)【代理人】
【識別番号】110001243
【氏名又は名称】弁理士法人谷・阿部特許事務所
(72)【発明者】
【氏名】世渡 秀和
【テーマコード(参考)】
5B064
5L096
【Fターム(参考)】
5B064AA01
5B064AB03
5B064BA01
5B064CA10
5B064DA20
5B064DA26
5B064DA27
5L096BA08
5L096BA17
5L096CA14
5L096DA02
5L096EA02
5L096EA03
5L096EA07
5L096EA16
5L096FA13
5L096HA11
5L096KA04
(57)【要約】 (修正有)
【課題】実際の筆跡において見られるハネ方に沿った学習画像を生成し、文字認識精度を高めた、手書き文字対応OCR用の学習済モデルを実現する画像処理装置、画像処理方法及びプログラムを提供する。
【解決手段】画像処理装置の学習データ生成部において、学習データの生成処理方法は、手書き文字を一文字単位で表した文字画像における当該手書き文字を構成する線分のうち、手書きによるハネが発生し得る線分を検出する。そして、検出した線分の端部にハネを模した線分を追加する処理を行い、ハネを模した線分が追加された文字画像と正解クラスとを紐付けて、機械学習のための学習データを生成する。
【選択図】
図6
【特許請求の範囲】
【請求項1】
手書き文字を一文字単位で表した文字画像を取得する取得手段と、
前記文字画像における前記手書き文字を構成する線分のうち、手書きによるハネが発生し得る線分を検出する検出手段と、
前記検出手段で検出した線分の端部に、ハネを模した線分を追加する追加手段と、
前記ハネを模した線分が追加された文字画像と正解クラスとを紐付けて、機械学習のための学習データを生成する生成手段と、
を備えることを特徴とした画像処理装置。
【請求項2】
前記検出手段は、
前記文字画像の下部における所定割合の領域において、行毎の連結画素グループ数と各連結画素グループにおける連結画素数を取得し、
行毎の連結画素グループ数の最大値が1であり、各連結画素グループにおける最大連結画素数が閾値以下の場合に、前記領域に存在する線分を、前記ハネが発生し得る線分として検出し、
前記追加手段は、前記検出手段で検出した線分の下端部に、前記ハネを模した線分を追加し、
前記行毎の連結画素グループは、前記手書き文字の正立方向に対して水平な方向において連続して存在する黒画素群を表し、
前記連結画素数は、連結画素グループを構成する黒画素の数を表す、
ことを特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記検出手段は、
前記文字画像の上部における所定割合の領域において、行毎の連結画素グループ数と各連結画素グループにおける連結画素数を取得し、
行毎の連結画素グループ数の最大値が1であり、各連結画素グループにおける最大連結画素数が閾値以下の場合に、前記領域に存在する線分を、前記ハネが発生し得る線分として検出し、
前記追加手段は、前記検出手段で検出した線分の上端部に、前記ハネを模した線分を追加し、
前記行毎の連結画素グループは、前記手書き文字の正立方向に対して水平な方向において連続して存在する黒画素群を表し、
前記連結画素数は、連結画素グループを構成する黒画素の数を表す、
ことを特徴とする請求項1に記載の画像処理装置。
【請求項4】
前記検出手段は、
前記文字画像の右部における所定割合の領域において、列毎の連結画素グループ数と各連結画素グループにおける連結画素数を取得し、
列毎の連結画素グループ数の最大値が1であり、各連結画素グループにおける最大連結画素数が閾値以下の場合に、前記領域に存在する線分を、前記ハネが発生し得る線分として検出し、
前記追加手段は、前記検出手段で検出した線分の右端部に、前記ハネを模した線分を追加し、
前記列毎の連結画素グループは、前記手書き文字の正立方向に対して垂直な方向において連続して存在する黒画素群を表し、
前記連結画素数は、連結画素グループを構成する黒画素の数を表す、
ことを特徴とする請求項1に記載の画像処理装置。
【請求項5】
前記追加手段は、前記ハネを模した線分の角度をランダムに決定して、前記追加を行う、ことを特徴とする請求項2に記載の画像処理装置。
【請求項6】
前記角度は、前記文字画像の真右方向を0℃、真上方向を90℃としたとき、15°~60°の範囲で決定される、ことを特徴とする請求項5に記載の画像処理装置。
【請求項7】
前記追加手段は、前記ハネを模した線分の角度をランダムに決定して、前記追加を行う、ことを特徴とする請求項3に記載の画像処理装置。
【請求項8】
前記角度は、前記文字画像の真右方向を0℃、真上方向を90℃としたとき、135°~225°の範囲で決定される、ことを特徴とする請求項7に記載の画像処理装置。
【請求項9】
前記追加手段は、前記ハネを模した線分の着地点及び描画開始地点を特定し、当該特定された着地点及び描画開始地点に基づき、前記ハネを模した線分の角度を決定して、前記追加を行う、ことを特徴とする請求項4に記載の画像処理装置。
【請求項10】
前記追加手段は、前記特定された着地点と前記特定された描画開始地点とが成す角度を、前記ハネを模した線分の角度に決定する、ことを特徴とする請求項9に記載の画像処理装置。
【請求項11】
前記追加手段は、前記ハネを模した線分の長さをランダムに決定して、前記追加を行う、ことを特徴とする請求項5乃至8のいずれか一項に記載の画像処理装置。
【請求項12】
前記長さは、前記文字画像の高さを基準としたとき、当該長さの1%~10%の範囲で決定される、ことを特徴とする請求項11に記載の画像処理装置。
【請求項13】
前記追加手段は、前記ハネを模した線分の長さを、前記特定された描画開始地点と前記特定された着地点の2点間の距離を超えない範囲でランダムの長さを決定して、前記追加を行う、ことを特徴とする請求項9又は10に記載の画像処理装置。
【請求項14】
前記取得手段が取得した一文字単位の前記文字画像に対し変形処理を行う変形手段をさらに有し、
前記検出手段は、前記変形手段にて変形された文字画像を対象として前記検出を行う、ことを特徴とする請求項1乃至13のいずれか一項に記載の画像処理装置。
【請求項15】
前記変形処理は、回転、拡大又は縮小、膨張又は収縮、アスぺクト比変更のいずれかを含むことを特徴とする請求項14に記載の画像処理装置。
【請求項16】
前記生成手段で生成された前記学習データを用いて前記機械学習を行う学習手段をさらに備えることを特徴とする請求項1乃至15のいずれか一項に記載の画像処理装置。
【請求項17】
手書き文字を一文字単位で表した文字画像を取得する取得ステップと、
前記文字画像における前記手書き文字を構成する線分のうち、手書きによるハネが発生し得る線分を検出する検出ステップと、
前記検出ステップにて検出した線分の端部に、ハネを模した線分を追加する追加ステップと、
前記ハネを模した線分が追加された文字画像と正解クラスとを紐付けて、機械学習のための学習データを生成する生成ステップと、
を含むことを特徴とした画像処理方法。
【請求項18】
コンピュータを、請求項1乃至16のいずれか一項に記載の画像処理装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、学習データの生成技術に関する。
【背景技術】
【0002】
近年、コンピュータの普及に伴う労働環境の変化により、業務文書をスキャンして電子化する機会が増加している。こうした電子化対象の文書には例えば領収書など、手書き文字が記入されたものも存在するところ、電子化された文書を集計等のデータ解析に活用するために、手書き文字領域に対して光学文字認識(OCR)を行って文字データを抽出することが行われている。ここで、手書き文字に対応したOCR技術の1つに、ニューラルネットワークなどの機械学習を行って得た学習済モデルを用いる手法がある。この手法では、まず、手書きの文字が描画された文字画像と当該文字画像に含まれる文字をテキスト化した正解クラスとが対になった学習データ(教師データ或いは訓練データとも呼ばれる。)を用いて学習を行う。そして、学習済モデルに手書き文字を含んだ文字画像を入力することにより、スキャン文書中の手書き文字をテキスト情報として利用することが可能となる。
【0003】
一般に機械学習によって画像認識を実施するためには膨大な量の画像が学習データとして必要になるところ、手書き文字には様々な形状が存在し、あらゆるパターンの手書き文字の画像を全て網羅して収集することは困難である。そこで、用意した学習データ用の文字画像に対して回転や拡縮等の変形処理を行い、学習データを増強すること(Data Augmentation)が一般的に行われている。そして、変形処理の一例として、文字画像内の文字を構成する線分にハネを追加する技術が提案されている(特許文献1)。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
上記特許文献1は、ハネの追加の方法については「線分を抽出し、線分の先端部分にハネなどの装飾をほどこす」といった記載があるのみで、どのような場合にどのようなハネを追加するのかといった詳細については開示がない。文字を構成する線分は文字画像内に多数存在するところ、不適切なハネの追加がなされた場合、現実の筆跡とはかけ離れた手書き文字を表す文字画像になってしまう。このような文字画像が多数生成されてしまうと、本来の目的を達成できず、却って学習精度が落ちてしまう。さらに、追加されたハネの位置や形状によっては、人間にとって別の文字に読めるような字形に変形してしまう場合がある。例えば
図13の例では、数字の「2」の下部に破線で囲われたハネを付与した結果、数字の「3」のように読めてしまう。このような文字画像を正解画像として用いることは誤った正解クラスを付与した学習データを用いるのと同等に学習に悪影響を与える。
【課題を解決するための手段】
【0006】
本開示の技術に係る画像処理装置は、手書き文字を一文字単位で表した文字画像を取得する取得手段と、前記文字画像における前記手書き文字を構成する線分のうち、手書きによるハネが発生し得る線分を検出する検出手段と、前記検出手段で検出した線分の端部に、ハネを模した線分を追加する追加手段と、前記ハネを模した線分が追加された文字画像と正解クラスとを紐付けて、機械学習のための学習データを生成する生成手段と、を備えることを特徴とする。
【発明の効果】
【0007】
本開示の技術によれば、実際の筆跡において見られるハネ方に沿った学習画像を生成することが可能となる。その結果、ハネのない手書き文字を含む画像に対する文字認識精度低下を抑えつつ、ハネのある手書き文字を含む画像に対する文字認識精度を高めた、手書き文字対応OCR用の学習済モデルを得ることができる。
【図面の簡単な説明】
【0008】
【
図2】(a)は画像処理装置のハードウェア構成の一例を示したブロック図、(b)は端末装置のハードウェア構成の一例を示したブロック図。
【
図3】文字画像DBとしてのテーブルの一例を示す図。
【
図4】学習画像DBとしてのテーブルの一例を示す図。
【
図5】(a)は学習処理の流れを示すフローチャート、(b)は推論処理の流れを示すフローチャート。
【
図6】学習データ生成処理の流れを示すフローチャート。
【
図7】(a)~(c)は、追加されるハネの一例を示す図。
【
図8】下部ハネ追加処理の詳細を示すフローチャート。
【
図9】連結画素グループ数及び連結画素数の一例を示す図。
【
図10】上部ハネ追加処理の詳細を示すフローチャート。
【
図11】右部ハネ追加処理の詳細を示すフローチャート。
【
図12】(a)は連結画素グループと連結画素数の一例を示す図、(b)及び(c)は右部ハネ追加処理の対象とならない場合の一例を示す図。
【
図13】不適切なハネが追加された場合の一例を示す図。
【発明を実施するための形態】
【0009】
以下、図面を参照して本発明の実施の形態を詳しく説明する。なお、以下の実施の形態は特許請求の範囲に係る発明を限定するものでなく、また実施の形態で説明されている特徴の組み合わせの全てが発明の解決手段に必須のものとは限らない。
【0010】
[実施形態1]
<画像処理システムの概要>
図1は、本実施形態に係る、画像処理システムの構成の一例を示した図である。
図1に示すように、画像処理システムは、画像処理装置100、端末装置110で構成され、ネットワーク120を介して互いに接続される。
【0011】
画像処理装置100は、学習データ生成部101、学習部102、推論部103の各機能部を有する。学習データ生成部101は、学習部102にてニューラルネットワークのモデルを学習するための学習データを生成する。学習データは、手書き文字が描画された文字画像と、当該文字画像に含まれる手書き文字をテキスト化した正解クラスとが対になったデータである。学習データ生成部101で生成される学習データの詳細については
図4を用いて後述する。
【0012】
学習部102は、学習データ生成部101が生成した学習データを用いて、ニューラルネットワークのモデルを学習する。なお、学習部102によって生成されたニューラルネットワークのモデルを「学習済モデル」と呼称する。学習部102による学習処理については、
図5(a)を用いて後述する。推論部103は、入力された文字画像に対し、学習部102が生成した学習済モデルを用いた推論によって、クラス情報を出力する。推論部103による推論処理については、
図5(b)用いて後述する。
【0013】
端末装置110は、例えばPCやスマートフォンなどの情報処理装置である。ユーザやシステム管理者は、端末装置110からネットワーク120を介して画像処理装置100へアクセスして、学習の実行指示や学習済モデルの確認をすることができる。
【0014】
ネットワーク120は、画像処理装置100と端末装置110との間を接続するLANや公衆回線(WAN)等であって、ネットワーク120を介して装置間でのデータの送受信が行われる。
【0015】
なお、上記のシステム構成は一例であり、本実施形態における説明に必要な機能のみを図示している。本実施形態に開示の技術を実現できる構成であれば、各装置はどのような論理構成であってもよい。例えば、
図1に示す構成では、推論部103が画像処理装置100に組み込まれているが、画像処理装置100とは別の装置が推論部103を有していてもよい。
【0016】
<ハードウェア構成>
図2は、
図1に示す画像処理システムにおける画像処理装置100及び端末装置110のハードウェア構成の一例を示したブロック図である。
【0017】
図2(a)は、画像処理装置100のハードウェア構成を示す図である。
図2(a)に示すように、画像処理装置100は、CPU201、ROM202、RAM204、ストレージ205、入力デバイス206、表示デバイス207、外部I/F208、GPU209で構成され、データバス203を介して互いに接続される。
【0018】
CPU201は、画像処理装置100における動作全体を制御するための制御装置である。CPU201は、ROM202に記憶されたブートプログラムを実行することで、画像処理装置100のシステムを起動し、ストレージ205に記憶されたプログラムを実行する。また、CPU201は、学習データ生成部101や学習部102が実行する計算処理の一部をGPU209と協調して実行する。ROM202は、不揮発性メモリで実現されるものであって、画像処理装置100を起動するブートプログラム等を格納する記憶装置である。データバス203は、画像処理装置100を構成するデバイス間で相互にデータを送受信するための通信路である。RAM204は、揮発性メモリで実現されるものであって、CPU201がプログラムを実行する際のワークメモリとして使用される記憶装置である。ストレージ205は、HDD(ハードディスクドライブ)やSSD(ソリッドステートドライブ)等で実現されるものであって、プログラムや学習データを記憶するための大容量記憶装置である。ここでプログラムには、後述する学習データ生成処理や学習処理、推論処理の実行をCPU201に指示するためのプログラムを含む。CPU201がこれらプログラムを実行することにより、前述の学習データ生成部101、学習部102、推論部103が実現される。入力デバイス206は、マウスやキーボード等で実現されるものであって、エンジニアからの画像処理装置100に対する操作入力を受け付ける。表示デバイス207は、液晶ディスプレイ等で実現されるものであって、画像処理装置100の各種設定画面などをエンジニアに対して表示出力する。外部I/F208は、ネットワーク120を介して端末装置110との間で各種データやコマンド等をやり取りするためのインタフェースである。GPU209は、画像処理に特化した演算処理装置である。GPU209は、CPU201による制御の下、与えられた学習データを元に、学習モデルを構成するパラメータを更新するための演算等を実行する。スキャナデバイス210は、CCDなどを用いて帳票などの原稿を走査し、得られた電気信号データを変換して画像データを生成する装置である。
【0019】
図2(b)は、端末装置110のハードウェア構成を示す図である。
図2(b)に示すように、端末装置110は、CPU211、ROM212、RAM214、ストレージ215、入力デバイス216、表示デバイス217、外部I/F218で構成され、データバス213を介して互いに接続される。CPU211は、端末装置110における動作全体を制御するための制御装置である。CPU211は、ROM212に記憶されたブートプログラムを実行することで、端末装置110のシステムを起動し、ストレージ215に記憶されたプログラムを実行する。ROM212は、不揮発性メモリで実現されるものであって、端末装置110を起動するブートプログラム等を格納する記憶装置である。データバス213は、端末装置110を構成するデバイス間で相互にデータを送受信するための通信路である。RAM214は、揮発性メモリで実現されるものであって、CPU211が画像処理プログラムを実行する際のワークメモリとして使用される記憶装置である。ストレージ215は、HDD(ハードディスクドライブ)やSSD(ソリッドステートドライブ)等で実現されるものであって、前述のプログラム等を記憶するための記憶装置である。入力デバイス216は、マウスやキーボード等で実現されるものであって、ユーザからの端末装置110に対する操作入力を受け付ける。表示デバイス217は、液晶ディスプレイ等で実現されるものであって、ユーザに対して様々な情報を表示出力する。外部I/F218は、ネットワーク120を介して画像処理装置100との間で各種データやコマンド等をやり取りするためのインタフェースである。
【0020】
<学習データについて>
次に、ニューラルネットワークの学習に用いる、文字画像と正解クラスとが対になった学習データについて説明する。ここで、用語について定義しておく。実際に手書きされた文書のスキャン画像から手書き文字の領域を一文字単位で切り出すことによって得られる画像を「文字画像」と呼ぶこととする。そして、この文字画像に対して学習データ生成部101が変形処理を行って得た画像を「学習画像」と呼ぶこととする。
【0021】
≪文字画像データベース≫
図3は、文字画像を保存するためのデータベース(以下、「文字画像DB」と表記)としてのテーブルの一例を示す図である。文字画像DBとしてのテーブル300には、「レコードID」301、「文字画像」302、「正解クラス」303の各項目に対応するデータ又は値が格納される。なお、文字画像DBは、ストレージ205の記憶領域の一部が専用に割り当てられるものとする。
【0022】
「レコードID」301は、テーブル300内の各レコードを一意に識別するための識別情報が入るフィールドである。このレコードIDは、テーブル300へレコードが追加される度に、レコードに対して付与される。「文字画像」302は、手書き文字の文字1つ1つに対応する画像データが入るフィールドである。「正解クラス」303は、文字画像内に含まれる手書き文字をテキストデータとして保持するフィールドである。いま、
図3に示すテーブル300には、手書き数字の文字画像とその正解クラスとを紐付けた4つのレコード304~307が例示されている。
【0023】
前述のとおり、テーブル300に格納される各文字画像は、例えば、手書き文字を含んだ文書などをスキャンして得られた画像から手書き文字の部分だけを文字毎に切り出すことによって得られるものであるが、文字画像の取得方法はこれに限定されない。また、
図3に示すテーブル300のように複数の文字画像を一括して管理するのではなく、例えば正解クラス毎にテーブルを設けて管理してもよい。
【0024】
≪学習画像データベース≫
次に、学習データ生成部101が、上述の文字画像DBに格納された文字画像に対して変形処理を行って生成する、ニューラルネットワークの学習に用いる学習画像について説明する。
図4は、学習データ生成部101が生成した学習画像を保存するためのデータベース(以下、「学習画像DB」と表記)としてのテーブルの一例を示す図である。学習画像DBとしてのテーブル400には、「レコードID」401、「学習画像」402、「正解クラス」403の各項目に対応するデータ又は値が格納される。なお、学習画像DBは、ストレージ205の記憶領域の一部が専用に割り当てられるものとする。
【0025】
「レコードID」401は、テーブル400内の各レコードを一意に識別するための識別情報が入るフィールドである。この「レコードID」401の値は、テーブル400へレコードが追加される度に、レコードに対して付与される。「学習画像」402は、文字画像を変形等して生成された画像データを保持するフィールドである。「正解クラス」403は、学習画像内に含まれる文字をテキストデータとして保持するフィールドである。いま、
図4に示すテーブル400には、
図3のテーブル300のレコード304~307の各文字画像に変形処理を施して得られた学習画像とその正解クラスとを紐付けた4つのレコード404~407が示されている。なお、
図4のテーブル400に示す具体例では、1つの学習画像に含まれる文字数が1~3個であるがその上限は任意に設定さればよい。例えば上限を15文字に設定し、その範囲の中で文字画像を並べ変えるなどして任意の文字数から成る学習画像を生成する構成をとってもよいし、上限を1文字に設定し、1文字の文字画像のみで学習画像を生成する構成としてもよい。
【0026】
<学習処理>
次に、学習部102による学習処理について、
図5(a)を用いて説明する。
図5(a)は、学習処理の流れを示すフローチャートである。
図5(a)のフローチャートに示す各ステップは、CPU201が、ROM202等に格納された所定のプログラムをRAM204に展開し、これを実行することで実現される。学習処理は、ユーザが、画像処理装置100の入力デバイス206を介した所定の操作に応答して、或いはネットワーク120を介して端末装置110などから受け付けた所定の入力信号をトリガーとして開始される。本実施形態において、ニューラルネットワークの学習にはミニバッチ法を用いるものとする。なお、以下の説明において記号「S」はステップを意味する。
【0027】
S501では、学習画像DBから、学習に必要な学習データのデータセットが取得される。具体的には、学習画像DBとしてのテーブル400に含まれる各レコードを参照して、学習画像と正解クラスとの対からなる学習データが取得される。
【0028】
S502では、ニューラルネットワークが初期化される。具体的には、ニューラルネットワークを構築し、当該ニューラルネットワークに含まれるパラメータの値を、ランダムに決定する。構築するニューラルネットワークの構造は様々なものを用いることができるが、例えば、CNN(Convolutional Neural Networks)のような形態を取り得る。
【0029】
S503では、S501で読み込んだ学習データのうち所定の数(ミニバッチサイズ、例えば10個。ミニバッチの学習形態をとらないのであれば1個)の学習データが取得される。そして、S504及びS505にて、ニューラルネットワークの学習を行う。
【0030】
S504では、ニューラルネットワークの誤差が算出される。具体的には、S503で取得したミニバッチ内の各学習データに含まれる学習画像をニューラルネットワークに入力して学習画像内の文字を表すクラス情報を出力し、当該出力と正解クラスとの差を評価して誤差を求める処理が行われる。当該評価には指標としてCTC(Connectionist Temporal Classification)Lossなどを用いることができる。
【0031】
S505では、ニューラルネットワークのパラメータが調整される。具体的には、S504にて算出した誤差に基づき、例えばバックプロパゲーション法によってニューラルネットワークのパラメータを変更する処理が行われる。
【0032】
S506では、学習を終了するか否かが判定される。具体的には、S503~S505の処理を所定回数(例えば、40000回)行ったか否かがチェックされる。ここで所定回数は、例えば学習処理の開始時にユーザが所望の回数を入力するなどして決定すればよい。所定回数の処理が完了していた場合には終了と判定し、S507に遷移する。所定回数の処理が完了していない場合はS503に戻ってニューラルネットワークの学習が続行される。
【0033】
S507では、学習結果として、S505にて調整したニューラルネットワークのパラメータで構成される学習済モデルが、ストレージ205に保存される。
【0034】
以上が、学習処理の内容である。なお、
図5(a)のフローチャートでは、学習データ取得処理(S501)において、事前に生成した学習データを読み込むように処理しているが、学習データの生成と学習処理を並行して行ってもよい。すなわち、学習データ取得処理(S501)に先立って後述の学習データ生成処理を実行し、生成された学習データから順次読み込んで取得するような構成でもよい。
【0035】
<推論処理>
次に、推論部103による推論処理について
図5(b)を用いて説明する。
図5(b)は、推論処理の流れを示すフローチャートである。
図5(b)のフローチャートに示す各ステップは、CPU201が、ROM202等に格納された所定のプログラムをRAM204に展開し、これを実行することで実現される。推論処理は、ユーザが、画像処理装置100の入力デバイス206を介した所定の操作に応答して、或いはネットワーク120を介して端末装置110などから受け付けた所定の入力信号をトリガーとして開始される。なお、以下の説明において記号「S」はステップを意味する。
【0036】
S511では、学習済モデルの読み込みが行われる。具体的には、まず、前述の
図5(a)のフローチャートのS502で構築されたニューラルネットワークと同一構造のニューラルネットワークが構築され、構築したニューラルネットワークに、前述のS507で保存された学習済モデルが反映される。
【0037】
S512では、推論処理の対象となる画像(以降、「処理対象画像」と呼称する。)を生成する処理が実行される。具体的には、領収書等の文書をスキャンして得られたスキャン画像から手書き文字に相当する画素を抽出し、抽出画素塊の外接矩形を求めて、当該外接矩形内部の画素で構成される画像を得る。この処理は、一般に「ブロックセレクション」と呼ばれ、これにより得られた画像は「文字ブロック」と呼ばれる。こうして、領収書等のスキャン画像から1又は複数の処理対象画像が生成される。
【0038】
S513では、S512で生成された処理対象画像のうち注目する処理対象画像が学習済モデルに入力される。これにより、注目する処理対象画像に含まれる文字に対応したテキスト情報が、推論結果として出力される。
【0039】
S514では、S513で取得した推論結果が送信される。本実施形態では、ネットワーク120を介して端末装置110に送信されることになる。なお、推論結果を端末装置110に送信するのではなく、ストレージ205に保存するような構成をとってもよい。
【0040】
S515では、推論処理を終了するか否かが判定される。S512で生成された全ての処理対象画像についての推論処理が完了していた場合は、本処理を終了する。一方、未処理の処理対象画像が残っている場合はS513に戻って次の注目する処理対象画像を学習済みモデルに入力して推論処理を続行する。
【0041】
以上が、推論処理の内容である。
【0042】
<学習データ生成処理>
続いて、学習データ生成部101による学習データ生成処理について、
図6を用いて説明する。
図6は、学習データ生成処理の大まかな流れを示すフローチャートである。
図6のフローチャートに示す各ステップは、CPU201が、ROM202等に格納された所定のプログラムをRAM204に展開し、これを実行することで実現される。学習データ生成処理は、画像処理装置100の入力デバイス206を介した所定のユーザ操作に応答して、或いはネットワーク120を介して端末装置110などから受け付けた所定の入力信号をトリガーとして開始される。なお、以下の説明において記号「S」はステップを意味する。
【0043】
S601では、何文字分の文字画像を用いて学習画像を生成するかがランダムに決定される。この際、最小文字列長は例えば“1”、最大文字列長は例えば“15”であるが、いずれも任意の値を設定可能である。
【0044】
S602では、文字画像DB(例えば上述のテーブル300)から、一文字分の文字画像とその正解クラスのペアがランダムに取得される。なお、ここで取得される文字画像は、変形処理を施す前の物理的に収集した文字画像である。生成される学習データに偏りが生じないように文字画像と正解クラスのペアを取得できればよく、正解クラスを順に変更するなど取得対象に何らかの限定を加えてもよい。
【0045】
S603では、S602で取得された文字画像に対して変形処理が行われる。具体的には、所定の範囲内でランダムに選択したスケールでの拡大・縮小或いは膨張・収縮処理が行われる。また同様に、所定の範囲内でランダムに選択された角度での回転処理や、所定の範囲内でランダムに選択された比率でのアスペクト比変更処理が行われる。
【0046】
S604では、変形処理が施された文字画像に対して、下部ハネ追加処理が行われる。
図7(a)に、本ステップの処理により追加されるハネの例を示す。長い直線の下端部から右上に伸びる短い線分が、追加されたハネを表している。このようなハネは単一の文字を書く際には発生しにくいが、右方向に素早く連続で複数の文字を書く場合に発生する可能性が高まる。このような軌跡は、筆記者が右上方向にある次の文字の筆記開始地点に移動する際に、ペン先が紙から離れるよりも早く移動を開始した場合などに発生する。下部ハネ追加処理の詳細については後述する。
【0047】
S605では、下部ハネ追加処理を終えた文字画像に対して、上部ハネ追加処理が行われる。
図7(b)に、本ステップの処理により追加されるハネの例を示す。長い直線の上端部から左下に伸びる短い線分が、追加されたハネを表している。このような軌跡は単一の文字を書く際には発生しにくいが、右方向に素早く連続で文字を書く場合に発生する可能性が高まる。このような軌跡は筆記者が左方向から素早くペンを移動しながら本来の筆記開始地点に着地したときに、本来の筆記開始地点にたどり着く前にペン先が紙と接している場合などに発生する。厳密にはハネというよりは着地にともなう先行筆記であるが、本明細書においては文字の主体となる筆跡から部分的に飛び出した筆跡も含めて「ハネ」と表現する。なお
図7(b)では左下に向かってハネが伸びているが、左上に向かって伸びる場合もあり得る。ハネの方向は筆記を開始する直前の筆記者のペンのペン先の位置に依存し、その位置は前の文字の種類にも依存する。例えば前の文字が数字の「8」のように右上の方で筆記が終了するようなケースではその次の文字の筆記開始地点で手は上方に存在しやすく左上方向のハネが発生しやすい。一方で前の文字が数字の「1」のように下の方で筆記が終了するようなケースではその次の文字の筆記開始時点で手は下方に存在しやすく、左下方向のハネが発生しやすい。上部ハネ追加処理の詳細については後述する。
【0048】
S606では、上部ハネ追加処理が施された文字画像に対して、右部ハネ追加処理が行われる。
図7(c)に、本ステップの処理により追加されるハネの例を示す。交差する二本の長い直線のうち水平方向の直線の右端部から左上に伸びる線分が、追加されたハネを表している。このようなハネは「十」、「才」、「寸」といった横線と縦線とが交わる漢字を筆記する場合に発生しやすい。右部ハネ追加処理の詳細については後述する。そして、右部ハネ追加処理が施された結果画像(すなわち、ランダムに選択された文字画像に対し変形処理と3種類のハネ追加処理が施された画像)が、ハネ追加済画像としてRAM204に保存される。
【0049】
S607では、S601で決定した文字列長分の処理が完了したか否かが判定される。決定された文字列長分の処理が完了していた場合はS608に進み、完了していなければS602に戻って処理が続行される。
【0050】
S608では、ここまでの処理で生成された複数文字分のハネ追加済画像を合成した文字列画像が生成される。具体的な合成方法としては、例えば変形後の文字画像を生成された順番に右に並べて連結することにより、文字列画像が生成される。また同じ順番で、ハネ追加済画像の基になった文字画像の正解クラスを右に並べて、生成された文字列画像に対応する正解クラスとする。こうして得られた文字列画像と正解クラスは互いに紐付けられ、学習画像と正解クラスとが対になった学習データとして、ストレージ205内の学習画像DB(本実施形態では、前述のテーブル400)に登録される。
【0051】
S609では、学習データの生成処理を終了するか否かが判定される。ここでの終了条件は、所定個数の文字列画像の生成が完了した場合などである。終了条件を満たしていない場合は、S601に戻って処理が続行される。終了条件を満たしている場合は、学習データ生成処理を終了する。
【0052】
以上が、学習データ生成処理の大まかな内容である。なお、
図6のフローチャートでは、下部・上部・右部の各パターンについてハネの追加処理を行っているが、追加するハネのパターンはこれらに限定されない。例えば左部など他のパターンのハネをさらに追加してもよいし、下部と上部のハネだけを追加してもよい。
【0053】
≪下部ハネ追加処理の詳細≫
図8は、下部ハネ追加処理の詳細を示すフローチャートである。以下、
図8のフローチャートに沿って説明する。
【0054】
S801では、S602にて文字画像と共に取得された正解クラスが、事前に定義した処理対象クラスの範囲に包含されているか否かが判定される。ここでは、処理対象クラスの範囲として、0~9までの数字が設定されているものとする。判定の結果、包含されていればS802に進み、包含されていなければ本処理を抜ける。
【0055】
S802では、S602にて取得された文字画像に対し、外接矩形で切り出す処理が行われる。切り出された画像(すなわち、文字画像の余白部分を削除した画像)は、切り出し画像としてRAM204に保存される。
【0056】
続くS803~S805は手書きによるハネが発生し得るような線分を検出するための処理である。具体的には、切り出し画像の下部における所定割合の領域において取得した、行毎の連結画素グループ数と各連結画素グループにおける連結画素数に基づいて、ハネを模した線分の追加対象となる線分が特定される。以下、詳しく説明する。
【0057】
S803では、切り出し画像における下部の所定割合の領域(例えば下端から20%の領域)において、行毎の連結画素グループ数と各連結画素グループにおける連結画素数が取得される。ここで、行毎の連結画素グループとは、手書き文字の正立方向に対して水平な方向において連続して存在する黒画素群(輝度値が閾値以下の画素の集合)を意味する。連結画素数とは、連結画素グループを構成する黒画素の数である。また、行数は任意である。
図9は、切り出し画像から取得される、連結画素グループと連結画素数の一例を示す図である。
図9の例では、4つの切り出し画像901~904それぞれについて、点線矢印が示す3行分の連結画素グループと連結画素数が示されている。切り出し画像901のように下部が単純な線である場合、連結画素グループはどのような行においても1となる。一方で切り出し画像902のように折れ曲がりがあるようなケースでは連結画素グループ数が2以上になる場合がある。このような切り出し画像は、後述するS804の処理によってハネを追加する対象から除外されることになる。また、切り出し画像903のように下部に横方向に伸びる線分があるケースや切り出し画像904のように下部の線分がカーブを描いている場合は連結画素数が大きくなる。このような切り出し画像も、後述するS805の処理によってハネを追加する対象から除外されることになる。
【0058】
S804では、S803で取得した行毎の連結画素グループ数の最大値が1であるか否かによって処理が振り分けられる。連結画素グループ数の最大値が“1”であった場合はS805に進み、“1”以外であれば本処理を抜ける。前述の通り、切り出し画像902のような文字の下部の線分が折れ曲がっている場合は処理終了となる。
【0059】
S805では、S803で取得した行毎の連結画素グループ全てについて連結画素数を調べ、最大連結画素数が予め設定した閾値以下であるか否かによって処理が振り分けられる。最大連結画素数が予め設定した閾値以下である場合はS806に進み、閾値を超えている場合は本処理を抜ける。前述の通り、切り出し画像903のような下部に横方向に伸びる線分がある場合や切り出し画像904のように下部の線分がカーブを描いていたりする場合は処理終了となる。以降のS806~S810ではハネの描画条件が決定される。
【0060】
S806では、描画するハネ(線)の角度が決定される。具体的には、右上方向の所定の範囲内でランダムな角度を選択し、描画するハネの角度とする。所定の範囲の一例としては真右方向を0℃、真上方向を90℃としたとき15°~60°の範囲である。
【0061】
S807では、描画するハネ(線)の長さが決定される。具体的には、切り出し画像の高さを基準にした所定の範囲内のランダムの長さを選択し、描画するハネの長さとする。所定の範囲の一例としては切り出し画像の高さの1%~10%である。ハネの長さが長すぎると、別の文字に誤認識されてしまうリスクが高まるため注意が必要である。例えば「7」という数字の下部に長すぎる右上15度方向のハネを追加すると、元の「7」の字形によっては「2」に読めてしまう字形に変ってしまう可能性がある。このような変形画像は特に「2」の認識精度に悪影響を与える。
【0062】
S808では、描画するハネ(線)の開始位置が決定される。具体的には、切り出し画像の最下行の連結画素グループの中心位置を描画するハネの描画開始地点とする。
【0063】
S809では、描画するハネ(線)の太さが決定される。具体的には、切り出し画像の下から数行上の行における連結画素グループの連結画素数を、描画するハネの線の太さとする。ここで、最下行ではなく少し上に遡る理由は、最下行の場合、下端部をミクロに見たときに先端が先細りして極端に連結画素数が少ないケースがあるためである。
【0064】
S810では、描画するハネ(線)の輝度が決定される。具体的には、切り出し画像の下から数行上の行における連結画素グループ内の画素の平均輝度を描画するハネの輝度とする。最下行ではなく少し上に遡る理由は、最下行の場合、下端部をミクロに見たときに先端が先細りしたりかすれたりして極端に色味が薄くなっているケースがあるためである。
【0065】
S811では、S806~S810で決定した描画条件に基づいて、処理対象である変形後の文字画像の下部にある線分の下端部に対してハネを追加する描画処理が行われる。この描画処理によってハネが追加された画像はRAM204に保存される。
【0066】
以上が、下部ハネ追加処理の内容である。なお、よりリアルなハネに似せるために、例えば輝度についてハネの先端ほど薄くなるように描画したり、太さについて先端ほど細くなるように描画したりしてもよい。
【0067】
≪上部ハネ追加処理の詳細≫
図10は、上部ハネ追加処理の詳細を示すフローチャートである。以下、
図10のフローチャートに沿って説明する。なお、
図8で示した下部ハネ追加処理と共通する内容については説明を省略ないしは簡略化して説明を行う。
【0068】
S1001及びS1002は、下部ハネ追加処理におけるS801及びS801と同じである。まず、S602にて文字画像と共に取得された正解クラスが、事前に定義した処理対象クラスの範囲に包含されているか否かが判定される(S1001)。S801と同様、処理対象クラスの範囲として、0~9までの数字が設定されているものとする。そして、包含されていれば、S602にて取得された文字画像に対して外接矩形で切り出す処理が行われる(S1002)。
【0069】
続くS1003~S1005は手書きによるハネが発生し得るような線分を検出するための処理である。具体的には、切り出し画像の上部における所定割合の領域において取得した、行毎の連結画素グループ数と各連結画素グループにおける連結画素数に基づいて、ハネを模した線分の追加対象となる線分が特定される。以下、詳しく説明する。
【0070】
S1003では、切り出し画像における上部の所定割合の領域(例えば上端から20%の領域)において、行毎の連結画素グループ数と各連結画素グループにおける連結画素数が取得される。「行毎の連結画素グループ」、「連結画素数」の意味はS803で説明したとおりである。また、S803と同様、行数は任意である。
【0071】
S1004及びS1005は、下部ハネ追加処理におけるS804及びS805と同じである。すなわち、行毎の連結画素グループ数の最大値が“1”であり(S1004でYes)、かつ、行毎の各連結画素グループにおける最大連結画素数が予め設定した閾値以下であれば(S1005でYes)、S1006以降のハネの描画条件を決定する処理に進む。
【0072】
S1006では、描画するハネ(線)の角度が決定される。具体的には、左方向の所定の範囲内でランダムな角度を選択し、描画するハネの角度とする。所定の範囲の一例としては真右方向を0℃、真上方向を90℃としたとき135°~225°の範囲である。
【0073】
S1007では、描画するハネ(線)の長さが決定される。具体的には、切り出し画像の高さを基準にした所定の範囲内のランダムの長さを選択し、描画するハネの長さとする。所定の範囲の一例としては切り出し画像高さの1%~10%である。ハネの長さが長すぎると別の文字に誤認識されてしまうリスクが高まるため注意が必要である。例えば「1」という数字の上部に長すぎる左方向のハネを追加すると、元の「1」の字形によっては「7」に読めてしまう字形に変ってしまう可能性がある。このような変形画像は特に「7」の認識精度に悪影響を与える。
【0074】
S1008では、描画するハネ(線)の開始位置が決定される。具体的には、切り出し画像の最上行の連結画素グループの中心位置を描画するハネの描画開始地点とする。
【0075】
S1009では、描画するハネ(線)の太さが決定される。具体的には、切り出し画像の上から数行下の行における連結画素グループの連結画素数を描画するハネの線の太さとする。最上行ではなく少し下を調べる理由は、最上行の場合、上端部をミクロに見たときに先端が先細りして極端に連結画素数が少ないケースがあるためである。
【0076】
S1010では、描画するハネ(線)の輝度が決定される。具体的には、切り出し画像の上から数行下の行における連結画素グループ内の画素の平均輝度を描画するハネの輝度とする。最上行ではなく少し下を調べる理由は、最上行の場合、上端部をミクロに見たときに先端が先細りしたりかすれたりして極端に色味が薄くなるケースがあるためである。
【0077】
S1011では、S1006~S1010で決定した描画条件に基づいて、処理対象である変形後の文字画像の上部にある線分の上端部に対してハネを追加する描画処理が行われる。この描画処理によってハネが追加された画像はRAM204に保存される。
【0078】
以上が、上部ハネ追加処理の内容である。なお、よりリアルなハネに似せるために、例えば輝度についてハネの先端ほど薄くなるように描画したり、太さについて先端ほど細くなるように描画したりしてもよい点は、下部ハネ追加処理と同様である。
【0079】
≪右部ハネ追加処理の詳細≫
図11は、右部ハネ追加処理の詳細を示すフローチャートである。以下、
図11のフローチャートに沿って説明する。なお、
図8で示した下部ハネ追加処理と共通する内容については説明を省略ないしは簡略化して説明を行う。
【0080】
S1101では、S602にて文字画像と共に取得された正解クラスが、事前に定義した処理対象クラスの範囲に包含されているか否かが判定される。ここでは、処理対象クラスの範囲として、「十」、「才」、「寸」などの漢字が設定されているものとする。そして、包含されていれば、S602にて取得された文字画像に対して外接矩形で切り出す処理が行われる(S1002)。
【0081】
S1102は、下部ハネ追加処理におけるS802と同じである。すなわち、S602にて取得された文字画像に対して外接矩形で切り出す処理が行われる。
【0082】
続くS1103~S1105は手書きによるハネが発生し得るような線分を検出するための処理である。具体的には、切り出し画像の右部における所定割合の領域において取得した、列毎の連結画素グループ数と各連結画素グループにおける連結画素数に基づいて、ハネを模した線分の追加対象となる線分が特定される。以下、詳しく説明する。
【0083】
S1103では、切り出し画像における右部の所定割合の領域(例えば右端から10%の領域)において、列毎の連結画素グループ数と各連結画素グループにおける連結画素数が取得される。ここで、列毎の連結画素グループとは、手書き文字の正立方向に対して垂直な方向において連続して存在する黒画素(輝度値が閾値以下の画素)群を意味する。連結画素数とは、連結画素グループを構成する黒画素の数である。また、列数は任意である。
図12(a)は、切り出し画像から取得される、連結画素グループと連結画素数の一例を示す図である。
図12(a)の例では、数字の「4」の切り出し画像について、点線矢印が示す3列分の連結画素グループと連結画素数が示されている。図示されるような横方向に伸びる単純な線分に関しては、連結画素グループはどのような列においても1となる。一方で、例えば字形が歪み縦線の上部分が大きく右にはみ出ている場合(
図12(b))や、文字の右側部分が折れ曲がっている場合など(
図12(c))は、連結画素グループ数が2以上になったり、連結画素数が大きくなったりする。このような切り出し画像は、後述するS1104又はS1105の処理によってハネを追加する対象から除外されることになる。
【0084】
S1104では、S1103で取得した列毎の連結画素グループ数の最大値が1であるか否かによって処理が振り分けられる。連結画素グループ数の最大値が“1”であった場合はS805に進み、“1”以外であれば本処理を抜ける。
【0085】
S1105では、S1103で取得した列毎の連結画素グループ全てについて連結画素数を調べ、最大連結画素数が予め設定した閾値以下であるか否かによって処理が振り分けられる。最大連結画素数が予め設定した閾値以下である場合はS1106に進み、閾値を超えている場合は本処理を抜ける。以降のS1106~S1111ではハネの描画条件が決定される。
【0086】
S1106では、描画するハネの着地点(ハネが発生した場合の次の字画の筆記開始地点)が検出される。具体的には、S802~S805及びS808と同等の処理を行うことで、画像上部に伸びている単一の縦線の上端点の位置を検出する。なお、ハネの着地点の検出方法はこの方法に限定されない。例えば漢字の「世」のように上部に伸びた縦線が複数ある場合にも対応できるように、複数の縦線が見つかった場合は一番右の縦線の上端点をハネの着地点としてもよい。また、処理対象クラスによる振り分け処理について、さらに正解クラス毎の分岐を増やし、正解クラスの文字が例えば漢字の「甘」のように一画目の長い横線の後に左の縦線を書くのが正しい文字については、一番左の縦線の上端点をハネの着地点としてもよい。
【0087】
S1107では、描画するハネ(線)の開始位置が決定される。具体的には、切り出し画像の最右列の連結画素グループの中心位置を描画するハネの描画開始地点とする。
【0088】
S1108では、描画するハネ(線)の角度が決定される。具体的には、S1107で決定した描画開始地点とS1106で決定した着地点とが成す角度を算出し、描画するハネの角度とする。
【0089】
S1109では、描画するハネ(線)の長さが決定される。具体的には、S1107で決定した描画開始地点とS1106で決定した着地点の2点間の距離を超えない範囲でランダムの長さを選択し、描画するハネの長さとする。
【0090】
S1110では、描画するハネ(線)の太さが決定される。具体的には、切り出し画像の右から数列左の列における連結画素グループの連結画素数を描画するハネの線の太さとする。最右列ではなく少し左を調べる理由は、最右列の場合、右端部をミクロに見たときに先端が先細りして極端に連結画素数が少ないケースがあるためである。
【0091】
S1111では、描画するハネ(線)の輝度が決定される。具体的には、切り出し画像の右から数列左の列における連結画素グループ内の画素の平均輝度を描画するハネの輝度とする。最右列ではなく少し左を調べる理由は、最右列の場合、右端部をミクロに見たときに先端が先細りしたりかすれたりして極端に色味が薄くなるケースがあるためである。
【0092】
S1112では、S1107~S1111で決定した描画条件に基づいて、処理対象である変形後の文字画像の右部にある線分の右端部に対してハネを追加する描画処理が行われる。この描画処理によってハネが追加された画像はRAM204に保存される。
【0093】
以上が、右部ハネ追加処理の内容である。なお、よりリアルなハネに似せるために、例えば輝度についてハネの先端ほど薄くなるように描画したり、太さについて先端ほど細くなるように描画したりしてもよい点は、下部ハネ追加処理及び上部ハネ追加処理と同様である。
【0094】
<変形例>
なお、上述の実施形態においては、右部にハネを追加する場合のパターンとして縦線と横線が交差する文字を想定して、ハネを追加する線分を検出していた。しかしながら、例えば漢字の「二」では上の横線から下の横線に向かうハネが発生し得るため、このようなケースに着目したハネを追加するための線分の検出処理を追加してもよい。
【0095】
また、最終的な文字認識精度や誤認識の傾向からそれぞれのハネの追加率を調整してもよい。具体的には、上部、下部、右部の各ハネ追加処理をそれぞれ所定の確率で実行するようにし、より間違えやすいパターンについては学習データ中にも多く登場するようにその実行割合を上げるよう調整してもよい。さらには、この所定確率を文字列中の位置に応じて変更してもよい。例えば文字列中の一番右に配置される文字は上部ハネや下部ハネは発生しにくい。このような考えから、一番右に配置される文字については上部ハネと下部ハネの追加率を0%にし、右部のハネ追加処理のみ所定確率で行うようにしてもよい。このような調整によってさらに文字認識精度を向上させることができる。
【0096】
以上のとおり本実施形態によれば、物理的に収集した文字画像に対して現実に発生しやすく悪影響の少ない様々なハネ方を再現した学習画像を生成できる。これにより入力となる文字画像にハネがあった場合の文字認識精度を高めることができる。
【0097】
(その他の実施例)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。