以下、図面を参照して、本発明の第1実施形態のパターン認識システムを詳細に説明する。図1は第1実施形態のパターン認識システムの構成を示す図である。
本実施形態では、認識対象の文字列イメージ(帳票の画像から切り出された一行の文字列領域)から得られる中間段階での文字データ(一文字の文字コード:テキストデータ)をエレメントと呼び、このエレメントは列をなしているものとする。このエレメントを複数連鎖させたもの、あるいは、それに対応して得られる単語や文節等の文字列のデータをパーツと呼ぶ。さらに、このパーツを複数並べて繋げた一行の文をパスと呼ぶ。
図1に示すように、パターン認識システムは、帳票2を読み取るスキャナ3などの入力ユニット1と、この入力ユニット1から入力される画像データを受け付けてパターン認識処理を実行するコンピュータ10と、このコンピュータ10から出力される映像を表示するディスプレイ4とを備える。
スキャナ3は、読み取り対象の文字が記載された帳票2から文字、図形、写真等を読み取って、画像データとしてコンピュータ10に転送(入力)する画像入力装置である。スキャナ3は、帳票2の表面に光を当てて、その反射光をCCDなどの光電変換素子で読み取ってデジタルデータに変換する。
コンピュータ10は、入力インターフェース部11(以下「入力I/F11」と称す)、文字認識部12、区切り検出部13、パステーブル初期化部14、エレメント抽出部15、パーツ抽出部16、パス生成部17、パステーブル登録部18、パス削減部19、部分出力部20、パス統合出力部21、出力インターフェース部22(以下「出力I/F22」と称す)および記憶装置30とを備える。
入力I/F11および出力I/F22は、PC10の外部インターフェース装置の一つであり、例えばUSBインターフェース、LANインターフェース、D−subコネクタ、DVIコネクタなどである。入力I/F11には、スキャナ3が接続される。この他、例えばキーボード、マウスなどが接続される。
記憶装置30は、例えばRAM、ROMおよびハードディスクドライブ装置等により実現される。記憶装置30には、処理対象画像記憶部31、パステーブル32、帳票定義記憶部35、辞書データ記憶部36、認識結果記憶部37、単語辞書記憶部38等が設けられている。
処理対象画像記憶部31には、処理対象の画像として入力ユニット1から入力された帳票2の画像データ(以下「処理対象画像」または入力画像などと称す)が記憶される。
パステーブル32は、一行毎の認識結果の文字列(各エレメントの列)を、パターン認識に意味のある単位で区切ったパーツ(単語や文節等)とそのスコアの組を、パーツどうしのつながりを示すパスレコード毎に記憶可能なテーブルである。
具体的には、図2に示すように、パステーブル32には、パス数が例えばM個の場合に、第0パスレコードから第M−1パスレコードが設けられる。各パスレコードには、単語のデータ長K0、単語のスコアと、単語を構成する文字の文字コードが格納される。
つまり、単語候補を並べた1つの候補文、すなわち各候補文字列の中のパーツの並びがパスであり、複数の候補文字列をパスレコード毎に格納したものがパステーブル32である。
帳票定義記憶部35には、帳票定義情報としての帳票2のフォーマットコントロールデータが記憶されている。フォーマットコントロールデータは、タイミングマークの位置、帳票2の大きさ(mm単位)、読み取り対象の文字が記入された枠の種類及び大きさ、文字数、文字ピッチ、文字の属性(住所、氏名等)、出力形式(テキスト、CSV、XML等)、加工情報(全角・半角変換、順序変更等)、画像出力形式(JPEG/TIFF)、画像の解像度、画像の切り出し位置が定義されている。
タイミングマークは、帳票2の読み取り開始位置を示すものである。また、タイミングマークは、帳票2から読み取った処理対象画像の基点(座標)にされる。タイミングマーク以外では、例えば帳票2の四角のいずれか一点を基点にしても良い。
辞書データ記憶部36には、文字認識処理を行う際に参照される辞書データが記憶されている。辞書データは、文字イメージまたはその特徴情報に文字コードを対応させたデータ(参照用パターン)である。
認識結果記憶部37には、一行ずつ切り出した文字イメージとそれを文字認識した結果(文字コードの列)が対応して記憶される。単語辞書記憶部38には単語辞書データが記憶記されている。
区切り検出部13、パステーブル初期化部14、エレメント抽出部15、パーツ抽出部16、パス生成部17、パステーブル登録部18、パス削減部19、部分出力部20およびパス統合出力部21などは、ソフトウェア(プログラム)の機能をブロック化したものであり、コンピュータ10のセントラルプロセッシングユニット(以下「CPU」と称す。)の一つの機能として実現される。
CPUは、記憶装置30に記憶されたプログラムのコードを読み込んで上記各部の機能を実現する。また各部は、ソフトウェア(プログラム)に限定されることなく、独立したハードウェア(機能部品)で構成しても良い。
文字認識部12は、記憶装置30から入力画像を読み出し、読み出した入力画像から、文字認識対象の文字列が記載された領域を切り出し、その文字イメージに対して辞書データ記憶部36の辞書データ(参照用パターン)を用いて文字認識処理を行い、文字認識結果(テキストデータと文字イメージ)を認識結果記憶部37に記憶する。
エレメント抽出部15は、記憶装置30より読み出した文字認識結果記憶部37から一行分の文字認識結果を得る。
すなわち、エレメント抽出部15は、記憶装置30より読み出した文字認識結果から、パターン認識に必要な最小限の単位のエレメントを順次抽出し、1つ以上のエレメントの列を得る。ここではエレメントは1文字分の認識結果である。
区切り検出部13は、文字認識結果の一行の文字列を、パターン認識に意味のある単位で区切ったパーツ(単語、文節等)とそのスコアの組を、パステーブル32のパスレコードに記憶する。
すなわち、区切り検出部13は、文字認識およびエレメント抽出により得られた各エレメントの列(文字列)を、予め記憶装置30に設定された単語辞書記憶部38の単語辞書データに従い、パーツ(単語、文節等)の単位に区分する。
パステーブル初期化部14は、起動時にパステーブル32に保持されているデータを初期化する。パーツ抽出部16は、各エレメントの列(文字列)から、区切り検出部13により区分されたパーツを抽出する。
パス生成部17は、パーツ抽出部16により抽出されたパーツを、パステーブル32の各パスレコードに記憶されたパーツ列に続くパーツが存在するか否かによって、文字列が延長可能かどうか調べる。すなわち、パス生成部17は、文字列の切れ目から、前のパーツに続くパーツを検出することで、新たなパスを生成する。
パステーブル登録部18は、検出されたパーツをパステーブル32の該当パスレコードに登録する。またパステーブル登録部18は、新たに生成されたパスに基づいてパステーブル32を更新する。
パス削減部19は、パスレコードに記憶されたパーツの各スコアを足し合わせることで、各パスの合計スコアを計算し、スコアの高いもの、つまりスコアの良いものから順に、例えば予め決めておいた削減数(閾値N本:一例として「3」など)のパス候補を残し、それよりもスコアの低いパス候補を削除してパス候補の本数を削減する。
すなわち、パス削減部19は、パステーブル32の各パスレコードに格納されたパーツを、対応するスコアに従ってソートし、パーツの数が予め設定された閾値以内になるようスコアの低いパーツを削減する。
部分出力部20は、パステーブル32の各パスレコード内のパーツとそのパーツに続くパーツの切れ目が、全てのパスにおいて一致したときに、その位置までの各パスレコード内のパーツを部分パスとし、この部分パスが格納されているパスレコードのデータをブロックとして出力し、出力した各部分パスをパステーブル32から削除する。すなわち、部分出力部20は、パステーブル32の各パスレコード内のパーツとこのパーツに続くパーツとの切れ目の位置が各パス間で同じ時に先頭からそこまでのパーツを部分パスとして各パスレコードから読み出し、それぞれを1つのパターン認識結果の候補とするブロックを掃き出す。
パス統合出力部21は、パステーブル32の更新が終了したときに、全てのパスレコードのデータをブロックとして出力する。
以下、この第1実施形態のパターン認識システムの動作を説明する。
このパターン認識システムの場合、コンピュータ10の起動とともに、パステーブル初期化部14がパステーブル32の内容を初期化する。
そして、帳票2がスキャナ3に載置されて、読み取り開始のボタン操作が行われると、帳票2の表面がスキャナ3により読み取られてその画像データ(入力画像)がコンピュータ10の入力I/F11を通じて記憶装置30の処理対象画像記憶部31に記憶される。
文字認識部12は、処理対象画像記憶部31に記憶された入力画像を読み出し、帳票定義記憶部35の帳票定義に従って、認識対象の文字列の行領域の部分を切り出す。この結果、図3に示すような文字列イメージが得られる。この例では、文字列イメージを、例えば「水の流れのような薄いショールを」とする。
文字認識部12は、辞書データ記憶部36の辞書データを用いて図3の文字列イメージを文字認識処理することで、図4に示すように、予め設定しておいた数、例えば3つなどの順位(段階)の認識結果の文字列(エレメントの列)を生成する。ここではこの3個の認識結果の候補を1組として1つのエレメントになる。
図4の例では、1位候補(一段目)が「水の流れのよ東な乱いるョールを」であり、2位候補(二段目)が「永久流めるみうね暮色シヲ人し学」であり、3位候補(三段目)が「杏子派ねし大ラ京薄れ三百ノ化ム」といったように、1つの認識対象画像(文字列領域)の認識結果として3段の候補文字列が得られている。
区切り検出部13は、認識結果の文字列(エレメントの列)のうち、各候補毎に文字列(エレメントの列)をパーツの単位に区切る。そして、パーツ抽出部16は区切られたパーツに対して単語辞書データとの類似度に応じたスコアを例えば10点からの減点法で付与する。一例として、例えば辞書データとパーツが完全一致するものは1位の10点満点(減点0点)とし、2位は減点2点、3位は減点3点とする。
図5に、区切り検出部13およびパーツ抽出部16によるパーツ抽出結果(区分されたパーツとそれぞれのパーツに付与されたスコア)の例を示す。この図5では、区分されたパーツを線で囲み、右隅にスコアを例示している。
次に、パステーブル登録部18は、1位から3位までの候補に対応するパスレコードをパステーブル32に生成し、各候補毎に抽出したパーツを該当パスレコードに記憶し、記憶したパーツに続くパーツが存在するか否かによって、パスが延長可能かどうか調べる。
パスが延長できない場合、登録処理を終了する。パス統合出力部21は、終了と同時にパステーブル32の全パスを出力する。
また、パスが延長可能な場合、パステーブル登録部18は、パーツ抽出部16に対して各文字列からパーツを抽出させ、該当パスレコードへのパーツの登録を行い、パスを延長する。なお本システムでは、1つのパスから異なる文になる複数のパス候補を生成できるので、パス候補の本数は多くなる。
次に、パス削減部19は、パスレコードに記憶されたパーツの各スコアを足し合わせることで、各パスの合計スコアを計算し、スコアの高いもの、つまりスコアの良いものから順に、例えば予め決めておいた削減数(閾値N本:この例では「3」)のパス候補を残し、それよりもスコアの低いパス候補を削除してパス候補の本数を削減する。
次に、部分出力部20は、残ったそれぞれのパス候補の単語の切れ目の位置を調べ、すべてのパスで同一の位置に切れ目がある場合、その位置を確認する。切れ目のような位置が複数存在する場合には先頭からもっとも離れた位置を採用する。
そして、先頭からその切れ目の位置までのパスの内容を出力する。あるいはすべての切れ目を採用して、切れ目から切れ目までをそれぞれのブロックとしてすべて出力する。このとき、同じ内容の文字列があるときはその中の1つだけ出力して残りは省略する。
次に、部分出力部20は、各パスにおいて、部分出力した位置の次の文字以降の文字列を先頭から並ぶように、先頭部分につめる。
このとき同じ内容のパスがある場合には1つのパスで代表させて残りはパステーブル32から外す。また、部分出力部20は、これに加えて、あるパスの区切り方がすべて含まれる、より長いパスが他に存在するときは、その短い方のパスを削除する。その後、パステーブル32の更新に戻り、上記同様の処理を繰り返す。
ここで、図6乃至図10を参照して、上記動作により、パステーブル32の内容が変化する様子を説明する。
抽出された単語候補を用いて文章の探索を行う際には、まず、初期状態としてパステーブル32を空にする。最初の1回目の探索で、左端の単語候補を読み出して、それを文章の候補としてパステーブル32に登録する。この図6の例では、単語候補として、「水の」、「杏の」、「杏子」、「永久歯」等とった4候補が登録される。
図6の中で、括弧内の数値はスコアである。これら4個の候補単語はそれぞれパスを構成しており、この段階でパステーブル32には4本のパスがあることになる。ここではパス削減の閾値を「5」とし、パスを5本以内に削減する。しかし、この段階ではまだパス本数は「4」なので、削減は行なわれない。
次に、区切り位置の調査を行う。この処理では各パスに登録されている単語は1個ずつなので、単語の最終位置が区切り位置である。図中、点線で示すように単語の長さが一致せず、また区切り位置も一致していない。このため、一致する区切り位置は「なし」として最初の処理に戻る。
2回目の探索処理では、登録済みのパスにそれぞれ後続する候補単語を追加していく。この2回目の追加で、図7に示すように、パステーブル32には10本のパスができる。ただし,ここでは古いパスを削除することとして説明している(以下同様)。これを、2回目の削除で、スコア順に5本に削減する。そして、区切り位置をチェックすると、先頭から2文字のところで点線に示すように全パスに共通の区切り位置が検出される。
この検出結果に基づいて各パスの先頭から2文字を部分出力として出力する。この場合、文字列は全部で5個存在するが、異なるものは「水の」と「杏の」の2個であるので、この2個を部分出力する。
部分出力後、パステーブル32から「水の」と「杏の」の2個を削除し、各パスを左つめにする。すると、同じ文字列のパス「流れ」や「流れの」が出てくるので、それらを1個で代表させて、残りはパステーブル32から外す。引き続き3回目の処理に移る。
3回目の探索では、2回目で作られたパステーブル32の各パスにさらに候補単語を接続させて同様の処理を行なう。この例では、図8に示すように、「流れの ような」、「流れの 大東京」、「流れ しみ」、「流れる ような」、「流れる 大東京」といったパスであり、各パス共通の区切り位置が存在しないため、部分出力「なし」とし、次の4回目の処理に移る。
4回目の探索では、図9に示すように、パス共通の文字数のパス(点線で囲まれた部分)が存在し、また各パス共通の区切り位置も存在する。したがって、この中から、2個の文字列「流れのような」、「流れるような」が部分出力される。
図10に示すように、5回目は、上記同様の処理の結果、部分出力「なし」となる。
6回目の探索では、上記同様の処理の結果、図11に示すように、「薄い ショールを」、「薄い 三百 ノルム」、「暮色 ショールを」、「暮色 三百 ノルム」、「乱れる 百人 科学」等の5個の文字列が部分出力され、これがパステーブル32内のすべての文字列なので、部分出力後、パステーブル32は空にされる。
これ以降、後続する候補単語が無くなってパステーブル32の更新ができなくなるので、処理を終了させる。またパステーブル32に残ったパスも無く、最後の全パス出力は省略される。この結果、図12に示すように、第1番目の最初のブロックとして「水の」、「杏の」、2番目のブロックとして「流れのような」、「流れるような」、3番目のブロックとして「薄いショールを」、「薄い三百ノルム」、「暮色ショールを」、「暮色三百ノルム」、「乱れる百人科学」などいった出力ブロック40が得られ、可能性のある複数のパス候補がディスプレイ4に表示される。
この第1実施形態では、1つの文字に対する文字認識結果として得られる候補文字(文字コードまたはテキストデータ)の組がエレメント、候補単語がパーツ、候補単語列がパスである。パスが出力される際には、複数の文字列がまとめられて出力されるが、ここではこれをブロックと呼ぶ。図12では、点線で囲まれた文字列が1つ1つのブロックであり、この例では3ブロックが出力されている。この例では、各ブロック内で2通り、2通り、5通りの文字列の選択が可能で、都合20通りの文字列を表現することができる。
このようにこの第1実施形態によれば、認識対象をパターン認識する上で、認識対象から抽出した複数の候補の文字列の中のそれぞれの部分パスを区分してパーツ間の切り目が同じ部分パスを複数残すこと、すなわち、逐次出力型ビームサーチ(吐き出しビームサーチ)により、可能性のある複数の認識候補を得ることができる。
従来、同様な入力画像をパターン認識する場合、3通りしか出力されず、特に文字列の前半部分でのバリエーションが失われてしまうが、この実施形態によれば、可能性のある文字列候補を失うことなく出力することができる。
(第2実施形態)
次に、図13乃至図22を参照して第2実施形態を説明する。
この第2実施形態は、入力画像から1個1個の部分文字画像を取り出しパターン認識する画像処理の例である。
図13に示すように、この例では、例えば「水の流れ」などといった画像が、認識対象の入力画像である。エレメント抽出部15は、この入力画像から1つ1つの文字を構成する可能性のある部分文字画像(エレメント)を切り出し、抽出する。
この部分文字画像の抽出処理は、黒連結領域を抽出したり、またはその抽出された黒連結領域の輪郭形状に基づいて横方向に分割するなど、さまざまな手法が知られており、この中から適切な手法を用いるものとする。
図14に、部分文字画像の抽出処理の結果として切り出した部分文字画像の例を示す。
この例では、最小単位の部分文字画像の列が得られる。この部分文字画像の列は、切り出し順に8個の部分文字画像A〜Hが順に並べられている。
部分文字画像の上部のアルファベットA〜Hは、個々の部分文字画像をパーツと考えたときの各パーツの名称であり、その右に記載されている数値はそのパーツの文字としての確からしさを表すスコアである。つまり部分文字画像を単独でパターン認識した結果である。
この確からしさを表すスコアは、例えばそのパーツのサイズや縦横比率などから算定することが可能であり、実際にその画像を対象として文字認識を行ない、その結果から確からしさを決定するなど、文字認識の分野で様々な手法が知られており、本実施例では、その中から適切な手法を選んで用いることとする。
つまり、ここでのスコアは、辞書データと抽出された部分文字画像とを比較して類似度を算出した結果であるものとする。ここでのパーツA〜Hは上述したエレメントに相当する。
パーツ抽出部16は、エレメント抽出部15により抽出された部分文字画像の列の隣どうしの部分文字画像を連結することにより、仮想的な1文字画像、すなわち仮想文字画像を作成する。仮想文字画像は、エレメントを連結したパーツに相当し、連結の仕方の違いで、図15に示すように、複数の仮想文字画像の列(a)〜(f)が生成される。
なお、仮想文字画像の列(a)から仮想文字画像の列(f)に向かうほど、列の数が減っているのは重複するパーツを除いたためである。またエレメントは1つでもパーツに成り得るので、図14に示した部分文字画像A〜Hもそのままパーツ(仮想文字画像)となる。
図16は、図15に示した各パーツを、認識対象の画像として文字画像の候補を決定する手順を説明したものである。まず、パステーブル初期化部14はパステーブル32を空にする。そして、パステーブル登録部18はパステーブル32に第0パスレコードを設けた上で、最初の仮想文字画像を登録する。
この例では、先頭から続く3個の仮想文字画像「フ」、「フ|」、「水」が、パスとして登録される。図16の括弧内はスコアであり、各仮想文字画像の文字としての確からしさに基づいて計算された数値である。
これら3個の仮想文字画像「フ」、「フ|」、「水」は、それぞれパスを構成しており、この段階でパステーブル32には3本のパスがあることになる。この例では、パス削減部19またはメモリに予めパス削減の閾値を「3」と設定したものとし、パス削減部19はパスを3本以内に削減する。このようにすると、この段階では、まだ全てのパス本数が「3」なので、仮想文字画像「フ」、「フ|」、「水」は1つも削減されない。
次に、部分出力部20が、区切り位置の調査を行う。この段階では各パスに登録されている仮想文字画像は1個ずつなので、これらの仮想文字画像の最終位置が区切り位置である。図16の点線で示す区切りのライン33に、仮想文字画像の最終位置が一致しないので、区切り位置も一致していない。このため、一致する区切り位置は「なし」として最初の処理に戻る。
2回目の処理では、パステーブル登録部18が、パステーブル32の登録済みのパスに、それぞれ後続する仮想文字画像を追加登録していく。この結果、図17に示すように、パステーブル32には9本のパスが登録される。これをパス削減部19がスコア順に3本に削減する。そして、部分出力部20が区切り位置をチェックすると、仮想文字画像「水」の後ろの部分で、点線で示すように全パスに共通の区切り位置が検出される。
部分出力部20は、この検出結果に基づいて各パスの先頭から仮想文字画像「水」の部分を部分出力として出力する。この場合、仮想文字画像列は全部で3個あるが、異なるものは仮想文字画像「フ|,く」と仮想文字画像「水」の2個であるため、この2個が出力される。部分出力部20は、部分出力した後の各パスを左つめにする。
このとき、同じ文字列のパスが出てきた場合、それらを1個で代表させて残りはパステーブル32から除外するようにするが、このケースではそのような状況が生じていないので、そのままとする。なお、図17の中で「null」は空のパスを意味する。引き続き3回目の処理に移る。
3回目では、2回目で作られたパステーブル32の各パスにさらに後続する仮想文字画像を接続させて同様の処理を行なう。この例では、図18に示すように、各パス共通の区切り位置が、仮想文字画像「の」の後ろの位置34で検出されるため、仮想文字画像「C,つ」と仮想文字画像「の」の2個のパスが部分出力される。
次の4回目では、図19に示すように、各パス共通の区切り位置(仮想文字画像間の切れ目)がないため部分出力されない、つまり部分出力は「なし」である。
5回目では、図20に示すように、仮想文字画像
などの3個の仮想文字画像列が部分出力される。これがパステーブル32内のすべての仮想文字画像列なので、部分出力後の該当仮想文字画像の削除処理により、パステーブル32の記憶内容は空になる。
これ以降、後続する仮想文字画像がなくなり、パステーブル32の更新ができなくなるので、このコンピュータ10におけるパターン認識処理を終了する。パステーブル32に残ったパスも無いので最後の全パス出力は省略される。
部分出力の結果、図21に示すように、第1番目の最初のブロックとして仮想文字画像「フ|,く」と仮想文字画像「水」の2つの仮想文字画像列、2番目のブロックとして仮想文字画像「C,つ」と仮想文字画像「の」の2つの仮想文字画像列、3番目のブロックとして仮想文字画像
などの3つの仮想文字画像列などといった出力ブロック41が得られ、可能性のある複数のパス候補が出力される。
この第2実施形態では、部分文字画像がエレメント、仮想文字画像がパーツ、仮想文字画像列がパスである。部分出力の際に、複数の仮想文字画像列がまとめられて出力されるが、これをここではブロックと呼ぶ。図21の点線で囲まれた仮想文字画像の列がブロックであり、この例では3ブロックが出力されている。
したがって、この例では、各ブロック内で2通り、2通り、3通りの仮想文字画像列の選択が可能であり、都合12通りの仮想文字画像列を表現することができる。途中で部分出力しない従来のビームサーチ手法では、パス削減の閾値を「3」と設定した場合、3通りの候補しか出力されることはない。
図21に示した仮想文字画像を文字認識した結果の例を図22に示す。図22に示すように、点線の矩形内の2つの文字が認識結果であり、そのうち上が第1位の結果、下が第2位の結果である。この1つの点線の矩形が図21の1つの仮想文字画像に対応している。
例えば、図22の「イり」は、図21の仮想文字画像「フ|」を文字認識した結果であり、その隣の「くス」は図21の仮想文字画像「く」を文字認識した結果である。以下同様に図22と図21とでは同じ位置の仮想文字画像と文字認識結果が対応している。
このようにこの第2実施形態によれば、文字認識前の入力画像に対して逐次出力型ビームサーチ(吐き出しビームサーチ)を適用することで、可能な仮想文字画像列候補を失うことなく複数の仮想文字画像列候補を出力することができる。この処理の後、得られた各仮想文字画像を、入力画像として文字認識を行ない、その文字認識結果をまとめて出力することにより、図13に示した文字列画像の認識を実行することができる。
次に、図23および図24のフローチャートを参照して上記第1実施形態および第2実施形態で文字と画像について個々に説明した逐次出力型ビームサーチ(吐き出しビームサーチ)の汎用的な動作を説明する。
このため、各用語について定義することにする。認識対象から特徴抽出や認識によって得られるデータをエレメントと呼び、その列をエレメント列と呼ぶ。第2実施形態のような文字画像の切り出しの例ではエレメントは切り出した文字画像の候補の最小単位、すなわち隣り合う切り出し位置に挟まれた部分画像に相当する。また複数のエレメントからなるセットをパーツと呼ぶ。
これは具体的には切り出した単独の部分画像や隣合う部分画像どうしを結合した文字画像に相当する。このパーツを並べた列をパスと呼ぶ。ここでパスの開始位置の定義は、そのパスの先頭パーツの先頭エレメントとする。同様に、終了位置は末尾パーツの末尾エレメントである。開始位置と終了位置が同じ複数のパスを格納したテーブルをブロックと呼ぶ。またパステーブル32には、開始位置が等しい複数のパスが格納されるものとする。
上記のように定義した場合、このコンピュータ10の処理動作は以下のようになる。
パステーブル32に長さ0のパスを1個のみ登録する(図23のステップS101)。ブロック番号i=0とし(ステップS102)、認識対象がつきるまで下記ステップS103〜ステップS119の処理を繰り返す。
パステーブル32へ登録すべきデータ(パス)の作業領域となる一時バッファ領域をメモリに用意し、その領域を空にする(ステップS103)。
パステーブル32に登録されているパスの数をn_pとして(ステップS104)、0<n_pについてステップS105〜ステップS109の処理を実行する。
パステーブル32からj番目のパスP_jを取り出す(ステップS105)。
パスP_jに後続する可能性のあるパーツを取り出し、パスP_jに後続させて新しいパスP’を複数個作成し、これらをメモリの一時バッファ領域に追加登録する(ステップS106)。
そして、この新規作成された各パスに対してスコア計算を行う(ステップS107)。j=j+1とし(ステップS108)、j<n_pを満たすか否かを判定する(ステップS109)。
jの値がn_pの値よりも小さい場合(ステップS109のYes)、ステップS105へ戻り、処理を繰り返す。
そして、jの値がn_pの値以上になった場合(ステップS109のNo)、メモリの一時バッファ領域に登録されているパスについて、それらに付属しているスコアに基づいてソート処理を行ない、上位n個のパスを残す(ステップS110)。但しn<mとする。mはパステーブルの最大サイズである。
次に、メモリの一時バッファ領域からパステーブル32にパスをコピーする。またn_p=nとする(ステップS111)。
パステーブル32内のj番目のパスに含まれるパーツをDjkと記述する。ここでjはパス番号、kがそのパス内でのパーツ番号である。先頭エレメントが同じパーツがパステーブル内の総てのパスに存在する場合、そのパーツが何個目の一致パーツであるのかをtで表し、第jパスにおけるt番目の一致パーツのパーツ番号をα(t,j)と記述する。これにより、そのパーツは、Dj,α(t,j)と表わせる。
各パスの先頭パーツにおいては、その先頭エレメントは、総てのパスで一致しているので、α(0,j)=0である。この第0番目の一致パーツも含めて一致パーツの個数をTとする(ステップS112)。
次に、T=1と設定し(ステップS113)、0<t<TについてステップS111〜S117までの処理を繰り返す。
パーツDj,α(t−1,j)からDj,α(t,j)−1までのパーツ列を各j番目のパスから取り出し、それらをまとめて第i番目のブロックBiとして出力する。このとき、同じパーツ列は1個で代表させる(ステップS115)。そしてiをインクリメントし(ステップS116)、ステップS114に戻る。
そして、tがTを超えた場合(ステップS114のNo)、tの値が1かどうかを判定する(ステップS117)。
この判定の結果、tの値が1でなければ(ステップS117のNo)、各パスにおいて、パーツDj,0からDj,α(T−1,j)−1までのパーツを削除し、Dj,α(T−1,j)以降のパーツのパーツ番号を0からに置き替える(ステップS118)。直観的に言えば、左に詰める。
また、ステップS117の判定の結果、tの値が1であれば(ステップS117のYes)、ブロック出力しないものと判定する。
続いて、パステーブル32を参照してパステーブル32に後続させることのできる認識対象が存在するかどうかを判定し(ステップS119)、存在する場合(ステップS119のYes)、ステップS103に戻り処理を繰り返す。
また、パステーブル32に後続させることのできる認識対象が存在しない場合(ステップS119のNo)は、パステーブル32の内容をブロックとして出力する(ステップS120)。
(第3実施形態:出力フォーマット)
図22に示した文字認識結果は、配置するデータフォーマットも表している。ここで、例えば、各文字認識結果の候補のデータとして、文字認識結果として得られる信頼度と文字コードの2つを出力したいものとする。さらに、1つの仮想文字画像に対してN個の候補が得られたものとする。
こうすることで、2N個のデータが1つの仮想文字画像の認識結果として得られることになる。これをパーツと呼ぶ。このパーツを連結したものがパスであり、図22の実線の矩形の枠内の点線の矩形が横に並んだものである。さらにこのパスを1つあるいは複数まとめたものをブロックと呼ぶ。
図22で言えば、パスを縦に並べたものを1つのかたまりとして囲った実線の矩形がブロックである。このブロックを複数並べて出力フォーマットとすることによって、数多くの認識結果候補を効率良く少ないデータ量で表すことができる。図22で符号B0〜B2はブロック番号。0〜6はパスの番号。C0〜C12はパーツ番号である。
なお、本実施形態では、仮想文字画像を構成する部分文字画像がエレメントに相当する。また、各パーツ、各パス、各ブロックはどのように配置してもよい。本発明は、出力するデータをパーツ、パス、ブロックの形態に整理して表現することにある。
以下に、このデータ形式の例を示す。これはC言語の構造体の形式である。
struct PS_INFO {
int ans[CMAX];
int rst[CMAX];
};
struct BO{
int blockno;
int path_ok[BOMAX],path_st[BOMAX],path_en[BOMAX];
int parts_st[PATHMAX],parts_en[PATHMAX],p_score[PATHMAX];
struct PS_INFO *ps_info[PSMAX];
};
ここで、変数blocknoはブロック総数を表す。
配列の値、path_st[i]とpath_en[i]はi番目のブロックに含まれているパスを表すもので、i番目のブロックに含まれているパスが、path_st[i]番からpath_en[i]番までの番号のパスであることを表している。ここでpath_ok[i]にはそのパスのうち最も確からしいパスの番号が格納されている。
次に、parts_st[j]とparts_en[j]はj番目のパスに含まれているパーツを表すもので、j番目のパスに含まれているパーツが、parts_st[j]番からparts_en[j]番までの番号のパーツであることを表している。ここでp_score[j]はj番目のパスの確からしさを表す数値である。
パーツの情報は構造体PS_INFOにあり、例えば、それは上記のように、候補文字の文字コードans[h]とそれに対応する文字認識の結果として得られる確からしさrst[h]からなる。それぞれ複数の候補があるので配列となっている。k番目のパーツ情報はps_info[k]に格納されている。
この第3実施形態によれば、ブロックを複数並べて出力フォーマットとすることによって、数多くの認識結果候補を効率良く少ないデータ量で表すことができる。
(第4実施形態:連結パスリスト生成)
次に、図22に示した出力データに対して文字認識後の処理を適用する動作を説明する。図25は図22の認識結果のデータ(出力データ)の符号を書き換えたものである。図25ではパーツの識別記号であるパーツ番号をA〜Mとしている。
また各パスの左側の数値は、パスの確からしさを表す数値(スコア)である。この例では前述したように12通りのパスの連結が考えられる。その各連結パス内のパーツの中に複数の文字認識結果として得られる文字候補があるので、それらの組み合わせは膨大である。
この例では、説明をわかりやすくするために組み合わせの数を少なくしているので、全組み合わせはそれほど多くは無いが、実用レベルでの組み合わせ数、例えばブロック内のパス数を「4」、ブロック数を「32」、文字候補数を「16」、連結パス内の平均パーツ数を「64」などとすると、全ての組み合わせは、延べで「2の289乗」という、膨大な数になってしまう。このシステムでは、このような場合でも、現実的な探索回数で文字認識後処理が行なえる。
以下に、連結パス数が多い場合の動作を説明する。この図25の各ブロックの中から1つのパスを選択して組み合わせると12個の組み合わせを作成できる。これを図26に示す。図26は組み合わせてできた連結パス内のパーツのシーケンスを示すものであり、先頭の括弧内の数値は各パスの確からしさの値(スコア)を合計したものである。これは分岐の無いパスなので単線パスとも呼べるものである。
次に、この中から確からしさの合計値の、値の大きいものを優先し、例えば図27に示すような5個の連結パスのリストを作成する。この連結パスのリストをパス内部のパーツも含めて表示したものを図28に示す。
この図28に示すリストを連結パスリストと呼ぶ。この連結パスリスト内の1個の連結パスを用いて、その中から単語候補を抽出する。その方法としては公知の手段が知られており、そのような手法を任意に採用して用いることができる。全てのパスについて単語候補を求める。単語候補を求めた結果の例を図29に示す。
図29において、各単語候補の左側の数値は単語の確からしさを表す数値(スコア)である。このような単語候補のリストに対して、公知の文字認識後処理を適用することにより、適切な単語候補列を求めることができる。この例ではスコアの高い組み合わせとして最終的にスコアが「9」点の単語候補である「水の」と、スコアが「9」点の単語候補である「流れ」が選択される。最終的に後処理結果として「水の流れ」が選択される。
なお、ここでの説明ではスコアを用いた絞込みを行なったが、スコアを用いずに全ての連結パスを登録するようにしてもよい。また、この後処理部分に、第1実施形態で説明した文字列の探索方法を用いることもできる。以下、その場合の処理手順を説明する。
図25の例ではブロック数が少ないため連結パスの組み合わせの数が「12」と実行可能な数に収まっているが、ブロック数が多いと実行可能な範囲を超えてしまう。このような場合にも適用できるように処理手順を次のようにすることができる。
すなわち、第1実施形態における後処理のプロセスにおいて、候補単語の検索、および追加の段階で、連結パスリストの生成を行う。第1実施形態ではn回目のつめの作業が終了したパステーブル32に対して単語検索および検索された単語の追加を行ったが、このとき、単語を追加する前のパステーブル32に格納されている各パスについて、単語検索に先立って連結パスリスト生成を行う。
なお,本実施例での入力は図25に示したようなブロック表現のデータであり,また一方で出力も同様なブロック表現されたデータなので,両者を混同しやすく,ここで注意しておく。各パスの最後の部分に後続するブロックを開始ブロックとして連結パスリスト生成を行う。このとき、連結パスリストが大きくなり過ぎないように、処理ブロック数や連結パスに含まれる候補文字に関してその総数や候補文字全部の文字列の物理的な長さなどを制限として、そこまでで連結パスの生成を終了させるようにコントロールする。
連結パスリストを生成する上で、あるパスリスト内のパスAの先頭からのある位置xまでの内容が、パスリスト内のそれまでに生成されたA以外のパスの中に存在するかどうかを調べ、存在する場合、Aの先頭から位置xまでの長さをLとして、そのLの最大値をdupとしてパスAの情報として付加しておく。
こうしておくことで、後にこのパスAを用いて探索を行なう場合に探索すべき長さが dup以下であれば、そのパス以前のパスで同様の探索が行なわれているので探索を省略し、無駄に同じ探索を繰り返さないように制御できる。
次に、前述した連結パスリスト生成手順で説明した方法により単語検索を行なう。この連結パスリスト内の各連結パスにおいて検索された単語をまとめて、その全て、または一部を用いて、これをパステーブル32内のパスに後続させて新しい候補単語が追加されたパスを作成する。このとき、追加した単語に後続する位置情報を当該パスに情報として付与しておく。この位置情報とは、その位置が含まれるブロック番号、パス番号、パーツ番号である。
上記の説明は単語の追加を行なう位置が後続するブロックの先頭である場合のものであり、その位置がブロック内部の場合には上記のプロセスにおいて最初のブロックに関しては次のように処理する。
すなわち、後続するブロック内において後続すべき位置が含まれるパスのみを連結パスリスト生成の対象とするのである。2番目のブロック以降は開始位置がブロックの先頭である場合と同じで良い。
なお、生成開始位置がブロックの先頭にあるとは、位置を表す情報のうちパーツ番号がパス内の先頭パーツの場合であり、このケースでは、どのパスでも同様にその先頭から始められるので、パス番号は特に意味が無い。
生成開始位置がブロックの内部にあるとは、位置を表す情報のうちパーツ番号がパス内の先頭パーツで無い場合であり、このケースでは、パス番号で指定されたパスからしか生成を開始できない。
ここで、図30のフローチャートを参照して、連結パスリスト生成の際にパステーブル32の各パスに単語を追加するコンピュータ10の処理手順を説明する。このフローは図23のS103からS109に相当するもので,その部分を置き換える形で使用する。その前後は図23と同じなので,このS103からS109に相当する部分のみを記述した。この場合、CPUは、まず、メモリにレジスタjを設定し、そのレジスタjに0を設定し、一時バッファ領域を空にする(図30のステップS201,S202)。
次に、レジスタjの値からパスP_jを取り出し,このパスに後続する後続開始位置を得る(後続開始位置については下のステップに記載)。(ステップS203,S204)
続いて、後続開始位置がブロックの先頭か否かを判定し(ステップS205)、後続開始位置がブロックの先頭でなければ(ステップS205のN)、後続開始位置のブロック内の開始位置を含むパスを開始ブロックの代わりに用い、その次のブロック以降も含めて連結パスリストを作成する(ステップS206)。
また、後続開始位置がブロックの先頭であれば(ステップS205のY)、開始ブロックを後続開始位置のブロックとして連結パスリストを作成する(ステップS207)。
その後、作成した連結パスリストの各連結パスに対してその先頭から続く部分について単語検索を行う(ステップS208)。
単語検索の結果、検索された単語を処理対象の第jパスに後続させて新しいパスを作り、一時バッファ領域に登録する(ステップS209)。このとき後続させた単語に続く位置を当該新パスに登録する。位置はブロック番号,パス番号,パーツ番号である。
最後に、この新規作成された各パスに対してスコア計算を行なうとともに、レジスタjに「1」を加算して(ステップS210,S211)、jがn_p(n_pは図23参照)以下であれば(ステップS212),ステップS203に戻る。
なお、ここでの説明では、図22の出力データ(この出力データが本実施例の入力となっている)を生成する手法として第2実施形態を想定しているが、出力データを生成する手法は、このようなフォーマットの出力を得られる方法であれば、いかなる方法でもよく、フォーマットも上述した実施形態に限定されるものではない。
このようにこの第4実施形態によれば、連結パス数が多い場合に、連結パスリストを生成することにより、現実的な探索回数で文字認識後処理を行うことができる。
(第5実施形態:DP(Dynamic Programming)型検索の例)
ここで文字切り出しをDPタイプの方式で行なった別の実施例を説明する。図31は文字の切り出しをDPで行なった場合の例である。図中、縦の点線が文字の切り出し位置候補、その上の番号が切り出し位置番号「0」〜「5」、横の矢印線が切り出し文字候補「A」〜「E」である。
例えば切り出し位置番号「1」に至る文字候補は「A」であり、以降、切り出し位置番号「2」が文字候補「B」、切り出し位置番号「3」が文字候補「C」、切り出し位置番号「4」が文字候補「D」、切り出し位置番号「5」が文字候補「E」である。
これらの文字候補はその位置へ至るベストの候補である。このベストの候補を右から後向きにトレースして行けば、切り出し位置番号「5」に至る文字候補「E」,「E」の始点の切り出し位置番号「3」に至る文字候補「C」を得ることができ、最終的に文字候補「C」、「E」がベストの文字候補列として選ばれる。ここでも文字候補列をパスと呼ぶことにすれば、ベストパスが選ばれることになる。
このようにDPはベストパスを高速に求められる点が特徴であるが、ビームサーチのように複数の候補パスを求めることも以下のように実施すれば可能である。
図31の各切り出し位置において、そこへ至るベスト文字候補の代わりにN個のベストパスを記憶する。そのために次のような処理を導入する。
処理対象切り出し位置に対して、それより前の切り出し位置のうち、処理対象切り出し位置へ至る文字候補が存在する場合に、その前の切り出し位置に記録されているN個のベストパスを取り出し、それにそこから処理対象切り出し位置へ至る文字候補を追加し、新たにN個の候補パスを作る。
それらの各パスについて何らかのスコアを計算しておく。これを処理対象切り出し位置より前の総ての切り出し位置について行ない、それによって得られた候補パスの中からスコアに基づいてN個のベストパスを選択し、この処理対象切り出し位置に記録する。
これを総ての切り出し位置について求めると、最終的に図31の切り出し位置番号「5」の切り出し位置にきたときに得られるN個のベストパスが最終的に求められるNベストの候補パスということになる。
次に、この手法に上述した掃き出し手法を導入する。つまり、ある切り出し位置に総てのパスの終点が集まっていて、その切り出し位置を飛び越すパスが無い場合に、その位置で掃き出す。
総ての切り出し位置からその位置より後の総べての切り出し位置へ至る文字候補全部を無制限に可能としてしまうと上記のようなケースは出てこないので掃き出すことはできないが、一般には文字らしさをチェックすることで、かなりのものが枝刈りされるので、ある程度掃き出すことはできると考えられる。例えば、英文の場合で単語間スペースが長いようなケースである。
このようにこの第5実施形態によれば、DP型検索を導入することにより複数の候補パスを高速に求めることができる。
なお、本願発明は、上記実施形態のみに限定されるものではない。上記実施形態では、画像からテキストを認識する文字認識や画像自体のパターンを認識する例について説明したが、パターン認識の対象は、この他、例えば音声パターンなどを認識対象としてもよく、パターン認識技術が対象とするものであればどのようなパターンであってもよい。
また、例えば入力されたエレメント列全てに対して本発明を適用するのではなく、エレメント列の一部分に対してのみ適用してもよい。
具体的な例としては、日本語文字列が入力されたときに、定ピッチ部分と想定される部分とそうで無い部分に分けるピッチ推定部を設け、その出力によって不定ピッチと想定される部分に対して本発明を適用する方式は有効である。
さらに、入力された文字列に対して本実施形態を用いない仮の文字切り出しと文字認識を行ない、認識精度が悪いと推定された部分に対してビームサーチやDP型検索を実施して再度文字切り出しと文字認識を行ってもよい。
また、例えば各構成要素を、コンピュータのハードディスク装置などのストレージにインストールしたプログラムで実現してもよく、また上記プログラムを、コンピュータ読取可能な電子媒体:electronic mediaに記憶しておき、プログラムを電子媒体からコンピュータに読み取らせることで本発明の機能をコンピュータが実現するようにしてもよい。電子媒体としては、例えばCD−ROM等の記録媒体やフラッシュメモリ、リムーバブルメディア:Removable media等が含まれる。
さらに、ネットワークを介して接続した異なるコンピュータに構成要素を分散して記憶し、各構成要素を機能させたコンピュータ間で通信することで実現してもよい。