図1は、実施形態に係る認識装置10の構成を示す図である。認識装置10は、例えばスキャナ等により読み取られた入力画像に含まれる文字列を認識し、認識した文字列を出力する。
認識装置10は、入力部30と、入力画像記憶部32と、様式データ記憶部34と、候補検出部36と、候補記憶部38と、文字認識辞書記憶部40と、認識部42と、知識辞書記憶部44と、照合部46と、照合結果記憶部48と、禁則辞書記憶部50と、禁則処理部52と、結果抽出部54と、出力部56を備える。
入力部30は、スキャナ等により取り込まれた入力画像を入力する。入力部30は、ネットワーク等を介して他のコンピュータから入力画像を入力してもよい。入力画像記憶部32は、入力部30により入力された入力画像を記憶する。
様式データ記憶部34は、入力画像における文字列が記載された領域を特定する様式データを記憶する。
候補検出部36は、様式データ記憶部34に記憶された様式データに基づいて、入力画像から、文字候補を検出する。それぞれの文字候補は、1つの文字を含むと推測される画素の集合である。候補検出部36は、検出した文字候補を候補記憶部38に書き込む。
候補記憶部38は、文字候補を記憶する。さらに、候補記憶部38は、文字候補のそれぞれに対応させて、その文字候補の認識結果の候補の文字である認識候補を記憶する。
文字認識辞書記憶部40は、文字認識辞書を記憶する。文字認識辞書は、認識対象の画像と、予め登録された文字のそれぞれとの類似度を算出するための情報を格納する。
認識部42は、文字認識辞書記憶部40に記憶された文字認識辞書に基づいて、候補記憶部38に記憶された文字候補のそれぞれを認識する。そして、認識部42は、1つの文字候補に対して、認識結果の候補の文字である少なくとも1つの認識候補を生成する。認識部42は、生成した少なくとも1つの認識候補を、文字候補に対応付けて候補記憶部38に書き込む。
知識辞書記憶部44は、認識対象の文字列をモデル化した知識辞書を記憶する。本実施形態においては、知識辞書は、認識対象の文字列をモデル化した決定性有限オートマトンである。
照合部46は、少なくとも1つの認識候補のそれぞれを知識辞書と照合して、入力画像に含まれると推測される文字列と知識辞書を照合して得られる少なくとも1つの照合結果を生成する。この過程において、照合部46は、対応する文字列の尤もらしさを表すスコアを含む照合結果を生成する。そして、照合部46は、生成した少なくとも1つの照合結果を照合結果記憶部48に書き込む。
照合結果記憶部48は、照合部46により生成された少なくとも1つの照合結果を記憶する。照合結果記憶部48は、文字候補の認識候補を並べて得られる文字列を先頭から知識辞書と照合していく過程における開始時点、途中段階および完了時点での照合結果を記憶する。なお、照合部46は、照合の途中段階において、記憶領域を節約することを目的として、スコアの低い照合結果を削除してもよい。
禁則辞書記憶部50は、禁止対象の文字列をモデル化した禁則辞書を記憶する。本実施形態においては、禁則辞書は、禁止対象の文字列をモデル化した決定性有限オートマトンである。
禁則処理部52は、少なくとも1つの照合結果のうち、禁止対象の文字列を含む文字列と知識辞書を照合して得られた照合結果を削除する。本実施形態において、禁則処理部52は、照合結果により特定されるそれぞれの文字列を決定性有限オートマトンである禁則辞書と照合し、文字列が禁則辞書の決定性有限オートマトンで受理された場合、対応する照合結果を削除する。
禁則処理部52は、照合部46による照合の途中段階において禁止対象の文字列を含む文字列と知識辞書を照合して得られた照合結果が発生した場合、その途中段階の照合結果を削除してもよい。また、禁則処理部52は、照合部46による照合が全て完了した後において、複数の照合結果のそれぞれに禁止対象の文字列を含むかを照合して、禁止対象の文字列を含む文字列と知識辞書を照合して得られた照合結果を削除してもよい。
結果抽出部54は、照合部46による照合および禁則処理部52による削除が全て完了した後において、照合結果記憶部48に記憶された少なくとも1つの照合結果からスコアに基づき1個以上の照合結果を選択し、選択した1個以上の照合結果により特定される文字列を抽出する。結果抽出部54は、一例として、スコアが最も良い照合結果により特定される文字列を抽出する。
出力部56は、結果抽出部54により抽出された文字列を外部へと出力する。
図2は、実施形態に係る認識装置10の処理を示すフロー図である。まず、ステップS1において、認識装置10は、入力画像を入力する。
続いて、ステップS2において、認識装置10は、入力画像から、1つの文字を含むと推測される画素の集合である文字候補を検出する。続いて、ステップS3において、認識装置10は、文字認識辞書に基づいて、文字候補のそれぞれを認識して、認識結果の候補の文字である少なくとも1つの認識候補を生成する。
続いて、ステップS4において、認識装置10は、少なくとも1つの認識候補のそれぞれを知識辞書と照合して、入力画像に含まれると推測される文字列と知識辞書を照合して得られる少なくとも1つの照合結果を生成する。これとともに、ステップS4において、認識装置10は、照合結果により特定されるそれぞれの文字列を禁則辞書と照合し、禁則辞書の決定性有限オートマトンで受理される文字列と知識辞書を照合して得られた照合結果を削除する。
続いて、ステップS5において、認識装置10は、照合処理が全て完了した後において、照合結果からスコアに基づき1つの照合結果を選択し、選択した照合結果により特定される文字列を抽出し、認識結果の文字列とする。文字候補の個数が0個の場合、すなわち入力画像上に文字が含まれない場合、ステップS5において選択すべき照合結果が生成されないが、この場合は認識結果の文字列を空文字列とする。最後に、ステップS6において、認識装置10は、認識結果の文字列を出力する。
図3は、入力画像の一例を示す図である。本実施形態において、入力画像は、図3に示すように、商品を発注するための注文書をスキャナ等により取り込んで得られた画像データである。入力画像の予め定められた記入枠の内側には、発注者の名前が記入されている。本実施形態において、認識装置10は、予め定められた記入枠の内側に記入された日本語の名前の文字列を認識し、認識した文字列を表すテキストデータを出力する。
図4は、様式データの構成を示す図である。様式データ記憶部34は、予め作成された様式データを記憶する。
様式データは、図4に示すように、入力画像に含まれる記入枠の個数を示す値と、記入枠の個数分の記入枠レコードを格納する配列を含む。本例において、配列の最初のエントリのインデックスは、0である。すなわち、配列は、0オリジンである。なお、本実施形態で用いる他の配列も、特別の記載が無い限り0オリジンである。記入枠レコードのそれぞれは、入力画像に含まれるそれぞれの記入枠に一対一で対応する。
それぞれの記入枠レコードは、入力画像内における、対応する記入枠の位置を示す情報を含む。本例において、記入枠の位置を示す情報は、対応する記入枠の左右の端のX座標(横方向の座標)および上下の端のY座標(縦方向の座標)である。
図5は、入力画像から一連の文字候補を生成する処理を示す図である。候補検出部36は、記入枠レコードに示された情報に基づいて記入枠の領域を特定し(例えば図5中の点線で囲まれた領域)、特定した領域から部分領域画像を抽出する。続いて、候補検出部36は、抽出した部分領域画像を二値化して二値画像を生成する。続いて、候補検出部36は、二値画像上で黒画素の連結成分を抽出し、それぞれの連結成分に対してラベリングを行う。ラベリングしたそれぞれの連結成分は、文字を構成する要素であり、断片と呼ぶ。続いて、候補検出部36は、連続して並んだ1個以上の断片を組み合わせて、文字候補を生成する。文字候補は、1個の文字を表していると推測される画素の集合である。
図6は、断片データの構成を示す図である。候補記憶部38は、断片を表す断片データを記憶する。断片データは、図6に示すように、断片の個数を示す値と、断片の個数分の断片レコードを格納する配列を含む。断片レコードのそれぞれは、それぞれの断片と一対一で対応する。
それぞれの断片レコードは、対応する断片の位置を示す情報と、断片の形状を示す二値画像を含む。本例において、断片の位置を示す情報は、対応する断片の左右の端のX座標および上下の端のY座標であり、当該断片の外接矩形を示す。断片の形状を示す二値画像は、当該断片の外接矩形内で当該連結成分上の画素を黒画素とし、残りを白画素とした画像である。
候補検出部36は、それぞれの断片について、中心のX座標と、中心のY座標を算出する。中心のX座標は、左右の端のX座標の平均値である。中心のY座標は、上下の端のY座標の平均値である。そして、候補検出部36は、配列内の複数の断片レコードを、中心のX座標の昇順に整列する。これにより、候補検出部36は、配列内の複数の断片レコードを、記入枠における文字記入方向(本例では左から右に向かう方向)に整列することができる。
図7は、断片番号の一例を示す図である。それぞれの断片レコードは、配列のインデックスにより識別される。断片レコードを文字記入方向に整列した後のインデックスを、断片番号と呼ぶ。従って、それぞれの断片には、図7に示すように断片番号が対応付けられる。
図8は、文字候補データの構成を示す図である。候補検出部36は、連続して並んだ1個以上の断片を組み合わせて、文字候補を生成する。この過程において、候補検出部36は、外接の矩形の横幅Lが予め定められた長さ(Lmax)以下となる全てのパターンで1個以上の断片を組み合わせて、文字候補を生成する。
候補記憶部38は、文字候補を表す文字候補データを記憶する。文字候補データは、図8に示すように、生成した文字候補の個数を示す値と、文字候補マトリクス(詳細後述)と、文字候補の個数分の文字候補レコードを格納する配列を含む。文字候補レコードのそれぞれは、それぞれの文字候補と一対一で対応する。
それぞれの文字候補レコードは、対応する文字候補の位置を示す情報と、対応する文字候補の始点番号および終点番号(詳細後述)と、文字候補の形状を示す二値画像と、認識候補エントリを含む認識候補の配列(詳細後述)を含む。本例において、文字候補の位置を示す情報は、対応する文字候補の左右の端のX座標および上下の端のY座標であり、二値画像上での当該文字候補の外接矩形を示す。文字候補の形状を示す二値画像は、当該文字候補の外接矩形内で当該文字候補上の画素を黒画素とし、残りを白画素とした画像である。認識候補エントリは、認識部42により値が設定され、候補検出部36では値は設定されない。
図9は、文字候補番号の一例を示す図である。それぞれの文字候補レコードは、配列のインデックスにより識別される。文字候補レコードのインデックスを、文字候補番号と呼ぶ。従って、それぞれの文字候補には、図9に示すように文字候補番号が対応付けられる。
図10は、文字候補の始点番号および終点番号の一例を示す図である。文字候補は、連続して並んだ1個以上の断片を組み合わせて生成される。このため文字候補は、元となった1個以上の断片の並びのうちの先頭の断片に対する断片番号と、最後の断片に対する断片番号に1を加算した値とのセットで、一意に識別することができる。
本実施形態では、先頭の断片に対する断片番号を、その文字候補の始点番号と呼び、最後の断片に対する断片番号に1を加算した値を、その文字候補の終点番号と呼ぶ。従って、それぞれの文字候補には、図10に示すように、始点番号および終点番号が対応付けられる。なお、始点番号および終点番号は、文字候補の区切り位置を表すことから、始点番号および終点番号の両者をまとめて位置番号とも呼ぶ。
図11は、文字候補マトリクスの一例を示す図である。文字候補マトリクスは、図11に示すように、始点番号を第1インデックス、終点番号を第2インデックスとする文字候補番号の二次元配列である。文字候補マトリクスは、文字候補レコードの生成の開始前に、全てのエントリを−1に設定することで初期化される。そして、候補検出部36は、文字候補を作成する毎に、文字候補マトリクスの対応するエントリに文字候補番号を書き込む。
図12は、文字認識辞書の構成を示す図である。文字認識辞書記憶部40は、予め作成された文字認識辞書を記憶する。文字認識辞書は、図12に示すように、辞書エントリの個数を示す値と、辞書エントリを格納する配列を含む。
それぞれの辞書エントリは、文字コードと、予め定められたDsub個の基底ベクトルを含む。基底ベクトルは、文字コードに対応する文字を表す部分空間の特徴ベクトルである。特徴ベクトルは、一例として、対応する文字の二値画像を縦方向および横方向に予め任意に定めた個数で分割し、分割した領域のそれぞれの黒画素の個数の比率を求め、求めた一連の比率を特徴ベクトルの要素とすることで算出される。
図13は、認識候補の配列の構成を示す図である。文字候補レコードに格納される認識候補の配列は、図13に示すように、予め定められたNcand個の認識候補エントリを含む。それぞれの認識候補エントリは、文字コードと、類似度を含む。
認識部42は、文字候補のそれぞれに対して文字認識をして、認識結果の候補の文字である少なくとも1つの認識候補を生成する。本実施形態においては、認識部42は、それぞれの文字候補レコードに対して、予め定められたNcand個の認識候補エントリを生成して、認識候補の配列に書き込む。
より具体的には、認識部42は、対応する文字候補レコードに含まれる二値画像から特徴ベクトルを抽出し、文字認識辞書のそれぞれの辞書エントリに格納された基底ベクトルと部分空間法により照合して類似度を算出する。認識部42は、類似度が上位Ncand個の辞書エントリのそれぞれについて、その辞書エントリに格納された文字コードを抽出し、抽出した文字コードと算出した類似度を含む認識候補エントリを生成する。そして、認識部42は、生成したNcand個の認識候補エントリを対応する文字候補レコードの認識候補の配列に書き込む。さらに、認識部42は、それぞれの文字候補レコードの認識候補の配列に含まれる認識候補エントリを、類似度の降順で整列する。
図14は、知識辞書の構成を示す図である。知識辞書記憶部44は、設計者等が予め作成した知識辞書を記憶する。
本実施形態において、知識辞書は、認識対象の文字列をモデル化した決定性有限オートマトンである。本実施形態では、決定性有限オートマトンである知識辞書を、DFAαとも呼ぶ。DFAαは、例えば、設計者が認識対象の文字列を正規表現で記述し、その正規表現を決定性有限オートマトンに変換することで生成される。
DFAαは、図14に示すように、状態数を示す値と、状態の数分の状態レコードを格納する状態配列と、エッジの数分のエッジレコードを格納するエッジ配列を含む。
それぞれの状態レコードは、DFAαに含まれるそれぞれの状態と一対一に対応し、状態は状態レコードの番号すなわち状態番号で一意に識別される。なお、状態配列は0オリジンであり、従って状態番号が0の状態は開始状態である。それぞれの状態レコードは、受理状態フラグと、エッジ配列内のエッジレコードへのポインタと、エッジレコードの要素数を含む。
受理状態フラグは、当該状態が受理状態であるか否かを示す。受理状態フラグは、一例として、1の場合に受理状態であることを示し、0の場合に受理状態ではないことを示す。
エッジレコードへのポインタは、エッジ配列内における、当該状態から出て行くエッジの集合の格納位置を示す。エッジレコードの要素数は、当該状態から出て行くエッジの個数を表す。エッジレコードへのポインタおよび要素数により、当該状態から出て行く全てのエッジに対応するエッジレコードを特定することができる。
それぞれのエッジレコードは、DFAαに含まれるそれぞれのエッジと一対一に対応する。それぞれのエッジレコードは、遷移先の状態番号と、コードを含む。
遷移先の状態番号は、当該エッジによる遷移先の状態を特定する状態番号を表す。
コードは、当該エッジにより表される遷移を起こす入力記号を表す。本実施形態においては、コードには、文字を表す文字コードが格納される。従って、DFAαでは、認識候補の文字を表す文字コードにより、ある状態から他の状態への遷移が起きる。
図15は、禁則辞書の構成を示す図である。禁則辞書記憶部50は、設計者等が予め作成した禁則辞書を記憶する。
本実施形態において、禁則辞書は、禁止対象の文字列をモデル化した決定性有限オートマトンである。禁止対象の文字列は、入力が禁止される文字列、入力がありえない文字列および不自然な文字列等であり、例えば設計者により定義される。本実施形態では、決定性有限オートマトンである禁則辞書を、DFAβとも呼ぶ。
DFAβは、図15に示すように、状態数を示す値と、状態の数分の状態レコードを格納する状態配列と、エッジの数分のエッジレコードを格納するエッジ配列を含む。禁則辞書を構成するそれぞれの要素は、図14に示した知識辞書(DFAα)と同一であるので詳細な説明は省略する。
DFAβは、設計者が禁止対象の文字列を正規表現で記述し(モデル化し)、その正規表現を第一の非決定性有限オートマトンに変換し、第一の非決定性有限オートマトンを第二の非決定性有限オートマトンに変換し、第二の非決定性有限オートマトンを決定性オートマトンに変換することで得られる。
図16は、第一の非決定性有限オートマトンの一例を示す図である。図17は、第一の非決定性有限オートマトンを変換することで得られる第二の非決定性有限オートマトンの一例を示す図である。図16に示すオートマトンでは、開始状態から受理状態までの経路上の入力記号列が、禁止対象の文字列を表す。
第二の非決定性有限オートマトンは、図16に示すような第一の非決定性有限オートマトンを、次の手続きで変換することにより得られる。まず、第一の非決定性有限オートマトンに、開始状態から開始状態へと戻り、全ての文字(コード)が入力記号として割り当てられた自己ループのエッジが追加される。続いて、自己ループが追加されたオートマトンに、開始状態を除く全ての状態のそれぞれから開始状態へと戻り、空記号εが入力記号として割り当てられた空エッジ(ε遷移)を追加することで図17に示すような第二の非決定性有限オートマトンが得られる。
すなわち、第二の非決定性有限オートマトンは、図17に示すように、開始状態から受理状態までの経路上の入力記号列が、禁止対象の文字列を表す。さらに、第二の非決定性有限オートマトンは、開始状態から開始状態へと戻り全ての文字が入力記号として割り当てられた自己ループのエッジと、開始状態を除く全ての状態のそれぞれから開始状態へと戻り空記号が入力記号として割り当てられた空エッジを含む。
このように構成した第二の非決定性有限オートマトンを決定性有限オートマトンに変換することで得られるDFAβは、禁止対象の文字列をモデル化したものとなっており、禁止対象の文字列を含む文字列を入力した場合に、受理状態に確実に遷移するように構成されている。
なお、正規表現から非決定性有限オートマトンまたは決定性有限オートマトンを生成する方法、非決定性有限オートマトンから決定性有限オートマトンを生成する方法は、例えば、A.V.エイホ,R.セシィ,J.D.ウルマン著、原田健一訳、コンパイラI,初版 1986、pp.134−172等に記載されている。
図18は、照合結果データの構成を示す図である。照合部46は、文字候補に含まれる認識候補のそれぞれを、先頭から順次に知識辞書と照合して、入力画像の記入枠内に記載されていると推測される文字列と知識辞書を照合して得られる照合結果を生成する。そして、照合部46は、生成した照合結果を、照合結果記憶部48に書き込む。これとともに、禁則処理部52は、照合結果により特定される文字列を、禁則辞書と照合して、禁則辞書の決定性有限オートマトンで受理される文字列を表す照合結果を照合結果記憶部48から削除する。
照合結果記憶部48は、照合結果データを記憶する。照合結果データは、それぞれの位置番号毎に、照合結果の個数と、照合結果の配列を含む。
照合結果の個数は、当該位置番号に関連付けられた照合結果の個数を表す。照合結果の配列は、当該位置番号に関連付けられた照合結果を格納する。それぞれの照合結果は、状態番号αと、状態番号βと、スコアと、コードと、位置番号および照合結果の番号のペアを含む。また、それぞれの照合結果は、格納先の配列が関連付けられた位置番号および、格納先の配列内での配列要素としての番号のペアで一意に識別される。以降では、照合結果の格納先の配列が関連付けられた位置番号を「照合結果が関連付けられた位置番号」、照合結果の格納先の配列内での配列要素としての番号を「照合結果の番号」と呼称する。
状態番号αは、知識辞書(DFAα)の状態を表す。すなわち、状態番号αは、先頭の認識候補から当該位置の認識候補までのそれぞれの文字に応じて、DFAαを開始状態から順次に遷移させた場合に到達する状態を示す。
状態番号βは、禁則辞書(DFAβ)の状態を表す。すなわち、状態番号βは、当該照合結果により特定される文字列に含まれるそれぞれの文字に応じて、DFAβを開始状態から順次に遷移させた場合に到達する状態を示す。
スコアは、先頭の認識候補から当該位置の認識候補までのそれぞれに対応付けられた類似度を累積した値を表す。すなわち、スコアは、先頭の認識候補から当該位置の認識候補までの文字列の尤もらしさを表す。コードは、当該位置の認識候補の文字を表す文字コードである。
位置番号および照合結果の番号のペアは、先頭から当該位置まで1個ずつ文字候補をたどりながら文字候補の認識候補を入力記号としてDFAαを遷移させながら照合結果を生成していく過程における、直前の照合結果が関連付けられた位置番号および、直前の照合結果の番号を表す。位置番号および照合結果の番号のペアは、結果抽出部54が認識結果の文字列を抽出する際に参照される。
図19は、照合処理を示すフロー図である。図2のステップS4に示した照合処理の詳細について図19を参照して説明する。
まず、ステップS11において、照合部46は、照合結果データを初期化する。具体的には、照合部46は、照合結果データの全ての位置番号について、照合結果の個数を0に設定するとともに、照合結果の配列を空にする。
続いて、ステップS12において、照合部46は、位置番号0に関連付けて、新たな1つの照合結果を生成する。新たな1つの照合結果は、状態番号αおよび状態番号βが0に、スコアが0に、位置番号および照合結果の番号が−1に、コードが−1に設定される。続いて、ステップS13において、照合部46は、位置番号0に関連付けられた照合結果の個数を1に設定する。続いて、ステップS14において、照合部46は、位置番号を表す変数Pstに0を代入する。
続いて、ステップS15において、照合部46は、Pstが、Pstmax以下であるか否かを判断する。Pstmaxは、最後の位置番号Pedから1を減じた値である。照合部46は、PstがPstmax以下である場合(ステップS15の真)、処理をステップS16に進める。
ステップS16において、照合部46は、禁則処理部52を呼び出す。ステップS16において、禁則処理部52は、位置番号Pstに関連付けられたそれぞれの照合結果について、禁則辞書を用いて禁則辞書探索処理を実行する。これにより、禁則処理部52は、禁止対象の文字列を含む文字列と知識辞書を照合して得られた照合結果を削除することができる。なお、禁則辞書探索処理の詳細については、図22および図23を参照して後述する。
続いて、ステップS17において、照合部46は、Pstに関連付けられた照合結果を、スコアが最上位からNpr番目までに絞り込む。すなわち、照合部46は、スコアがNpr番目より低い照合結果を削除する。
続いて、ステップS18において、照合部46は、Pstに関連付けられたそれぞれの照合結果に対して、知識辞書を用いて知識辞書探索処理を実行する。これにより、照合部46は、Pstより後ろの位置番号に関連付けた新たな照合結果を生成することができる。なお、知識辞書探索処理については、図20および図21を参照して後述する。
続いて、ステップS19において、照合部46は、Pstに1を加算する。照合部46は、ステップS19を終了すると、処理をステップS15に戻す。そして、照合部46は、PstがPstmaxを超えるまで、ステップS16からステップS19の処理を繰り返す。
PstがPstmax以下ではなくなった場合(ステップS15の偽)、照合部46は、処理をステップS20に進める。ステップS20において、照合部46は、禁則処理部52を呼び出す。ステップS20において、禁則処理部52は、最後の位置番号Pedに関連付けられたそれぞれの照合結果について、禁則辞書を用いて禁則辞書探索処理を実行する。これにより、禁則処理部52は、禁止対象の文字列を知識辞書と照合した結果得られる照合結果を削除することができる。そして、照合部46は、ステップS20の処理を終えると、本フローを終了する。
図20は、知識辞書探索処理を示すフローチャートである。図21は、知識辞書探索処理でのデータアクセスの流れの一例を示す。
図20および図21を参照しながら、図19のステップS18の知識辞書探索処理を説明する。まず、ステップS31において、照合部46は、照合結果データを参照し、Pstに関連付けられた全ての照合結果を列挙する。
続いて、ステップS32において、照合部46は、文字候補データの配列内の文字候補レコードを参照し、Pstを始点位置とする全ての文字候補を列挙する。照合部46は、文字候補マトリクスにおける始点番号がPstに一致する全てのエントリを走査し、−1以外の文字候補の番号を収集することで、Pstを始点位置とする全ての文字候補を列挙することができる。
続いて、照合部46は、ステップS32で列挙した全ての文字候補レコードのそれぞれに対して、ステップS34〜ステップS48の処理を実行する(ステップS33とステップS49との間のループ処理)。以降ではこのループ処理における処理対象の文字候補レコードに対応する文字候補を「文字候補Cc」と称する。
ステップS34において、照合部46は、文字候補Ccに対応する文字候補レコードの認識候補の配列を参照し、当該文字候補の全ての認識候補エントリを列挙する。
続いて、照合部46は、ステップS34で列挙した全ての認識候補エントリのそれぞれに対して、ステップS36〜ステップS47の処理を実行する(ステップS35とステップS48との間のループ処理)。以降ではこのループ処理における処理対象の認識候補エントリに対応する認識候補を「認識候補Cr」と称する。
続いて、照合部46は、ステップS31で列挙した、Pstに関連付けられた全ての照合結果のそれぞれに対して、ステップS37〜ステップS46の処理を実行する(ステップS36とステップS47との間のループ処理)。以降ではこのループ処理における処理対象の照合結果を「照合結果Mp」と称する。
ステップS37において、照合部46は、知識辞書(DFAα)を参照して、照合結果Mpに含まれる状態番号αに対応する状態レコードを列挙する。
続いて、ステップS38において、照合部46は、ステップS37で列挙した状態レコードに含まれるエッジレコードへのポインタおよびエッジレコードの要素数により、状態番号αの状態から出て行くエッジを表すエッジレコードの格納された範囲を特定することで、状態番号αの状態から出て行くエッジを表す全てのエッジレコードを列挙する。
続いて、照合部46は、ステップS38で列挙した全てのエッジレコードのそれぞれに対して、ステップS40〜ステップS45の処理を実行する(ステップS39とステップS46との間のループ処理)。以降ではこのループ処理における処理対象のエッジレコードを「エッジレコードEr」と称する。
ステップS40において、照合部46は、認識候補Crの認識候補エントリに設定された文字コードと、エッジレコードErに設定された文字コードとが一致するか否かを判断する。一致しない場合(ステップS40のNo)、照合部46は、次のエッジレコードに処理を移し、ステップS40からの処理を繰り返す。一致する場合(ステップS40のYes)、照合部46は、処理をステップS41に進める。
ステップS41において、照合部46は、文字候補Ccの文字候補レコードの終点位置に関連付けて新しい照合結果Mnを生成して、照合結果データに書き込む。
続いて、ステップS42において、照合部46は、新しい照合結果Mnに状態番号αとして、エッジレコードErに設定された状態番号(遷移先の状態番号)を設定する。また、照合部46は、新しい照合結果Mnに状態番号βとして−1を設定する。
続いて、ステップS43において、照合部46は、新しい照合結果Mnにコードとして、認識候補Crの認識候補エントリに設定された文字コードを設定する。
続いて、ステップS44において、照合部46は、新しい照合結果Mnに位置番号として、照合結果Mpが関連付けられた位置番号Pstを設定する。また、照合部46は、新しい照合結果Mnに照合結果の番号として、照合結果Mpの番号を格納する。
続いて、ステップS45において、照合部46は、新しい照合結果Mnにスコアとして、照合結果Mpに格納されたスコアと、認識候補Crの認識候補エントリに格納された類似度を加算した値を設定する。
ステップS46において、照合部46は、全てのエッジレコードについて、ステップS40〜ステップS45の処理を終えると、ループを抜けて処理をステップS47に進める。
ステップS47において、照合部46は、Pstに関連付けられた全ての照合結果について、ステップS37〜ステップS46の処理を終えると、ループを抜けて処理をステップS48に進める。
ステップS48において、照合部46は、文字候補Ccに対応する全ての認識候補エントリについて、ステップS36〜ステップS47の処理を終えると、ループを抜けて処理をステップS49に進める。
そして、ステップS49において、照合部46は、全ての文字候補レコードについて、ステップS34〜ステップS48の処理を終えると、ループを抜けて、本フローを終了する。
このように照合部46は、第1の文字候補の照合結果に、照合により到達した知識辞書(DFAα)の状態を示す番号(状態番号α)を書き込む。そして、照合部46は、第1の文字候補に続く第2の文字候補を知識辞書(DFAα)と照合する際、第1の文字候補の照合結果に書き込まれた番号(状態番号α)に示される状態から第2の文字候補の認識候補による状態遷移に対応するエッジを辿ることで第2の文字候補を照合する。
図22は、禁則辞書探索処理を示すフローチャートである。図23は、禁則辞書探索処理でのデータの流れを示す。
図22および図23を参照しながら、禁則辞書探索処理を説明する。まず、ステップS51において、禁則処理部52は、照合結果データを参照し、Pstに関連付けられた全ての照合結果を列挙する。
続いて、禁則処理部52は、ステップS51で列挙した全ての照合結果のそれぞれに対して、ステップS53〜ステップS62の処理を実行する(ステップS52とステップS63との間のループ処理)。以降ではこのループ処理における処理対象の照合結果を「照合結果Mt」と称する。
ステップS53において、禁則処理部52は、照合結果Mtに格納された位置番号および照合結果の番号により特定される直前の照合結果Mを取得する。
続いて、ステップS54において、禁則処理部52は、禁則辞書(DFAβ)を参照して、直前の照合結果Mに格納された状態番号βに対応する状態レコードを取得する。
続いて、ステップS55において、禁則処理部52は、ステップS54で取得した状態レコードに格納されたエッジレコードへのポインタおよびエッジレコードの要素数により、から、状態番号βの状態から出て行くエッジを表すエッジレコードが格納された範囲を特定することで、状態番号βの状態から出て行くエッジを表す全てのエッジレコードを列挙する。
続いて、ステップS56とステップS58との間のループ処理において、禁則処理部52は、ステップS55で列挙した全てのエッジレコードのそれぞれに対して、ステップS57の判断処理を実行する。以降ではこのループ処理における処理対象のエッジレコードを「エッジレコードEt」と称する。
ステップS57において、禁則処理部52は、処理対象の照合結果Mtに格納された文字コードと、エッジレコードEtに格納された文字コードが一致するか否かを判断する。一致しない場合(ステップS57のNo)、禁則処理部52は、次のエッジレコードの処理に移り、ステップS57の処理を繰り返す。一致する場合(ステップS57のYes)、禁則処理部52は、ステップS56とステップS58との間のループ処理を抜けて、処理をステップS59に進める。
ステップS59において、禁則処理部52は、エッジレコードEtの遷移先の状態番号により特定される状態レコードStの受理状態フラグを確認し、状態レコードStに対応するDFAβの状態が受理状態であるか否かを判断する。
受理状態である場合(ステップS59のYes)、ステップS61において、禁則処理部52は、照合結果Mtを削除する。受理状態ではない場合(ステップS59のNo)、ステップS60において、禁則処理部52は、照合結果Mtに状態番号βとして、エッジレコードEtの遷移先の状態番号を設定する。
また、禁則処理部52は、ステップS56とステップS58との間のループ処理において、全てのエッジレコードについて、文字コードが一致しない場合、処理をステップS62に進める。ステップS62において、禁則処理部52は、照合結果Mtに状態番号βとして、初期状態を表す0を設定する。
ステップS60、ステップS61またはステップS62の処理を終えると、禁則処理部52は、次の照合結果について、ステップS52から処理を繰り返す。
そして、ステップS63において、禁則処理部52は、全ての照合結果について、ステップS53〜ステップS62の処理を終えると、ループを抜けて、本フローを終了する。
このように禁則処理部52は、第1の照合結果により特定される文字列を照合することにより到達した禁則辞書(DFAβ)の状態を示す番号(状態番号β)を第1の照合結果に書き込む。そして、禁則処理部52は、第1の照合結果に続く第2の文字候補を知識辞書(DFAα)と照合して得られた第2の照合結果により特定される文字列を照合する際、第1の照合結果に書き込まれた番号に示されるDFAβの状態から第2の文字候補の認識候補による状態遷移に対応するエッジを辿ることで、第2の照合結果により特定される文字列を照合する。
図24は、結果抽出部で行われる結果抽出の処理の流れを示す図である。図25は、結果抽出において参照されるデータとスタック上に積まれる文字コードの様子を示す図である。
図2のステップS5に示した結果抽出は結果抽出部54で行われる。以降では、結果抽出の詳細について図24および図25を参照して説明する。まず、ステップS70において結果抽出部54は、文字候補の個数が0であるか否か確認し、文字候補の個数が0の場合はステップS84において認識結果の文字列を空文字列として本フローを終了する。文字候補の個数が0でない場合は、ステップS71において、結果抽出部54は、最後の位置番号Pedに関連付けられた全ての照合結果を列挙した上で、ステップS72以降の処理を実行する。
続いて、ステップS72において、結果抽出部54は、ステップS71において列挙した照合結果のそれぞれについて、知識辞書(DFAα)から状態番号αに対応する状態レコードを取得して、受理状態フラグを確認する。
続いて、ステップS73において、結果抽出部54は、状態番号αに対応する状態が受理状態の照合結果があるかを判断する。以降では、状態番号αに対応する状態が受理状態の照合結果を「DFAαで受理状態の照合結果」と称する。DFAαで受理状態の照合結果がある場合には(ステップS73のYes)、ステップS74において、結果抽出部54は、DFAαで受理状態の照合結果のうち、スコアが最大の照合結果を照合結果Mxとして選択する。DFAαで受理状態の照合結果が無い場合には(ステップS73のNo)、ステップS75において、結果抽出部54は、列挙した全ての照合結果のうち、スコアが最大の照合結果を照合結果Mxとして選択する。
ステップS74またはステップS75の処理に続いて、ステップS76において、結果抽出部54は、位置番号を表す変数pに、選択した照合結果Mxが関連付けられた位置番号pxを代入する。また、結果抽出部54は、照合結果の番号を表す変数mに、選択した照合結果Mxの番号mxを代入する。
続いて、ステップS77において、結果抽出部54は、FILO(First In Last Out)メモリであるスタックを空にする。
続いて、ステップS78において、pとmとが指す照合結果のコードが−1であるかを判断する。pとmとが指す照合結果のコードが−1ではない場合(ステップS78の偽)、結果抽出部54は、処理をステップS79に進める。
ステップS79において、結果抽出部54は、pとmとが指す照合結果に格納されているコードをスタックに積む。続いて、ステップS80において、結果抽出部54は、pにpとmとが指す照合結果に格納された位置番号を、mにpとmとが指す照合結果に格納された照合結果の番号を代入する。
そして、結果抽出部54は、ステップS80の処理を終えると、処理をステップS78に戻して、pとmとが指す照合結果に格納されたコードが−1となるまで、ステップS79とステップS80の処理を繰り返す。これにより、結果抽出部54は、図25に示すように、文字列の末尾から順に文字コードを選択して、スタックに積み上げていくことができる。
pとmとが指す照合結果のコードが−1である場合(ステップS78の真)、すなわち、位置番号が0に関連付けられた照合結果を指す場合には、結果抽出部54は、処理をステップS81に進める。ステップS81において、結果抽出部54は、メモリに格納された認識結果の文字列を空文字列に初期化する。
続いて、ステップS82において、スタックが空であるかを判断する。スタックが空ではない場合(ステップS82の偽)、結果抽出部54は、ステップS83において、スタックのトップからコードを1つ取り出して、メモリに格納された認識結果の文字列の末尾に追加する。
ステップS83の処理を終えると、結果抽出部54は、処理をステップS82に戻して、スタックが空になるまで、ステップS83の処理を繰り返す。これにより、結果抽出部54は、文字列の先頭から末尾までを生成することができる。
そして、結果抽出部54は、スタックが空となった場合(ステップS82の真)、本フローの処理を終了する。
以上のように、本実施形態に係る認識装置10は、禁止対象の文字列をモデル化した禁則辞書を用いて、禁止対象の文字列を含む文字列と知識辞書を照合して得られた照合結果を削除する。これにより、本実施形態に係る認識装置10で、使用されることが無い文字列および使用することが禁止される文字列等を効率良く排除して、文字列を精度良く認識することができる。
(変形例)
変形例に係る認識装置10は、知識辞書および照合結果データの形式と、照合部46、禁則処理部52および結果抽出部54の働きが異なる点を除いては、図1から図25を参照して説明した構成と同様である。以下、変形例に係る認識装置10について、図1から図25を参照して説明した構成との相違点を説明する。
図26は、変形例に係る認識装置10で認識結果として用いられる文字とそれらの文字の種別を表す記号の一例を示す図である。図27は、変形例に係る認識装置10で認識される文字列を文字の種別を表す記号の列として表した知識辞書の内容の一例を示す図である。
変形例に係る認識装置10は、文字の種別を現す記号を並べた文字列をモデル化した知識辞書を用いる。文字の種別を現す記号は、一例として、1から9までの数字を示す記号「N」、0から9までの数字を現す記号「n」、ハイフンを現す記号「−」、マンション名、アパート名、棟名に使われる文字を現す記号「M」を用いる。知識辞書は、図27に示されるような、これらの記号を並べたワイルドカード文字列が含まれている。
図28は、変形例に係る照合結果データの一例を示す図である。本変形例において、照合結果データに含まれる照合結果のそれぞれは、スコアsと、置換え済み文字数cと、ワイルドカード文字列を部分的に認識結果で置き換えた文字列wとの組を含む。
照合結果データは、位置番号のそれぞれに対応して、照合結果が格納される配列と、配列の要素数を含む。なお、図28において、照合結果の文字列wのアンダーラインを示した文字は、ワイルドカードから認識結果に置き換えられた部分を示す。
本変形例において照合部46は、先ず、知識辞書に含まれる文字列のそれぞれを複写し、位置番号0の照合結果の配列の要素に設定することで、位置番号0の照合結果の配列を初期化する。それぞれの照合結果には、スコアとして0、置換え済み文字数として0、文字列wとして知識辞書から複写した文字列が設定される。続いて、照合部46は、位置番号Pstを1からPstmaxまで順に1ずつ増加させながら、位置番号Pst+1以降の照合結果を生成する。
本変形例において、照合部46は、知識辞書探索処理において、照合結果の置換え済み文字数cを取得し、当該照合結果の文字列wのc番目の文字が文字候補Ccの認識候補Crの文字コードと一致する場合は、文字候補Ccの終点番号と等しい位置番号に関連付けて、新しい照合結果Mnを生成する。新しい照合結果Mnには、直前の照合結果のスコアに認識候補Crの類似度を加算したスコアと、置き換え済みの文字数c+1と、照合結果の文字列wのc番目の文字を認識候補Crに置き換えた文字列とが設定される。
本変形例において、禁則処理部52は、禁則辞書探索処理において、照合結果の置換え済み文字数cを取得し、照合結果の文字列のc−1番目の文字までの部分文字列が禁則辞書に格納されたDFAβで受理されるか否か確認する。そして、禁則処理部52は、受理される場合、その照合結果を削除し、受理されない場合にはその照合結果を残存させる。
このように、認識装置10は、認識対象の文字列をモデル化した知識辞書と文字候補を照合することで照合結果を得る方法であれば、どのような方法で文字列を照合してもよい。また、認識装置10は、禁止対象の文字列を照合結果から検出する方法であれば、どのような方法で禁止対象の文字列を検出してもよい。
図29は、実施形態に係る認識装置10のハードウェア構成を示す図である。
認識装置10は、プログラムを実行可能な一般的なコンピュータシステムにより実現することができる。認識装置10は、一例として、ディスプレイ110と、キーボード112と、スキャナ114と、外部記憶装置116と、通信装置118と、コンピュータ120を備える。
ディスプレイ110は、表示装置であり、認識した文字列等を表示する。キーボード112は、入力装置であり、ユーザからの操作を受け付けて情報を入力する。スキャナ114は、用紙等に記載された情報を読み取って入力画像等を取得する。外部記憶装置116は、ハードディスクドライブまたは光ディスクドライブ等であり、各種の情報を記憶する。通信装置118は、インターネット等を介して外部のコンピュータ等と情報を入出力し、例えば入力画像を外部から取得したり、文字列を外部へと出力したりする。
コンピュータ120は、一例として、CPU122と、入出力制御部124と、記憶装置126を有する。CPU122、入出力制御部124および記憶装置126は、バス128により接続される。
CPU122は、プログラムを実行して認識装置10の全体の制御をする。入出力制御部124は、ディスプレイ110、キーボード112、スキャナ114、外部記憶装置116および通信装置118等とのインターフェイスである。また、入出力制御部124は、バス128を介したデータ転送等も制御する。
記憶装置126は、ROM、RAMまたはハードディスクドライブ等を含む。記憶装置126では、同一のアドレス空間により、ROM、RAMまたはハードディスクドライブ等の何れのデバイスに対してもアクセスが可能である。記憶装置126は、プログラム、入力画像、様式データ、辞書データ(文字認識辞書、知識辞書および禁則辞書)、および、作業データ(文字候補および照合結果)等を記憶する。これらのデータは、記憶装置を構成する何れのデバイス(ROM、RAMおよびハードディスクドライブ)に記憶されていてもよい。また、これらのデータは、一部または全部が、外部記憶装置116、または、通信装置118を介してアクセスされるサーバ等に記憶されていてもよい。
本実施形態の認識装置10で実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM、フレキシブルディスク(FD)、CD−R、DVD等のコンピュータで読み取り可能な記録媒体に記録されて提供される。また、本実施形態の認識装置10で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態の認識装置10で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
本実施形態の認識装置10で実行されるプログラムは、上述した各部(入力部30、候補検出部36、認識部42、照合部46、禁則処理部52、結果抽出部54および出力部56)を含むモジュール構成となっており、実際のハードウェアとしてはCPU122(プロセッサ)が上記記憶媒体からプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、入力部30、候補検出部36、認識部42、照合部46、禁則処理部52、結果抽出部54および出力部56が記憶装置126上に生成されるようになっている。なお、入力部30、候補検出部36、認識部42、照合部46、禁則処理部52、結果抽出部54および出力部56は、一部または全部がハードウェアで構成されていてもよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。