(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022191771
(43)【公開日】2022-12-28
(54)【発明の名称】画像処理装置、画像処理方法及びプログラム
(51)【国際特許分類】
G06V 30/194 20220101AFI20221221BHJP
G06T 7/00 20170101ALI20221221BHJP
【FI】
G06K9/66
G06T7/00 350C
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2021100210
(22)【出願日】2021-06-16
(71)【出願人】
【識別番号】000001007
【氏名又は名称】キヤノン株式会社
(74)【代理人】
【識別番号】110001243
【氏名又は名称】弁理士法人谷・阿部特許事務所
(72)【発明者】
【氏名】世渡 秀和
(72)【発明者】
【氏名】奥間 啓水
(72)【発明者】
【氏名】前田 裕介
【テーマコード(参考)】
5B064
5L096
【Fターム(参考)】
5B064AA01
5B064AB03
5B064BA01
5B064CA05
5B064CA07
5B064CA12
5B064CA13
5B064CA15
5B064DA20
5B064DA26
5B064DA27
5L096BA08
5L096BA17
5L096CA14
5L096DA02
5L096EA02
5L096EA03
5L096EA07
5L096EA16
5L096EA45
5L096HA11
5L096KA04
(57)【要約】 (修正有)
【課題】他の行の文字の一部が入り込んでしまった文字ブロックを模した学習画像を効率よく生成し、他の行の文字の一部が入り込んだ文字ブロックに対しても高精度で文字認識可能な、手書き文字対応光学文字認識OCRを実現する画像処理装置、学習データの生成方法及びプログラムを提供する。
【解決手段】手書き文字を表した文字画像に対し、ノイズを付与する付与手段と、ノイズが付与された文字画像と正解クラスとを紐付けて、機械学習のための学習データを生成する生成手段と、を備える画像処理装置であって、ノイズ付与処理は、手書き文字を表した文字画像に対して、他の行の文字の一部が入り込んだようなノイズを再現するように、文字画像の端部近傍にノイズを付与した学習画像を生成して、ノイズが付与された文字画像と正解クラスとを紐付けて、機械学習を行う。
【選択図】
図7
【特許請求の範囲】
【請求項1】
手書き文字を表した文字画像に対し、ノイズを付与する付与手段と、
前記ノイズが付与された文字画像と正解クラスとを紐付けて、機械学習のための学習データを生成する生成手段と、
を備え、
前記付与手段は、前記文字画像の端部近傍に前記ノイズを付与する、
ことを特徴とした画像処理装置。
【請求項2】
前記付与手段は、
前記文字画像の枠を拡げる処理を行い、
前記枠を拡げた文字画像の端部近傍に前記ノイズを付与する、
ことを特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記付与手段は、上下左右いずれかの方向に枠を拡げ、当該拡げた方向の端部近傍に前記ノイズを付与する、ことを特徴とする請求項2に記載の画像処理装置。
【請求項4】
前記付与手段は、前記端部近傍に前記ノイズを付与する際に、端部に接するように前記ノイズを付与することを特徴とする請求項1乃至3のいずれか一項に記載の画像処理装置。
【請求項5】
前記付与手段は、前記文字画像内の手書き文字に対応する文字画素と前記ノイズに対応するノイズ画素とが接触するように、前記ノイズを付与することを特徴とする請求項1乃至4のいずれか一項に記載の画像処理装置。
【請求項6】
文書をスキャンして得られたスキャン画像から、前記文書に記載された文字に対応する矩形領域を取得する取得手段と、
前記矩形領域が前記文書に記載された複数の文字行に対応する場合、当該矩形領域を文字行単位の矩形領域に分離する分離手段と、
学習によって得られた学習済モデルを用いた推論によって、前記矩形領域に対する文字認識結果を出力する推論手段と、
をさらに備え、
前記推論手段は、
前記分離手段によって分離された矩形領域については、前記生成手段によって生成された学習データを用いた機械学習によって得られた学習済モデルによって前記推論を行い、
前記分離手段によって分離されなかった矩形領域については、前記付与手段でノイズが付与されていない前記文字画像と正解クラスとが紐付けられた学習データを用いた機械学習によって得られた学習済モデルによって前記推論を行う、
ことを特徴とする請求項1乃至5のいずれか一項に記載の画像処理装置。
【請求項7】
前記機械学習を行う学習手段をさらに備えたことを特徴とする請求項6に記載の画像処理装置。
【請求項8】
手書き文字を表した文字画像に対し、ノイズを付与する付与ステップと、
前記ノイズが付与された文字画像と正解クラスとを紐付けて、機械学習のための学習データを生成する生成ステップと、
を備え、
前記付与ステップでは、前記文字画像の端部近傍に前記ノイズを付与する、
ことを特徴とした学習データの生成方法。
【請求項9】
コンピュータを、請求項1乃至7のいずれか一項に記載の画像処理装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、学習データの生成技術に関する。
【背景技術】
【0002】
近年、コンピュータの普及に伴う労働環境の変化により、業務文書をスキャンして電子化する機会が増加している。こうした電子化対象の文書には例えば領収書など、手書き文字が記入されたものも存在するところ、電子化された文書を集計等のデータ解析に活用するために、手書き文字領域に対して光学文字認識(OCR)を行って文字データを抽出することが行われている。ここで、手書き文字に対応したOCR技術の1つに、ニューラルネットワークなどの機械学習を行って得た学習済モデルを用いる手法がある。この手法では、まず、手書きの文字が描画された文字画像と当該文字画像に含まれる文字をテキスト化した正解クラスとが対になった学習データ(教師データ或いは訓練データとも呼ばれる。)を用いて学習を行う。そして、学習済モデルに手書き文字を含んだ文字画像を入力することにより、スキャン文書中の手書き文字をテキスト情報として利用することが可能となる。
【0003】
一般に機械学習によって画像認識を実施するためには膨大な量の画像が学習データとして必要になるところ、手書き文字には様々な形状が存在し、あらゆるパターンの手書き文字の画像を全て網羅して収集することは困難である。そこで、用意した学習データ用の文字画像に対して回転や拡縮等の変形処理を行い、学習データを増強すること(Data Augmentation)が一般的に行われている。そして、変形処理の一例として、スキャンによって引き起こされる劣化等を模すために文字画像にノイズをランダムに付与する技術が提案されている(特許文献1)。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
領収書などの帳票に手書きされる文字は、帳票内に設けられた所定の枠(記入欄)からはみ出して記入されることも珍しくない。このように所定の枠からはみ出した手書き文字を含む文書のスキャン画像については、手書き文字領域にOCRを掛ける前に、例えば帳票内の罫線を基準に区切る等の手段を用いて、文字行毎に分離する処理(文字行分離処理)が通常行われる。
図17に文字行分離処理の具体例を示す。
図17の例では、手書きの金額を含む領収書のスキャン画像から抽出された手書き文字の矩形領域(文字ブロック)1700を、2つの文字ブロック1701及び1702に分離している。ここで、文字ブロック1702を見ると、本来であれば文字ブロック1701内に収まるべき文字の一部が入り込んでいるのが分かる。
【0006】
上記のような他の行の文字の一部が入り込んだ文字ブロックに対し、学習済モデルを用いたOCRで高い文字認識精度を得ようとすれば、他の行の文字の一部が入り込んだ画像(以下、「入込み画像」と呼ぶ。)を十分に学習しておく必要がある。ここで、
図17の例では上方向から文字の入り込みが起きているが、同様の入り込みは下方向や左右方向からも起こり得るものである。しかしながら、あらゆる方向からの様々な入り込み態様を網羅した入込み画像を大量に入手・作成することは困難である。そこで、データオーグメントにより学習データを増強することが考えられるが、特許文献1に開示されるようなノイズを画像内のランダムな位置に付与する手法では、
図17に例示したような入込み画像を効率よく生成することが困難であった。
【課題を解決するための手段】
【0007】
本開示の技術に係る画像処理装置は、手書き文字を表した文字画像に対し、ノイズを付与する付与手段と、前記ノイズが付与された文字画像と正解クラスとを紐付けて、機械学習のための学習データを生成する生成手段と、を備え、前記付与手段は、前記文字画像の端部近傍に前記ノイズを付与する、ことを特徴とする。
【発明の効果】
【0008】
本開示の技術によれば、他の行の文字の一部が入り込んでしまった文字ブロックを模した学習画像を効率よく生成することが可能となる。その結果、他の行の文字の一部が入り込んだ文字ブロックに対しても高精度で文字認識可能な、手書き文字対応OCRを実現することができる。
【図面の簡単な説明】
【0009】
【
図2】(a)は画像処理装置のハードウェア構成の一例を示したブロック図、(b)は端末装置のハードウェア構成の一例を示したブロック図。
【
図3】文字画像DBとしてのテーブルの一例を示す図。
【
図4】学習画像DBとしてのテーブルの一例を示す図。
【
図5】(a)は学習処理の流れを示すフローチャート、(b)は推論処理の流れを示すフローチャート。
【
図6】学習データ生成処理の流れを示すフローチャート。
【
図7】実施形態1に係る、ノイズ付与処理の詳細を示すフローチャート。
【
図9】文字列画像内のノイズ付与領域の具体例を示す図。
【
図10】文字列画像にノイズ画像を重畳して合成画像を生成する具体例を示す図。
【
図11】(a)は実施形態2に係るノイズ付与処理の詳細を示すフローチャート、(b)はノイズ画像生成処理の詳細を示すフローチャート。
【
図12】文字画像からノイズ画像を切り出す処理の具体例を示す図。
【
図13】実施形態3に係る、ノイズ付与処理の詳細を示すフローチャート。
【
図14】文字列画像の枠を拡張して、枠拡張画像を生成する具体例を示す図。
【
図15】枠拡張画像内のノイズ付与領域の具体例を示す図。
【
図16】枠拡張画像とノイズ画像を重畳して合成画像を生成する具体例を示す図。
【
図18】実施形態3に係る、ノイズ付与処理の詳細を示すフローチャート。
【
図19】ノイズ画素と文字画素との接触判定方法について説明する図。
【
図20】処理対象画像生成処理の流れを示すフローチャート。
【
図21】処理対象画像の生成処理の具体例を示す図。
【
図22】実施形態4に係る、推論処理の流れを示すフローチャート。
【
図24】(a)は実施形態1の変形例に係る学習処理の流れを示すフローチャート、(b)は実施形態1の変形例に係る推論処理の流れを示すフローチャート。
【
図25】実施形態1の変形例に係る学習画像DBとしてのテーブルの一例を示す図。
【発明を実施するための形態】
【0010】
以下、図面を参照して本発明の実施の形態を詳しく説明する。なお、以下の実施の形態は特許請求の範囲に係る発明を限定するものでなく、また実施の形態で説明されている特徴の組み合わせの全てが発明の解決手段に必須のものとは限らない。
【0011】
[実施形態1]
<画像処理システム>
図1は、本実施形態に係る、画像処理システムの構成の一例を示した図である。
図1に示すように、画像処理システムは、画像処理装置100、端末装置110で構成され、ネットワーク120を介して互いに接続される。
【0012】
画像処理装置100は、学習データ生成部101、学習部102、推論部103の各機能部を有する。学習データ生成部101は、学習部102にてニューラルネットワークのモデルを学習するための学習データを生成する。学習データは、手書き文字が描画された文字画像と、当該文字画像に含まれる手書き文字をテキスト化した正解クラスとが対になったデータである。学習データ生成部101で生成される学習データの詳細については
図4を用いて後述する。
【0013】
学習部102は、学習データ生成部101が生成した学習データを用いて、ニューラルネットワークのモデルを学習する。なお、学習部102によって生成されたニューラルネットワークのモデルを「学習済モデル」と呼称する。学習部102による学習処理については、
図5(a)を用いて後述する。推論部103は、入力された文字画像に対し、学習部102が生成した学習済モデルを用いた推論によって、クラス情報を出力する。推論部103による推論処理については、
図5(b)用いて後述する。
【0014】
端末装置110は、例えばPCやスマートフォンなどの情報処理装置である。ユーザやシステム管理者は、端末装置110からネットワーク120を介して画像処理装置100へアクセスして、学習の実行指示や学習済モデルの確認をすることができる。
【0015】
ネットワーク120は、画像処理装置100と端末装置110との間を接続するLANや公衆回線(WAN)等であって、ネットワーク120を介して装置間でのデータの送受信が行われる。
【0016】
なお、上記のシステム構成は一例であり、本実施形態における説明に必要な機能のみを図示している。本実施形態に開示の技術を実現できる構成であれば、各装置はどのような論理構成であってもよい。例えば、
図1に示す構成では、推論部103が画像処理装置100に組み込まれているが、画像処理装置100とは別の装置が推論部103を有していてもよい。
【0017】
<ハードウェア構成>
図2は、
図1に示す画像処理システムにおける画像処理装置100及び端末装置110のハードウェア構成の一例を示したブロック図である。
【0018】
図2(a)は、画像処理装置100のハードウェア構成を示す図である。
図2(a)に示すように、画像処理装置100は、CPU201、ROM202、RAM204、ストレージ205、入力デバイス206、表示デバイス207、外部I/F208、GPU209で構成され、データバス203を介して互いに接続される。
【0019】
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などを用いて帳票などの原稿を走査し、得られた電気信号データを変換して画像データを生成する装置である。
【0020】
図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との間で各種データやコマンド等をやり取りするためのインタフェースである。
【0021】
<学習データについて>
次に、ニューラルネットワークの学習に用いる、文字画像と正解クラスとが対になった学習データについて説明する。ここで、用語について定義しておく。実際に手書きされた文書のスキャン画像から手書き文字の領域を一文字単位で切り出すことによって得られる画像を「文字画像」と呼ぶこととする。そして、この文字画像に対して学習データ生成部101が変形処理を行って得た画像を「学習画像」と呼ぶこととする。
【0022】
≪文字画像データベース≫
図3は、文字画像を保存するためのデータベース(以下、「文字画像DB」と表記)としてのテーブルの一例を示す図である。文字画像DBとしてのテーブル300には、「レコードID」301、「文字画像」302、「正解クラス」303の各項目に対応するデータ又は値が格納される。なお、文字画像DBは、ストレージ205の記憶領域の一部が専用に割り当てられるものとする。
【0023】
「レコードID」301は、テーブル300内の各レコードを一意に識別するための識別情報が入るフィールドである。このレコードIDは、テーブル300へレコードが追加される度に、レコードに対して付与される。「文字画像」302は、手書き文字の文字1つ1つに対応する画像データが入るフィールドである。「正解クラス」303は、文字画像内に含まれる手書き文字をテキストデータとして保持するフィールドである。いま、
図3に示すテーブル300には、手書き数字の文字画像とその正解クラスとを紐付けた4つのレコード304~307が例示されている。
【0024】
前述のとおり、テーブル300に格納される各文字画像は、例えば、手書き文字を含んだ文書などをスキャンして得られた画像から手書き文字の部分だけを文字毎に切り出すことによって得られるものであるが、文字画像の取得方法はこれに限定されない。また、
図3に示すテーブル300のように複数の文字画像を一括して管理するのではなく、例えば正解クラス毎にテーブルを設けて管理してもよい。
【0025】
≪学習画像データベース≫
次に、学習データ生成部101が、上述の文字画像DBに格納された文字画像に対して変形処理を行って生成する、ニューラルネットワークの学習に用いる学習画像について説明する。
図4は、学習データ生成部101が生成した学習画像を保存するためのデータベース(以下、「学習画像DB」と表記)としてのテーブルの一例を示す図である。学習画像DBとしてのテーブル400には、「レコードID」401、「学習画像」402、「正解クラス」403の各項目に対応するデータ又は値が格納される。なお、学習画像DBは、ストレージ205の記憶領域の一部が専用に割り当てられるものとする。
【0026】
「レコードID」401は、テーブル400内の各レコードを一意に識別するための識別情報が入るフィールドである。この「レコードID」401の値は、テーブル400へレコードが追加される度に、レコードに対して付与される。「学習画像」402は、文字画像を変形して生成された画像データを保持するフィールドである。「正解クラス」403は、学習画像内に含まれる文字をテキストデータとして保持するフィールドである。いま、
図4に示すテーブル400には、
図3のテーブル300のレコード304~307の各文字画像に変形処理を施して得られた学習画像とその正解クラスとを紐付けた4つのレコード404~407が示されている。なお、
図4のテーブルに示す具体例では、1つの学習画像に含まれる文字数が1~3個であるがその上限は任意に設定さればよい。例えば上限を15文字に設定し、その範囲の中で文字画像を並べ変えるなどして任意の文字数から成る学習画像を生成する構成をとってもよいし、上限を1文字に設定し、1文字の文字画像のみで学習画像を生成する構成としてもよい。
【0027】
<学習処理>
次に、学習部102による学習処理について、
図5(a)を用いて説明する。
図5(a)は、学習処理の流れを示すフローチャートである。
図5(a)のフローチャートに示す各ステップは、CPU201が、ROM202等に格納された所定のプログラムをRAM204に展開し、これを実行することで実現される。学習処理は、ユーザが、画像処理装置100の入力デバイス206を介した所定の操作に応答して、或いはネットワーク120を介して端末装置110などから受け付けた所定の入力信号をトリガーとして開始される。本実施形態において、ニューラルネットワークの学習にはミニバッチ法を用いるものとする。なお、以下の説明において記号「S」はステップを意味する。
【0028】
S501では、学習画像DBから、学習に必要な学習データのデータセットが取得される。具体的には、学習画像DBとしてのテーブル400に含まれる各レコードを参照して、学習画像と正解クラスとの対からなる学習データが取得される。
【0029】
S502では、ニューラルネットワークが初期化される。具体的には、ニューラルネットワークを構築し、当該ニューラルネットワークに含まれるパラメータの値を、ランダムに決定する。構築するニューラルネットワークの構造は様々なものを用いることができるが、例えば、CNN(Convolutional Neural Networks)のような形態を取り得る。
【0030】
S503では、S501で読み込んだ学習データのうち所定の数(ミニバッチサイズ、例えば10個。ミニバッチの学習形態をとらないのであれば1個)の学習データが取得される。そして、S504及びS505にて、ニューラルネットワークの学習を行う。
【0031】
S504では、ニューラルネットワークの誤差が算出される。具体的には、S503で取得したミニバッチ内の各学習データに含まれる学習画像をニューラルネットワークに入力して学習画像内の文字を表すクラス情報を出力し、当該出力と正解クラスとの差を評価して誤差を求める処理が行われる。当該評価には指標としてCTC(Connectionist Temporal Classification)Lossなどを用いることができる。
【0032】
S505では、ニューラルネットワークのパラメータが調整される。具体的には、S504にて算出した誤差に基づき、例えばバックプロパゲーション法によってニューラルネットワークのパラメータを変更する処理が行われる。
【0033】
S506では、学習を終了するか否かが判定される。具体的には、S503~S505の処理を所定回数(例えば、40000回)行ったか否かがチェックされる。ここで所定回数は、例えば学習処理の開始時にユーザが所望の回数を入力するなどして決定すればよい。所定回数の処理が完了していた場合には終了と判定し、S507に遷移する。所定回数の処理が完了していない場合はS503に戻ってニューラルネットワークの学習が続行される。
【0034】
S507では、学習結果として、S505にて調整したニューラルネットワークのパラメータで構成される学習済モデルがストレージ205に保存され、本処理を終了する。
【0035】
以上が、学習処理の内容である。なお、
図5(a)のフローチャートでは、学習データ取得処理(S501)において、事前に生成した学習データを読み込むように処理しているが、学習データと学習処理を並行して行ってもよい。すなわち、学習データ取得処理(S501)に先立って後述の学習データ生成処理を実行し、生成された学習データから順次読み込んで取得するような構成でもよい。
【0036】
<推論処理>
次に、推論部103による推論処理について
図5(b)を用いて説明する。
図5(b)は、本実施形態に係る推論処理の流れを示すフローチャートである。
図5(b)のフローチャートに示す各ステップは、CPU201が、ROM202等に格納された所定のプログラムをRAM204に展開し、これを実行することで実現される。推論処理は、ユーザが、画像処理装置100の入力デバイス206を介した所定の操作に応答して、或いはネットワーク120を介して端末装置110などから受け付けた所定の入力信号をトリガーとして開始される。なお、以下の説明において記号「S」はステップを意味する。
【0037】
S511では、学習済モデルの読み込みが行われる。具体的には、まず、前述の
図5(a)のフローチャートのS502で構築されたニューラルネットワークと同一構造のニューラルネットワークが構築され、構築したニューラルネットワークに、前述のS507で保存された学習済モデルが反映される。
【0038】
S512では、推論処理の対象となる画像(以降、「処理対象画像」と呼称する。)を生成する処理が実行される。この処理は、一般に「ブロックセレクション」と呼ばれ、これにより得られた画像は「文字ブロック」と呼ばれる。処理対象画像生成処理の詳細については後述する。
【0039】
S513では、S512で生成された処理対象画像のうち注目する処理対象画像が学習済モデルに入力される。これにより、注目する処理対象画像に含まれる文字に対応したテキスト情報が、推論結果として出力される。
【0040】
S514では、S513で取得した推論結果(文字認識結果)が送信される。本実施形態では、ネットワーク120を介して端末装置110に送信されることになる。なお、推論結果を端末装置110に送信するのではなく、ストレージ205に保存するような構成をとってもよい。
【0041】
S515では、推論処理を終了するか否かが判定される。S512で生成された全ての処理対象画像についての推論処理が完了していた場合は、本処理を終了する。一方、未処理の処理対象画像が残っている場合はS513に戻って次の注目する処理対象画像を学習済モデルに入力して推論処理を続行する。
【0042】
以上が、推論処理の内容である。
【0043】
<処理対象画像生成処理>
次に、
図20のフローチャートを参照して、推論処理の詳細について説明する。
【0044】
S2001では、スキャナデバイス210において原稿をスキャンして、スキャン画像が生成される。
図21(a)に示す画像2100は、手書きで金額が記入された領収書をスキャンして得られたスキャン画像の具体例である。このようなスキャン画像が、本ステップで取得される。
【0045】
S2002では、S2001で取得したスキャン画像から、手書き文字に対応する画素(手書き画素)を抽出する処理が行われる。この抽出には、例えばスキャン画像を構成する各画素の輝度特徴に基づき手書き画素か否かを判定する手法など公知技術を適用すればよい。これにより、スキャン画像のうち手書き文字に対応する領域のみを抜き出した画像(以下、「手書き抽出画像」と呼ぶ。)が得られる。
図21(b)に示す画像2101は、
図21(a)に示すスキャン画像2100から得られた手書き抽出画像の具体例である。このような手書き抽出画像が、本ステップで取得される。
【0046】
S2003では、S2002で取得した手書き抽出画像に基づき、手書き文字部分だけを表した矩形領域(手書き文字ブロック)を特定する処理が行われる。具体的な手順は以下のとおりである。まず、手書き抽出画像の各画素を黒画素と白画素に二値化処理する。次に、二値化処理の結果から黒画素塊を検出して、黒画素塊毎に外接矩形を求める。次に、各黒画素塊の外接矩形同士の中心間距離を算出し、所定の閾値以下である近接した画素塊同士をグルーピングする。これをグルーピングできなくなるまで繰り返す。以上の処理によって手書き文字ブロックを得ることができる。
図21(c)は、
図21(b)に示す手書き抽出画像2101から得られた手書き文字ブロックの具体例であり、2つの手書き文字ブロック2102及び2103が得られている。そして、手書き文字ブロック2103は、上下2行分の文字行を含んでいるのが分かる。このような手書き文字ブロックが、本ステップで取得される。
【0047】
S2004では、S2003で取得した手書き文字ブロックのうち注目する手書き文字ブロックについて、複数の文字行が含まれているか否かが判定される。この判定は、例えばスキャン対象文書内に印刷された罫線を用いる。具体的には、まず、注目する手書き文字ブロックにおける罫線に対応する画素を特定する。次に、当該特定された画素が表す線分で囲われた領域内部に手書き画素が存在しており、かつ、そのような領域同士が接触している場合には文字行が複数あると判断する。このような判定の結果、注目する手書き文字ブロック内に複数の文字行が含まれていなければ、注目する手書き文字ブロックは処理対象画像として決定されて、S2005をスキップしてS2006に進む。一方、含まれていればS2005に進む。
【0048】
S2005では、注目する手書き文字ブロックに対し、文字行毎の矩形領域に分離する処理(文字行分離処理)が行われる。例えば上述した罫線に対応する画素が表す線分の位置で切り分けることで、文字行単位の手書き文字ブロックに分離することができる。
図21(d)は、文字行分離処理の具体例を示しており、前述の手書き文字ブロック2103が、2つの手書き文字ブロック2104及び2105に分離されている。こうして、文字行単位に分離された各手書き文字ブロックはそれぞれが処理対象画像として決定されて、S2006に進む。
【0049】
S2006では、S2003で取得された全ての手書き文字ブロックが処理されたか否かが判定される。未処理の手書き文字ブロックが残っている場合はS2004に戻って次の注目する手書き文字ブロックを決定して処理を続行する。一方、全ての手書き文字ブロックが処理されていれば、本処理を終了する。
【0050】
以上が、処理対象画像生成処理の内容である。これにより、手書き文字部分とそれ以外の部分とを、二値(白画素又は黒画素)で表した文字行単位の手書き文字ブロックが、処理対象画像として生成される。
【0051】
<学習データ生成処理>
続いて、学習データ生成部101による学習データ生成処理について、
図6を用いて説明する。
図6は、学習データ生成処理の大まかな流れを示すフローチャートである。
図6のフローチャートに示す各ステップは、CPU201が、ROM202等に格納された所定のプログラムをRAM204に展開し、これを実行することで実現される。学習データ生成処理は、画像処理装置100の入力デバイス206を介した所定のユーザ操作に応答して、或いはネットワーク120を介して端末装置110などから受け付けた所定の入力信号をトリガーとして開始される。なお、以下の説明において記号「S」はステップを意味する。
【0052】
S601では、これから生成する文字列画像における文字列長(すなわち、何文字分の文字画像を用いて学習画像を生成するか)がランダムに決定される。この際、最小文字列長は例えば“1”、最大文字列長は例えば“15”であるが、いずれも任意の値を設定可能である。
【0053】
S602では、文字画像DB(例えば上述のテーブル300)から、一文字分の文字画像とその正解クラスのペアがランダムに取得される。なお、ここで取得される文字画像は、変形処理を施す前の物理的に収集した文字画像である。生成される学習データに偏りが生じないように取得できればよく、正解クラスを順に変更するなど取得対象に何らかの限定を加えてもよい。
【0054】
S603では、S602で取得された文字画像に対して変形処理が行われる。具体的には、所定の範囲内でランダムに選択したスケールでの拡大・縮小或いは膨張・収縮処理が行われる。また同様に、所定の範囲内でランダムに選択された角度での回転処理や、所定の範囲内でランダムに選択された比率でのアスペクト比変更処理が行われる。
【0055】
S604では、S601で決定した文字列長分の処理が完了したか否かが判定される。決定された文字列長分の処理が完了していた場合はS605に進み、完了していなければS602に戻って処理が続行される。
【0056】
S605では、ここまでの処理で生成された複数文字分の変形後の文字画像を合成した文字列画像が生成される。具体的な合成方法としては、例えば変形後の文字画像を生成された順番に右に並べて連結することにより、文字列画像が生成される。また同じ順番で、変形後の文字画像の基になった文字画像の正解クラスを右に並べて、生成された文字列画像に対応する正解クラスとする。こうして得られた文字列画像と正解クラスのデータはRAM204に保持される。
【0057】
S606では、ノイズ付与処理を実行するか否かが決定される。例えば実行する確率を50%に設定していた場合は、“0”又は“1”を乱数によりランダムに出力し、出力値が“0”であれば「実行する」に決定し、“1”であれば「実行しない」に決定すればよい。なお、上記の50%という確率値は一例であり、0%以外の任意の値とすればよい。「実行する」と決定された場合はS607に進み、「実行しない」と決定された場合はS608に進む。
【0058】
S607では、S605にて生成された文字列画像に対し、ノイズ付与処理が実行される。ノイズ付与処理の詳細については後述する。
【0059】
S608では、ノイズ付与処理が実行されたか否かによって処理の振り分けがなされる。ノイズ付与処理が実行されていない場合はS609に進み、実行されている場合はS610に進む。
【0060】
S609では、S605で生成された文字列画像を学習画像とし、これにS602で取得された正解クラスを紐付けて、学習画像DBに学習データとして登録する処理が行われる。また、S610では、S607でノイズ付与処理が施された文字列画像を学習画像とし、これにS602で取得された正解クラスを紐付けて、学習画像DBに学習データとして登録する処理が行われる。なお、S610で登録される学習データに含まれる正解クラスはS602で取得された正解クラスのままなので、前述の学習処理においてノイズを無視するように学習されることになる。
【0061】
S611では、学習データの生成処理を終了するか否かが判定される。ここでの終了条件は、所定個数の文字列画像の生成が完了した場合などである。終了条件を満たしていない場合は、S601に戻って処理が続行される。終了条件を満たしている場合は、学習データ生成処理を終了する。
【0062】
以上が、学習データ生成処理の大まかな内容である。
【0063】
<ノイズ付与処理の詳細>
続いて、
図7のフローチャートを参照して、本実施形態に係るノイズ付与処理について詳しく説明する。
【0064】
S701では、文字列画像1枚に対して付与するノイズの個数がランダムに決定される。個数の範囲は例えば1~3個であるが、任意の個数を設定すればよい。
【0065】
S702では、S701で決定された個数のノイズを文字列画像内のどの位置に付与するのかがランダムに決定される。例えば、文字列画像を上下左右の4つの領域に分け、それぞれの領域に付与する確率を25%とする場合、“0~3”の範囲で何れかの値を乱数によりランダムに出力する。そして、出力値が“0”であればノイズ付与位置を“上”に、“1”であればノイズ付与位置を“下”に、“2”であればノイズ付与位置を“左”に、“3”であればノイズ付与位置を“右”に決定する。このようにして、ノイズ付与位置がランダムに決定される。なお、25%という確率値は一例であり、これに限るものではない。例えば文字の入り込みは左右よりも上下で起こることが多いため、上下それぞれの位置で付与する確率を多くなるように設定してもよい。なお、S701で決定した個数が2個以上の時、ノイズ付与位置は同じにしてもよいし(例えば全て上など)、異ならせてもよい(例えば上と下など)。
【0066】
S703では、ノイズ画像が生成される。
図8はノイズ画像の生成方法を説明する図である。
図8に示すようにノイズ画像の生成には文字画像を用いる。使用する文字画像は、文字画像DBに格納された文字画像をランダムに選択して取得する。以下、
図8に示す具体例に基づき説明する。まず、文字画像800の幅に収まるようランダムにX座標を決定する。次に、文字画像800の高さに収まるようランダムにY座標を決定する。そして、決定したX座標とY座標からそれぞれ下垂直方向及び右水平方向に所定の幅と高さの分だけ文字画像から切り出して、ノイズ画像801が得られる。ここで、所定の幅と高さは、文字画像800の幅及び高さを基準にした所定の割合(例えば1~40%)をそれぞれ予め決定しておけばよい。なお、上述したノイズ画像生成方法は一例であり、例えば画像処理で線分などを描画することによりノイズ画像を生成してもよい。
【0067】
S704では、S702で決定したノイズ付与位置が上であるか否かが判定される。ノイズ付与位置が上であった場合はS705に進み、そうでない場合はS706に進む。そして、S705では、文字列画像内の上端近傍に他の行の文字の一部が入り込んだかのようなノイズが再現されるよう、文字列画像内のノイズ付与領域が決定される。
【0068】
S706では、S702で決定したノイズ付与位置が下であるか否かが判定される。ノイズ付与位置が下であった場合はS707に進み、そうでない場合はS708に進む。そして、S707では、文字列画像内の下端近傍に他の行の文字の一部が入り込んだかのようなノイズが再現されるよう、文字列画像内のノイズ付与領域が決定される。
【0069】
S708では、S702で決定したノイズ付与位置が左であるか否かが判定される。ノイズ付与位置が左であった場合はS709に進み、そうでない場合はS710に進む。そして、S709では、文字列画像内の左端近傍に他の行の文字の一部が入り込んだかのようなノイズが再現されるよう、文字列画像内のノイズ付与領域が決定される。また、S710では、文字列画像内の右端近傍に他の行の文字の一部が入り込んだかのようなノイズが再現されるよう、文字列画像内のノイズ付与領域が決定される。
【0070】
図9の(a)~(e)は、ノイズ付与領域を文字列画像の端部近傍に決定する具体例を示す図である。S705では、
図9(a)に示す文字列画像900の上端近傍にノイズ付与位置が含まれるよう、
図9(b)に示すようなノイズ付与領域901が決定される。ここで、文字列画像900の幅をW、文字列画像900の高さをH、文字列画像900に占めるノイズ付与領域の割合をRとすると、ノイズ付与領域901は座標(0,0)を左上端点、座標(W-1,H*R-1)を右下端点とする領域となる。この場合の割合Rの範囲は例えば5~15%とする。同様に、S707では、
図9(a)に示す文字列画像900の下端近傍にノイズ付与位置が含まれるよう、
図9(c)に示すようなノイズ付与領域902が決定される。この場合のノイズ付与領域902は座標(0,H*(1-R))を左上端点、座標(W-1,H-1)を右下端点とする領域となる。同様にS709では、
図9(a)に示す文字列画像900の左端近傍にノイズ付与位置が含まれるよう、
図9(d)に示すようなノイズ付与領域903が決定される。この場合のノイズ付与領域903は座標(0,0)を左上端点、座標(W*R-1,H-1)を右下端点とする領域となる。同様にS710では、
図9(a)に示す文字列画像900の右端近傍にノイズ付与位置が含まれるよう、
図9(e)に示すようなノイズ付与領域904が決定される。この場合のノイズ付与領域904は座標(W*(1-R),0)を左上端点、座標(W-1,H-1)を右下端点とする領域となる。
【0071】
S711では、S703で生成したノイズ画像を文字列画像に重畳させて、両画像を合成する処理が行われる。ノイズ画像を重畳する位置は、S705、S707、S709、S710にて決定したノイズ付与領域内からランダムに決定すればよい。
図10に具体例を示す。
図10の例では、
図9に示す文字列画像900の上端近傍に
図8に示すノイズ画像801を重畳することで、合成画像1000が得られている。ノイズ画像は
図10に示すように文字列画像の端部に接しない状態で合成してもよいし、後述の
図16で例示するように端部に接した状態で合成してもよい。合成画像1000のように、ノイズ画像が文字列画像の上端に接しない状態で重畳された合成画像は、他の行の文字の一部に対応する線分が途切れた状態で、下の文字列領域に入り込んでいる状態を再現するものである。こうして生成された合成画像はRAM204に保存される。
【0072】
S712では、S701にて決定された所定個数のノイズを付与する処理が完了したか否かが判定される。所定個数のノイズ付与が完了していた場合は本処理を終了する。一方、所定個数のノイズ付与が完了していない場合は、S702に戻って処理が続行される。
【0073】
以上がノイズ付与処理の内容である。なお、このようにして生成された、ノイズが付与された文字列画像を学習画像として用いて学習する際には、ノイズ付与した学習画像だけで学習してもいいし、ノイズ付与していない学習画像と混ぜて学習してもよい。
【0074】
<変形例>
前述のとおり、
図20のフローチャートでは、手書き文字ブロックに複数の文字行が含まれる場合に文字行分離処理を行って文字行単位の処理対象画像が生成される。ここで、文字行分離処理によって得られた処理対象画像は他の文字行の一部が入り込んだ「入込み画像」となる可能性があるが、文字行分離処理に拠らずに得られた処理対象画像は「入込み画像」となる可能性が低い。そこで、処理対象画像が文字行分離処理によって得られたものであるかどうかにより、推論時に利用する学習済モデルを切り替えてもよい。
【0075】
本変形例の場合、学習画像と正解クラスとのペアを学習画像DBに登録する際に、ノイズ付与フラグを併せて登録するようにする。
図25は、本変形例に係る学習画像DBとしてのテーブルの一例を示している。
図25に示すテーブル2500には、「レコードID」2501、「学習画像」2502、「正解クラス」2503、「ノイズ付与フラグ」2504の4項目が存在している。そして、レコード2505~2507にはノイズ付与が行われていないことを示すフラグ値“0”が入り、レコード2508にはノイズ付与が行われたことを示すフラグ値“1”が入っている。
【0076】
続いて、本変形例に係る学習処理について、
図24(a)のフローチャートを参照して説明する。ただし、上述の実施形態に係る
図5(a)のフローチャートと共通する内容(S502~S506)については説明を省く。
【0077】
S2401では、合成画像を含む学習データを使用して学習を行うのか、合成画像を含まない学習データを使用して学習を行うのかによって処理が振り分けられる。どのような学習データを使用して学習を行うのか、どのような場合に学習データの生成を終了するのについては本フローチャートの開始に先立ってユーザが指示するなどして設定すればよい。ここで「合成画像を含む学習データ」とは、ノイズが付与された学習画像とノイズが付与されていない学習画像を混在させた学習データを意味する。また、「合成画像を含まない学習データ」とは、ノイズが付与されていない学習画像のみで構成した学習データを意味する。合成画像を含む学習データを使用して学習を行う場合はS2402に進み、合成画像を含まない学習データを使用して学習を行う場合はS2403に進む。
【0078】
S2402では、学習画像DBから合成画像を含む学習データ(以下、「第1学習データ」と表記)が学習画像DBから取得される。この際、ノイズ付与フラグのフラグ値が“1”のレコードのデータセットが取得されることになる。一方、S2403では、学習画像DBから合成画像を含まない学習データ(以下、「第2学習データ」と表記)が学習画像DBから取得される。この際、ノイズ付与フラグのフラグ値が“0”のレコードのデータセットが取得されることになる。
【0079】
S2404では、学習に使用した学習データが合成画像を含む学習データであったか、合成画像を含まない学習データであったかによって処理が振り分けられる。合成画像を含む学習データを使用して学習を行った場合はS2405に進み、合成画像を含まない学習データを使用して学習を行った場合はS2406に進む。
【0080】
S2405では、合成画像を含む学習データに基づく学習結果として、S505にて調整したニューラルネットワークのパラメータで構成される学習済モデル(以下、「第1学習済モデル」と表記)が、ストレージ205に保存される。また、S2406では、合成画像を含まない学習データに基づく学習結果として、S505にて調整したニューラルネットワークのパラメータで構成される学習済モデル(以下、「第2学習済モデル」と表記)が、ストレージ205に保存される。
【0081】
S2407では、学習処理を終了するか否かが判定する。ここでの終了条件は、例えば第1学習済モデルと第2学習済モデルの両方を生成したか否かなどである。終了条件を満たしていれば本処理を終了し、終了条件を満たしていなければS2401に戻って処理を続行する。以上が、本変形例に係る学習処理の内容である。
【0082】
続いて、本変形例に係る推論処理について、
図24(b)のフローチャートを参照して説明する。ただし、上述の実施形態に係る
図5(b)のフローチャートと共通する内容(S512、S514、S515)については説明を省く。
【0083】
S2411では、上述の第1及び/又は第2学習済モデルの読み込みが行われる。そして、処理対象画像生成処理(S512)に続くS2412では、注目する処理対象画像が文字行分離処理によって生成されたものであるか否かによって処理が振り分けられる。文字行分離処理によって生成されていた場合はS2413に進み、そうでない場合はS2414に進む。
【0084】
S2413では、注目する処理対象画像が、合成画像を含む学習データを用いた学習を行って得られた第1学習済モデルに入力される。また、S2414では、注目する処理対象画像が、合成画像を含まない学習データを用いた学習を行って得られた第2学習済モデルに入力される。これにより、注目する処理対象画像に含まれる文字に対応したテキスト情報が、推論結果として出力される。以上が、本変形例に係る推論処理の内容である。
【0085】
本変形例によれば、処理対象画像毎に適切な推論器を適用するので、手書き文字用OCRにおける誤認識をより低減することが可能になる。
【0086】
以上のとおり上記変形例を含む本実施形態によれば、文字の入り込みを再現した学習画像を効率よく生成することができる。そして、本実施形態によって生成した学習画像を学習することにより、帳票内の別の記入項目に記載された文字の一部などが文字列画像中に入り込んでしまっているような場合でも、手書き文字用OCRにおける誤認識を低減することができる。
【0087】
[実施形態2]
実施形態1では、文字画像内のランダムな位置から切り出してノイズ画像を生成していた。次に、ノイズの付与位置に応じて文字画像からの切り出し位置を決定する態様を、実施形態2として説明する。なお、システムの基本構成など実施形態1と共通の内容については説明を省略し、以下では差異点であるノイズ付与処理について説明することとする。
【0088】
<本実施形態の概要>
本実施形態に係るノイズ付与処理では、ノイズ付与位置が上の場合は、手書きOCRの対象となる文字列画像の上方に位置する他の手書き文字列の一部が、当該文字列画像に上から入り込んだ場合を模すようなノイズを付与したい。よって、重畳させるノイズ画像は、文字画像の下端から切り出すようにする。同様に、ノイズ付与位置が下の場合は文字画像の上端から、ノイズ付与位置が左の場合は文字画像の右端から、ノイズ付与位置が右の場合は文字画像の左端から、それぞれノイズ画像を切り出すようにする。
【0089】
<ノイズ付与処理>
図11(a)は、本実施形態に係るノイズ付与処理の詳細を示すフローチャートである。実施形態1に係る
図7のフローチャートとの違いはS703’のノイズ画像生成処理のみである。S703’以外の参照符号が同じステップ(S701、S702、S704~S712)については特に異なるところはないので説明を省くこととする。
図11(b)は、本実施形態に係るノイズ画像生成処理の詳細を示すフローチャートである。以下、
図11(b)のフローに沿って説明する。
【0090】
S1101では、S702で決定したノイズ付与位置が上であるか否かが判定される。ノイズ付与位置が上であった場合はS1102に進み、そうでない場合はS1103に進む。そして、S1102では、文字画像の下端を切り出してノイズ画像が生成される。
【0091】
S1103では、S702で決定したノイズ付与位置が下であるか否かが判定される。ノイズ付与位置が下であった場合はS1104に進み、そうでない場合はS1105に進む。そして、S1104では、文字画像の上端を切り出してノイズ画像が生成される。
【0092】
S1105では、S702で決定したノイズ付与位置が左であるか否かが判定される。ノイズ付与位置が左であった場合はS1106に進み、そうでない場合はS1107に進む。そして、S1106では、文字画像の右端を切り出してノイズ画像が生成される。また、S1107では、文字画像の左端を切り出してノイズ画像が生成される。
【0093】
図12の(a)~(e)は、本実施形態に係るノイズ画像生成の具体例を示す図である。
図12(a)に示す文字画像1200は、
図8の文字画像800と同様、文字画像DBからランダムに選択された文字画像である。下端又は上端から切り出す場合、まず、文字画像1200の高さを基準にした所定の長さを決定する。次に、文字画像1200の下端又は上端から、決定した長さに対応する分の画像領域を切り出す。これにより
図12(b)に示す下端から切り出したノイズ画像1201又は
図12(c)に示す上端から切り出したノイズ画像1202が得られる。ここで、所定の長さは、文字画像1200の高さを基準にした所定の割合(例えば1~40%)を決定しておけばよい。同様に、左端又は右端から切り出す場合、まず、文字画像1200の幅を基準にした所定の長さを決定する。次に、文字画像1200の左端又は右端から、決定した長さに対応する分の画像領域を切り出す。これにより
図12(d)に示す右端から切り出したノイズ画像1203又は
図12(e)に示す左端から切り出したノイズ画像1204が得られる。ここで、所定の長さは、文字画像1200の幅を基準にした所定の割合(例えば1~40%)を決定しておけばよい。
【0094】
以上が、本実施形態に係るノイズ画像生成処理の内容である。
【0095】
以上のとおり本実施形態によれば、現実的に発生し得る文字の入り込み態様をよりよく再現したノイズ画像が生成されるので、より精度の高い学習済モデルを得ることが可能になる。
【0096】
[実施形態3]
実施形態1では、ノイズ付与位置に基づくノイズ付与領域(文字列画像内の座標)をランダムに決定し、ノイズ画像を文字列画像に重畳して合成画像を生成していた。次に、ノイズを付与する前の文字列画像に対し枠を拡げる処理を行い、ノイズ画像を文字列画像の端部に接するように付与する態様を実施形態3として説明する。なお、システムの基本構成など実施形態1と共通の内容については説明を省略し、以下では差異点であるノイズ付与処理について説明することとする。
【0097】
<ノイズ付与処理>
図13は、本実施形態に係るノイズ付与処理の詳細を示すフローチャートである。実施形態1に係る
図7のフローチャートとの違いはS1301~S1309であり、それら以外の参照符号が同じステップ(S701~S708、S712)については特に異なるところはないので説明を省くこととする。以下、
図13のフローに沿って説明する。
【0098】
ノイズ付与位置が上に決定された場合(S702、S704でYes)のS1301では、文字列画像の上方向に枠を拡げる処理が行われる。
【0099】
ノイズ付与位置が下に決定された場合(S702、S706でYes)のS1303では、文字列画像の下方向に枠を拡げる処理が行われる。
【0100】
ノイズ付与位置が左に決定された場合(S702、S708でYes)のS1305では、文字列画像の左方向に枠を拡げる処理が行われる。
【0101】
ノイズ付与位置が右に決定された場合(S702、S708でNo)のS1307では、文字列画像の右方向に枠を拡げる処理が行われる。
【0102】
図14の(a)~(e)は、上記各方向に枠を拡げる処理によって生成される画像(枠拡張画像)の具体例を示す図である。
【0103】
上方向に枠を拡げる場合、まず、文字列画像1400の高さを基準にした所定の長さを決定する。次に、決定された長さ分の余白を、文字列画像1400の上方向に付加する。これにより
図14(b)に示す枠拡張画像1401が得られる。
【0104】
下方向に枠を拡げる場合も同様に、まず、文字列画像1400の高さを基準にした所定の長さを決定する。次に、決定された長さ分の余白を、文字列画像1400の下方向に付加する。これにより
図14(c)に示す枠拡張画像1402が得られる。
【0105】
左方向に枠を拡げる場合も同様に、まず、文字列画像1400の高さを基準にした所定の長さを決定する。次に、決定された長さ分の余白を、文字列画像1400の左方向に付加する。これにより
図14(d)に示す枠拡張画像1403が得られる。
【0106】
右方向に枠を拡げる場合も同様に、まず、文字列画像1400の高さを基準にした所定の長さを決定する。次に、決定された長さ分の余白を、文字列画像1400の右方向に付加する。これにより
図14(e)に示す枠拡張画像1404が得られる。
【0107】
ここで、余白部の画素は白を現し、グレースケールであれば画素値“255”、RGB3チャンネルであれば画素値(255、255、255)とすればよい。或いは、例えば白紙をスキャンして得た画像の一部を切り出して余白部として張り付けてもよい。また、所定の長さは、文字画像1200の高さを基準にした所定の割合(例えば1~25%)を決定しておけばよい。以上のように、S1301、S1303、S1305、S1307の各処理において、所定の方向に文字列画像の枠を拡げた枠拡張画像が得られる。
【0108】
続いて、ノイズ付与位置が上に決定された場合(S702、S704でYes)のS1302では、ノイズ付与位置が枠拡張画像の上端と接するようにノイズ付与領域が決定される。
【0109】
また、ノイズ付与位置が下に決定された場合(S702、S706でYes)のS1304では、ノイズ付与位置が枠拡張画像の下端と接するようにノイズ付与領域が決定される。
【0110】
また、ノイズ付与位置が左に決定された場合(S702、S708でYes)のS1306では、ノイズ付与位置が枠拡張画像の左端と接するようにノイズ付与領域が決定される。
【0111】
また、ノイズ付与位置が右に決定された場合(S702、S708でNo)のS1308では、ノイズ付与位置が枠拡張画像の右端と接するようにノイズ付与領域が決定される。
【0112】
図15の(a)~(i)は、本実施形態に係るノイズ付与領域の決定の具体例を示す図である。
【0113】
上方向に枠が拡張された場合のS1302では、
図15(a)に示す枠拡張画像1401の上端と接するように、
図15(b)に破線で示すようなノイズ付与領域1501が決定される。ここで、枠拡張画像1401の幅をW、枠拡張画像1401の高さをHとすると、ノイズ付与領域1501は座標(0,0)を左上端点、座標(W,0)を右下端点とする領域となる。
【0114】
下方向に枠が拡張された場合のS1304では、
図15(c)に示す枠拡張画像1402の下端と接するように、
図15(d)に破線で示すようなノイズ付与領域1502が決定される。このノイズ付与領域1502は、枠拡張画像1402の幅をW、枠拡張画像1402の高さをH、
図15(i)に示すノイズ画像1500の幅をw、高さをhとすると、座標(0,H-h-1)を左上端点、座標(W,H-h-1)を右下端点とする領域となる。
【0115】
左方向に枠が拡張された場合の1306では、
図15(e)に示す枠拡張画像1403の左端と接するように、
図15(f)に破線で示すようなノイズ付与領域1503が決定される。枠拡張画像1403の幅をW、枠拡張画像1403の高さをHとすると、ノイズ付与領域1503は座標(0,0)を左上端点、座標(0,H)を右下端点とする領域となる。
【0116】
右方向に枠が拡張された場合の1308では、
図15(g)に示す枠拡張画像1404の右端と接するように、
図15(h)に破線で示すようなノイズ付与領域1504が決定される。枠拡張画像1404の幅をW、枠拡張画像1404の高さをH、
図15(i)に示すノイズ画像1500の幅をw、高さをhとすると、ノイズ付与領域1504は座標(W-w-1,0)を左上端点、座標(W-w-1,H)を右下端点とする領域となる。
【0117】
S1309では、S703で生成したノイズ画像を、S1301、S1303、S1305、S1307で生成された枠拡張画像に重畳させて、両画像を合成する処理が行われる。ノイズ画像を重畳する位置は、S1302、S1304、S1306、S1308にて決定したノイズ付与領域内からランダムに決定すればよい。
図16は、
図14(b)に示す枠拡張画像1401の上端に接するように
図15(i)に示すノイズ画像1500を重畳して合成した場合の例であり、これにより合成画像1600が得られる。
【0118】
以上が、本実施形態に係るノイズ付与処理の内容である。なお、S703においては、実施形態2で説明した
図11(b)のフローチャートで説明した方法で、ノイズ画像の生成を行ってもよい。また、実施形態1で説明したように、ノイズ画像は
図10に示すように枠拡張画像の端部に接しない状態で合成してもよい。
【0119】
以上のとおり本実施形態によれば、現実的に発生し得る文字の入り込み態様をよりよく再現したノイズ画像が生成されるので、より精度の高い学習済モデルを得ることが可能になる。
【0120】
[実施形態4]
推論処理において、学習済モデルに入力する前の処理対象画像に対し、孤立点ノイズの除去処理を行う場合がある。これにより、処理対象画像内のノイズに対応する画素(ノイズ画素)のうち、文字に対応する画素(文字画素)と接触していない部分(孤立点ノイズを構成する画素)が除去される。つまり、文字画素と接触していないノイズ画素は除去され、文字画素と接触しているノイズ画素は除去されずに残ることになる。その結果、孤立点ノイズの除去処理をOCRの前処理として行う場合、学習済モデルに入力され得る処理対象画像は、ノイズのない画像或いは文字画素とノイズ画素とが接触している画像のどちらかとなる。ここで、実施形態1~3で生成される学習画像としての合成画像には、文字画素とノイズ画素とが接触していないタイプの合成画像も含まれる。つまり、孤立点ノイズの除去処理をOCRの前処理として行う場合の処理対処画像とはなり得ないタイプの合成画像も学習画像として生成していることになる。そこで、ノイズ付与処理において、ノイズ画素と文字画素とが接触しているタイプの合成画像のみを生成する態様を、実施形態4として説明する。なお、システムの基本構成など実施形態1と共通の内容については説明を省略し、以下では差異点である推論処理及びノイズ付与処理について説明することとする。
【0121】
<推論処理>
図22は、本実施形態に係る推論処理の流れを示すフローチャートである。実施形態1に係る
図5(b)のフローチャートとの違いはS2201であり、それ以外の参照符号が同じステップ(S511、S512、S513~S515)については特に異なるところはないので説明を省くこととする。以下、
図22のフローに沿って説明する。
【0122】
S2201では、S512で生成された処理対象画像のうち注目する処理対象画像に対し孤立点ノイズを除去する処理が実行される。前述のとおり処理対象画像は、手書き文字部分とそれ以外の部分を白黒二値で表した文字行単位の手書き文字ブロックである。よって、注目する処理対象画像内の黒画素塊のうち、その面積(画素数)が所定の閾値以下である小さなサイズの黒画素塊を白画素塊に変換することで、孤立点ノイズを取り除くことができる。
図23は、孤立点ノイズ除去処理の具体例を示す図である。いま、処理対象画像2300内には孤立点ノイズ2301が存在している。孤立点ノイズ除去処理によって孤立点ノイズ2301が除去された新たな処理対象画像2302が得られる。なお、上述した孤立点除去の方法は一例であり、これに限定されない。
【0123】
以上が、本実施形態に係る処理対象画像生成処理の内容である。
【0124】
<ノイズ付与処理>
図18は、本実施形態に係るノイズ付与処理の詳細を示すフローチャートである。実施形態1に係る
図7のフローチャートとの違いはS1801及びS1802が追加されている点である。これら以外の参照符号が同じステップ(S701~S712)については特に異なるところはないので説明を省くこととする。以下、
図18のフローに沿って説明する。
【0125】
S1801では、S711で生成された合成画像において、ノイズ画素と文字画素とが接触しているか否かが判定される。ここで、
図19を参照してノイズ画素と文字画素との接触判定方法について説明する。まず、合成画像1900におけるノイズ画像を重畳した領域1901内の黒画素数P1を取得する。続いて、合成前の文字列画像1902内のノイズ画像を重畳する領域1903内の黒画素数P2を取得する。ここで領域1903は、領域1901と同じ座標かつ同じサイズである。次に、ノイズ画像1001内の黒画素数P3を取得する。そして、P1<P2+P3の関係にある場合、合成画像内のノイズ画素と文字画素とが接触していると判定する。なお、この接触判定方法は一例であり、これに限るものではない。ノイズ画素と文字画素とが接触していると判定された場合はS1802に進み、接触していないと判定された場合はS712に進む。
【0126】
S1802では、S711で生成された合成画像が破棄、すなわち、RAM204から削除される。合成画像を破棄した後はS703に戻って、ノイズ画像の生成から処理をやり直す。
【0127】
以上が、本実施形態に係るノイズ付与処理の内容である。なお、S703においては、実施形態2で説明した
図11(b)のフローチャートで説明した方法で、ノイズ画像の生成を行ってもよい。また、S711でノイズ画像を文字列画像の端部に重畳させるのに代えて、実施形態3で説明したように枠を拡張した文字列画像を生成しその端部に接するようノイズ画像を配置してもよい。その際にはノイズ画素と文字画素とが接触するよう、ノイズ画像を拡大してから重畳させればよい。
【0128】
以上のとおり本実施形態によれば、ノイズ付与処理においてノイズ画素と文字画素とが接触した合成画像を生成する。こうして生成された合成画像を用いて学習を行うことにより、孤立点ノイズを除去するOCRシステムを使用する際の誤認識を低減することができる。
【0129】
(その他の実施例)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。