(57)【特許請求の範囲】
【請求項１】
各文字に対応した特徴量データが登録された辞書データと認識対象文字を読取って得られた認識対象文字の特徴量データとを比較して文字認識を行う文字認識装置であって、
前記辞書データ、前記認識対象文字の特徴量データ、および前記辞書データに登録されている各文字の特徴量データと前記認識対象文字の特徴量データとの類似度を記憶する外部メモリと、
前記辞書データおよび前記認識対象文字の特徴量データを前記外部メモリに転送する情報処理手段と、
前記辞書データおよび前記認識対象文字の特徴量データをベクトル演算で前記類似度を算出して前記外部メモリに記憶させる１つ以上のベクトル演算器とを備え、
前記情報処理手段が、前記ベクトル演算器に算出させて前記外部メモリに記憶された前記類似度に基づいて前記文字認識を行い、前記ベクトル演算器が、前記特徴量データに対応する１文字と前記特徴量データの要素とがそれぞれ行または列で扱われる場合で前記辞書データに登録される文字数が前記特徴量データの要素数よりも多いときに前記特徴量データの行をベクトルとしてベクトル演算で前記類似度を算出することを特徴とする文字認識装置。
【請求項２】
前記ベクトル演算器は、前記辞書データに登録されている各文字の特徴量データと複数の前記認識対象文字の特徴量データとの類似度を算出することを特徴とする請求項１に記載の文字認識装置。
【請求項３】
前記ベクトル演算器が複数ある場合には、前記情報処理手段が複数の前記ベクトル演算器に並列で前記類似度を算出させることを特徴とする請求項１に記載の文字認識装置。
【請求項４】
前記情報処理手段は、前記辞書データを所定数分割し、順次未だ前記類似度を算出していない分割した前記辞書データを前記外部メモリに転送し、転送した分割の前記辞書データに基づいて前記ベクトル演算器に算出させることを特徴とする請求項２に記載の文字認識装置。
【請求項５】
前記ベクトル演算器が、ＧＰＵで構成される場合、前記特徴量データが１２８ビットで構成されることを特徴とする請求項１に記載の文字認識装置。
【請求項６】
前記ベクトル演算器が、前記認識対象文字の特徴量データと前記辞書データにある各文字の特徴量データとのそれぞれの差分である差分データを算出して前記外部メモリに記憶させ、前記差分データに基づいてベクトル演算で前記類似度を算出することを特徴とする請求項１に記載の文字認識装置。
【請求項７】
前記認識対象文字の特徴量データおよび前記類似度は、複数の文字に対応したデータ構造を有しており、前記ベクトル演算器が、前記辞書データに登録されている各文字の特徴量データと複数の前記認識対象文字の特徴量データとの類似度を算出することを特徴とする請求項１に記載の文字認識装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、活字または手書き文字などを文字認識する文字認識装置に関する。
【背景技術】
【０００２】
近年、活字または手書き文字が記載されている文書をイメージスキャナーなどで読取り、読取って得られた画像から文書に記載されている文字を認識する光学文字認識（Optical Character Recognition）技術が広く普及している。文字認識装置は、このような光学文字認識技術を用いて文書から認識された文字をキャラクターのコードに変換するようになっている。
【０００３】
例えば、従来の文字認識装置としては、認識対象の文字を認識するために、様々な文字の特徴量に関する特徴量データを備えた辞書データを有し、読取った対象の文字の特徴量データが辞書データにある特徴量データのうち最も類似する特徴量データを検索する（以下、マッチング処理という。）ことで、認識対象の文字を認識するものが開示されている（例えば、特許文献１参照）。
【０００４】
また、従来の文字認識装置としては、認識対象である文字のコードとその文字の特徴量とが対応づけて格納されている辞書を特定の規約に従って分割する辞書分割手段と、辞書分割手段により分割された各分割辞書を格納する辞書メモリと、被認識文字の特徴量を格納する特徴量格納メモリとを有し、外部から入力される被認識文字の特徴量と辞書メモリ内の特徴量との類似度を算出するものが開示されている（例えば、特許文献２参照）。
【０００５】
【特許文献１】特開平０３−１１６３９３号公報
【特許文献２】特開平０９−１７９９３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来の文字認識装置では、認識対象の１文字のマッチング処理を高速化するのに特徴量格納メモリや分割辞書毎にある辞書メモリを必要としているため、部品数が多くなり、複数個のメモリと計算回路部との配線も多くなる等、製造コストがかかってしまうという問題があった。
【０００７】
そこで、本発明は、文字認識におけるマッチング処理を行う際に従来製品と比較して製造コストがかからない文字認識装置を提供することを目的としている。
【課題を解決するための手段】
【０００８】
本発明の文字認識装置は、各文字に対応した特徴量データが登録された辞書データと認識対象文字を読取って得られた認識対象文字の特徴量データとを比較して文字認識を行う文字認識装置であって、前記辞書データ、前記認識対象文字の特徴量データ、および前記辞書データに登録されている各文字の特徴量データと前記認識対象文字の特徴量データとの類似度を記憶する外部メモリと、前記辞書データおよび前記認識対象文字の特徴量データを前記外部メモリに転送する情報処理手段と、前記辞書データおよび前記認識対象文字の特徴量データをベクトル演算で前記類似度を算出して前記外部メモリに記憶させる１つ以上のベクトル演算器とを備え、前記情報処理手段が、前記ベクトル演算器に算出させて前記外部メモリに記憶された前記類似度に基づいて前記文字認識を行い、前記ベクトル演算器が、前記特徴量データに対応する１文字と前記特徴量データの要素とがそれぞれ行または列で扱われる場合で前記辞書データに登録される文字数が前記特徴量データの要素数よりも多いときに前記特徴量データの行をベクトルとしてベクトル演算で前記類似度を算出する構成を有している。
【発明の効果】
【００１７】
以上のように本発明は、字認識におけるマッチング処理を行う際に従来製品と比較して製造コストがかからない文字認識装置を提供するものである。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の実施の形態について、図面を参照して説明する。
図１は、本発明の実施の形態に係る文字認識装置のブロック図である。図１に示した文字認識装置は、ホストＰＣ２０とデータ転送を行うインタフェース１１、辞書データと認識の対象となる文字である認識対象文字の特徴量データとを記憶する外部メモリ１２、および、破線で囲んだＬＳＩ（Large Scale Integration）１３によって構成されている。
【００１９】
辞書データは、例えば、英数字、平仮名、漢字などの１つ１つの文字毎の特徴量に関する特徴量データを備えており、ホストＰＣ２０から転送される。例えば、辞書に登録されている全文字数は、日本語の辞書であれば約４０００文字程度である。
【００２０】
認識対象文字の特徴量データは、活字または手書き文字が記載されている文書をイメージスキャナーなどで読取って得られた画像データから解析されたデータであり、ホストＰＣ２０から転送される。
【００２１】
インタフェース１１は、ＰＣＩ（Peripheral Component Interconnect）などによって構成され、ホストＰＣ２０に接続されている。ホストＰＣ２０から指示される命令やデータの送受信は、インタフェース１１を介して行われる。
【００２２】
外部メモリ１２は、ＲＡＭ（Random Access Memory）などによって構成され、ホストＰＣ２０からインタフェース１１を介して転送される後述の辞書データ、認識対象文字の特徴量データ、差分データ、および距離データに加えて、ベクトル演算パイプ１５が実行するプログラムを記憶している。
【００２３】
ＬＳＩ１３は、外部メモリ１２からデータを読み出すためのメモリ読出回路１４と、ベクトル演算処理を行うベクトル演算パイプ１５と、ベクトル演算パイプ１５でベクトル演算された結果を書き込むためのメモリ書込回路１６によって構成されている。
【００２４】
以下、メモリ読出回路１４の個々を区別する場合は、メモリ読出回路１４Ａ〜メモリ読出回路１４Ｄと記載する。ベクトル演算パイプ１５やメモリ書込回路１６の個々を区別する場合は、同様に符号Ａ〜Ｄを付加する。また、それぞれはＡ〜Ｄの４つに限定することはない。
【００２５】
ベクトル演算パイプ１５は、プログラマブル回路で構成されており、ベクトル演算パイプ１５が実行するプログラムは、ホストＰＣ側からインタフェース１１経由で転送されるなどして外部メモリ１２に書き込まれている。なお、プログラムの内容は、後述するベクトル演算を処理するための命令群である。例えば、ベクトル演算パイプ１５Ａおよびベクトル演算パイプ１５Ｂは、後述する差分データのベクトル演算を実行し、ベクトル演算パイプ１５Ｃおよびベクトル演算パイプ１５Ｄは、後述する距離データのベクトル演算を実行するなど、各ベクトル演算パイプ１５で処理内容の異なるプログラムが実行されていてもよい。
【００２６】
図２は、マッチング処理の概念図である。マッチング処理では、認識対象文字の特徴量データと辞書データにある各文字の特徴量データとの距離が算出される。本発明の類似度は、この距離を構成し、本発明の実施の形態では距離として説明する。辞書データには、文字を表す文字コードと特徴量データが対応付いている。通し番号は、日本語の文字であれば約４０００になる。また、算出された各距離のうち、最も距離の短い辞書の特徴量データに対応する文字が認識された文字として選出される。
【００２７】
図３は、辞書にある任意の１文字の特徴量データと認識対象文字の特徴量データとの間の距離の計算を示す図である。図３に示すように、文字の特徴量データは、要素数Ｍ個（Ｍは２以上の整数）からなるＭ次元のベクトルデータである。
【００２８】
図３に示すように、同じ次元にある辞書の文字の特徴量データと認識対象文字の特徴量データとの値の差が、それぞれ次元毎に計算され、計算された差の絶対値（又は２乗の値）が計算される。次元毎の差の絶対値が加算された値が、辞書にある１つの文字の特徴量データと認識対象文字の特徴量データとの間の距離である。
【００２９】
特徴量の差の絶対値を取った場合には、いわゆるマンハッタン距離、特徴量の差を２乗した場合にはユークリッド距離の自乗値が求まることになる。正しくユークリッド距離を求めるためには、自乗値の総和の平方根を求める必要があるが、マッチング処理では距離の大小が判断できればよいため、計算コストの高い平方根の計算処理は省略している。
【００３０】
特徴量データがＭ次元である場合、辞書にある１つの文字の特徴量データと認識対象文字の特徴量データとの間の距離Ａが算出されるには、辞書の１文字に対して、Ｍ回の減算と、Ｍ回の絶対値又は２乗計算と、Ｍ回の加算（累積加算）が行われる。辞書に登録されている全文字（例えば、日本語の活字であれば約４０００文字）との距離が計算されるには、更に、辞書に登録されている全文字数分、距離Ａを求めたときの計算を繰返すことになる。このように、マッチング処理では非常に多くの回数の演算が行われる。
【００３１】
図４および図５は、プログラマブル回路によって構成されるベクトル演算パイプ１５について説明するための図である。ベクトル演算パイプ１５は、実行するプログラムに応じた処理を行うようになっている。
【００３２】
図４は、ベクトル演算パイプ１５に入力される入力ベクトルデータと、ベクトル演算パイプ１５が出力する出力ベクトルデータの例を示している。ベクトル演算パイプ１５は、同じ次元の入力ベクトルデータと出力ベクトルデータとを同じデータ型で扱う。ベクトル演算パイプ１５を実現する手段として、比較的安価に入手可能なＧＰＵ（Graphics Processig Unit）を用いる場合、２４ビット又は３２ビット単精度浮動小数点の数値のデータ型を４個まで同時に取り扱うことが可能になっている。
【００３３】
図１４は、４種類の浮動小数点のデータ型の構成を示しており、それぞれのデータ型をｆｌｏａｔ１、ｆｌｏａｔ２、ｆｌｏａｔ３、ｆｌｏａｔ４と呼ぶ。図１４（Ａ）に示すｆｌｏａｔ１型は、１個の単精度浮動小数（ｘ）によって構成され、図１４（Ｂ）に示すｆｌｏａｔ２型は、２個の単精度浮動小数（ｘ、ｙ）によって構成され、図１４（Ｃ）に示すｆｌｏａｔ３型は、３個の単精度浮動小数（ｘ、ｙ、ｚ）によって構成され、図１４（Ｄ）に示すｆｌｏａｔ４型は、４個の単精度浮動小数（ｘ、ｙ、ｚ、ａ）によって構成されている。
【００３４】
図５は、ベクトル演算パイプの簡単な動作例を示している。例えば、図５は、プログラムの演算内容を 「out ← in - 100」 とし、ベクトル演算パイプ１５の入力ベクトルデータと出力データの型はｆｌｏａｔ１とした場合、入力ベクトルデータとして図示しているサンプルデータが与えられた場合に、１００を引いたものが出力ベクトルデータとして出力される様子を示している。
【００３５】
なお、ベクトル演算パイプ１５でベクトル演算された出力結果は、図４および図５のようにベクトル値になる場合と、スカラー値となる場合がある。例えば、ベクトル演算パイプ１５が実行するプログラムの内容としては、図３で説明した距離を計算する処理などである。
【００３６】
図６は、辞書データ、認識対象文字の特徴量データ、差分データ、および距離データの構造を示す図である。図６の例では、辞書に登録している文字数を４０００としている。特徴量データの要素数Ｍを６４とすれば、図６（Ａ）に示すように辞書データは、４０００列×６４行の二次元配列のテーブルで構成される。
【００３７】
また、１つの認識対象文字の特徴量データは、図６（Ｂ）に示すように１列×６４行の一次元配列のテーブルで構成される。認識対象文字の特徴量データと、辞書データにある各文字の特徴量データとのそれぞれの差分である差分データは、図６（Ｃ）に示すように４０００列×６４行の二次元配列のテーブルで構成される。
【００３８】
認識対象文字の特徴量データと辞書データにある各文字の特徴量データとの距離のデータは、図６（Ｄ）に示すように４０００列×１行の一次元配列のテーブルで構成される。
【００３９】
次に、各種データテーブルの構成を詳細に説明する。辞書データの１列分のデータは、辞書に登録されている１文字分の要素数６４の特徴量に相当しており、辞書データの１行分のデータは、４０００文字に相当している。辞書データの１つのデータのサイズは型がｆｌｏａｔ１で４バイトとすれば、辞書データのデータサイズは４×６４×４０００＝１０２４０００バイト  （１０００ＫＢ）となる。
【００４０】
近年、入手可能なグラフィックス・アクセラレータ・ボードには１２８ＭＢ〜５１２ＭＢのビデオメモリーが搭載されているのが標準的なので、この１ＭＢ程度のデータをこのビデオメモリーに格納することは、それほど難しいことではない。
【００４１】
図６において、辞書データは、横に１行分のデータ（サイズは４０００×１）を１つのベクトルとして取り扱っているので、全部で６４個のベクトルを有することになる。これらのベクトルデータに対してベクトル演算を行う際には、スカラデータとして認識対象文字の特徴量データが０から６３の順に１個ずつ使用される。
【００４２】
ベクトル演算の結果は、再度ベクトルの形式となり（サイズは４０００×１）、差分データｄｉｆに１行目から順に上から格納されていく。辞書データｄおよび認識対象文字の特徴量データｔ１のｍ行目（要素数６４の中の任意のｍ）に対して行われるベクトル演算を式１で表現すると、差分データｄｉｆは、以下の通りとなる。
【００４３】
［式１］
dif[m][0] ← t1[m] - d[m][0]
dif[m][1] ← t1[m] - d[m][1]
dif[m][2] ← t1[m] - d[m][2]
：
dif[m][3999]← t1[m] - d[m][3999]
【００４４】
このベクトル演算が辞書データｄの１行目から６４行目まで計６４回繰り返して行われると（ｍ＝０〜６３）、認識対象の１文字と辞書に登録されている全文字との類似度（距離）を求めるための元データである、各特徴量毎の差分データが４０００×６４個分得られることになる。
【００４５】
距離を求めるため、差分データを縦１列毎に合算すれば、認識対象文字と辞書に登録されているそれぞれの文字との距離が求まることになる。そのために差分データの縦１列をベクトルデータ（サイズは１×４０００）と見なして、ベクトル演算を行う。よって、差分データは全部で４０００個のベクトルで構成されていることになる。ベクトル演算の結果は、スカラー値となり、距離データｄｉｓｔ１に要素０から順に格納されていく。この差分データのｎ列目に対して行われるベクトル演算を式２で表現すると、以下の通りとなる。
［式２］
dist1[n] ← 0
dist1[n] ← dist1[n] + dif[0][n] * dif[0][n]
dist1[n] ← dist1[n] + dif[1][n] * dif[1][n]
：
dist1[n] ← dist1[n] + dif[63][n] * dif[63][n]
【００４６】
このベクトル演算が差分データｄｉｆの１列目から４０００列目まで計４０００回繰り返して行われると（ｎ＝０〜３９９９）、距離データｄｉｓｔ１に認識対象文字と辞書に登録されている全文字との距離が求められたことになる。辞書データに登録している全文字に対応した距離データは、ホストＰＣ２０側へ渡され、ホストＰＣ２０で文字認識候補の選定処理が行われ、文字認識がなされる。
【００４７】
１文字の特徴量は、本実施の形態では６４個しかないのに対して、辞書データに登録されている文字数は４０００個である。よって、特徴量データに対応したものをベクトルとして捉えると、ベクトル演算に適する長いベクトルデータ（４０００の要素数）を用意することができる。その結果、ベクトル演算パイプ１５の演算効率が向上するため、マッチング処理に要する時間が短くなり、非常に使い勝手の良い文字認識装置を提供することができる。
【００４８】
図７は、図６に示した辞書データ、認識対象文字の特徴量データ、差分データ、および距離データの構造を示す図の変形例である。図６に示した辞書データ、認識対象文字の特徴量データ、差分データにおいて、データの型がｆｌｏａｔ１からｆｌｏａｔ４に変更されている。このため、配列の行数が６３から１５に変更されている。
【００４９】
ＧＰＵのレジスタは、一般的に１２８ビット長であり、ＧＰＵにとってはレジスタとデータサイズがマッチするｆｌｏａｔ４が最も取り扱い易いデータタイプであるため、データの型をｆｌｏａｔ１からｆｌｏａｔ４に変更することによってベクトル演算処理のパフォーマンスが向上することが期待できる。なお、データの並びや処理の流れは図６と同じであるため、詳細は省略する。
【００５０】
図８は、図６に示した辞書データ、認識対象文字の特徴量データ、差分データ、および距離データの構造を示す図の変形例である。図６に示した認識対象文字の特徴量データ、差分データ、距離データにおいて、データの型がｆｌｏａｔ１からｆｌｏａｔ４に変更されている。
【００５１】
認識対象文字の特徴量データの型がｆｌｏａｔ４に変更されているため、４文字分の認識対象文字の特徴量データが格納可能となっている。すなわち、図８に示したように、認識対象文字テーブルにおいて点線で区切られた縦一列に１文字分の特徴量が収められている。同様に、距離データについても１つのデータ要素に４文字分の距離データを格納することができるようになっている。
【００５２】
図８に示す各種データテーブルにおいて、辞書データｄおよび認識対象文字の特徴量データｔ１＿４のｍ行目（要素数６４の中の任意のｍ）に対して行われるベクトル演算を式３で表現すると、差分データｄｉｆは、以下の通りとなる。このベクトル演算が差分データｄｉｆの１行目から６４行目まで計６４回繰り返して行われる（ｍ＝０〜６３）。
［式３］
dif[m][0].x ← t1_4[m].x - d[m][0]
dif[m][0].y ← t1_4[m].y - d[m][0]
dif[m][0].z ← t1_4[m].z - d[m][0]
dif[m][0].a ← t1_4[m].a - d[m][0]
dif[m][1].x ← t1_4[m].x - d[m][1]
dif[m][1].y ← t1_4[m].y - d[m][1]
dif[m][1].z ← t1_4[m].z - d[m][1]
dif[m][1].a ← t1_4[m].a - d[m][1]
：
dif[m][3999].a ← t1_4[m].a - d[m][3999]
【００５３】
また、差分データのｎ列目から求められる距離データｄｉｓｔ１＿４のベクトル演算を式４で表現すると、以下の通りとなる。このベクトル演算も差分データｄｉｆの１列目から４０００列目まで計４０００回繰り返して行われると（ｎ＝０〜３９９９）、４文字分の認識対象文字と辞書に登録されている全文字との距離が算出されたことになる。
［式４］
dist1_4[n].x ← 0
dist1_4[n].y ← 0
dist1_4[n].z ← 0
dist1_4[n].a ← 0
dist1_4[n].x ← dist1_4[n].x + dif[0][n].x * dif[0][n].x
dist1_4[n].y ← dist1_4[n].y + dif[0][n].y * dif[0][n].y
dist1_4[n].z ← dist1_4[n].z + dif[0][n].z * dif[0][n].z
dist1_4[n].a ← dist1_4[n].a + dif[0][n].a * dif[0][n].a
dist1_4[n].x ← dist1_4[n].x + dif[1][n].x * dif[1][n].x
：
dist1_4[n].a ← dist1_4[n].a + dif[63][n].a * dif[63][n].a
【００５４】
ここでは、本発明の実施の形態に係る文字認識装置が４文字分の認識対象文字に対して並行してパターンマッチング処理を行うことによって、辞書データへのアクセス回数が１／４に低減できることが分かる。外部メモリ１２へのアクセスには、必ず時間が掛かるので、結果としてパターンマッチングに要する時間が短縮できたことになる。
【００５５】
図９は、図６に示した辞書データ、認識対象文字の特徴量データ、および距離データの構造を示す図の変形例である。図９（Ａ）に示す辞書データ、図９（Ｂ）に示す認識対象文字の特徴量データ、図９（Ｃ）に示す距離データは、それぞれ図６に示した辞書データ、認識対象文字の特徴量データ、距離データの行と列が入れ替わったような配置のデータ構造となっている。
【００５６】
また、辞書データにおいて、横１行分のデータがベクトルデータとして取り扱われており、辞書１文字の特徴量が１ベクトルに対応している。この辞書データのｍ行目に対して行われるベクトル演算内容を式５で表現すると、以下の通りとなる。このベクトル演算が辞書データの１行目から４０００行目まで計４０００回繰り返して行われると（ｐ＝０〜３９９９）、距離データに認識対象文字と辞書に登録されている全文字との距離が求められる。
［式５］
dist1[p] ← 0
dist1[p] ← dist1[p] + (t1[0] - d[p][0]) * (t1[0] - d[p][0])
dist1[p] ← dist1[p] + (t1[1] - d[p][1]) * (t1[1] - d[p][1])
：
dist1[p] ← dist1[p] + (t1[63] - d[p][63]) * (t1[63] - d[p][63])
【００５７】
図１０は、図９に示した辞書データ、認識対象文字の特徴量データ、および距離データの構造を示す図の変形例である。図１０に示したデータと図９に示したデータとの違いは、辞書データと認識対象文字の特徴量データの要素の型をｆｌｏａｔ１からｆｌｏａｔ４に変更している点である。型変更による効果も図７と全く同様であるため、これ以上の説明は省略する。
【００５８】
図１１は、図９に示した辞書データ、認識対象文字の特徴量データ、および距離データの構造を示す図の変形例である。図１１に示したデータと図９に示したデータとの違いは、認識対象文字の特徴量データと距離データの型をｆｌｏａｔ１からｆｌｏａｔ４に変更している点である。
【００５９】
図１１に示した認識対象文字の特徴量データは、４文字分の認識対象文字の特徴量を格納しておくことが可能となっている。なお、認識対象文字の特徴量データにおいて点線で区切られた横一列に１文字分の特徴量が収められている。同様に、距離データについても一つのデータ要素に４文字分の距離データを格納することができるようになっている。
【００６０】
図１１において、辞書データのｐ行目に対して行われるベクトル演算を式６で表現すると、以下の通りとなる。このベクトル演算を辞書データの１行目から４０００行目まで計４０００回繰り返すと（ｐ＝０〜３９９９）、認識対象の４文字と辞書に登録されている全文字との距離データが得られる。
［式６］
dist1_4[p].x ← 0
dist1_4[p].y ← 0
dist1_4[p].z ← 0
dist1_4[p].a ← 0
dist1_4[p].x ← dist1_4[p].x + (t1_4[0].x - d[p][0]) * (t1_4[0].x - d[p][0])
dist1_4[p].y ← dist1_4[p].y + (t1_4[0].y - d[p][0]) * (t1_4[0].y - d[p][0])
dist1_4[p].z ← dist1_4[p].z + (t1_4[0].z - d[p][0]) * (t1_4[0].z - d[p][0])
dist1_4[p].a ← dist1_4[p].a + (t1_4[0].a - d[p][0]) * (t1_4[0].a - d[p][0])
dist1_4[p].x ← dist1_4[p].x + (t1_4[1].x - d[p][1]) * (t1_4[1].x - d[p][1])
：
dist1_4[p].a ← dist1_4[p].a + (t1_4[63].a - d[p][63]) * (t1_4[63].a - d[p][63])
【００６１】
図６〜図８で説明したデータ配置及び演算方法の場合には、辞書データと認識対象文字の特徴量データから求めた差分データを、一旦差分データに格納しておく必要があったが、図９〜図１１のデータ構造では、辞書データと認識対象文字の特徴量データから直接、距離データが算出されているため、ベクトル演算パイプ１５（ＧＰＵ）から外部メモリ１２に対して書き込むデータ量が相当に削減され、メモリバンド幅に余裕の無いベクトル演算パイプ１５（ＧＰＵ）の場合には、マッチング処理のパフォーマンスが向上することが期待できる。
【００６２】
図１２は、ホストＰＣがマッチング処理を行う際ベクトル演算パイプに命令を発行する処理の流れを表したフローチャートである。
【００６３】
図１２（Ａ）は、式１に示した差分データのベクトル演算を行うベクトル演算パイプ１５に命令を発行する処理の流れを表したフローチャートである。ここで、使用するデータは、図６に示したデータを用いる。
【００６４】
ホストＰＣ２０は、特徴量データの対象となる要素数のｍを０に初期化する（ステップＳ１）。ホストＰＣ２０は、複数のベクトル演算パイプ１５のうち、式１に示した差分データのベクトル演算が可能で空いているベクトル演算パイプ１５（使用されていないもの）を見付け出し（ステップＳ２）、ベクトル演算パイプ１５が空いていれば、空いているベクトル演算パイプ１５に演算指示の発行を行う（ステップＳ３）。
【００６５】
演算指示の発行を行った後、ホストＰＣ２０は、１つインクリメントしたｍを対象とし（ステップＳ４）、ｍが６４よりも小さい場合（ステップＳ５）、ステップＳ２に進み、ｍが６４以上の場合（ステップＳ５）、演算指示を発行したベクトル演算パイプ１５の処理が全て終了したか否か確認し（ステップＳ６）、全て終了した場合には処理が終了する。
【００６６】
図１２（Ｂ）は、式２に示した距離データのベクトル演算を行うベクトル演算パイプ１５に命令を発行する処理の流れを表したフローチャートである。ここで、使用するデータは、図６に示したデータを用いる。
【００６７】
ホストＰＣ２０は、辞書データに登録されている文字に対応した要素数のｎを０に初期化する（ステップＳ１１）。ホストＰＣ２０は、複数のベクトル演算パイプ１５のうち、式２に示した距離データのベクトル演算が可能で空いているベクトル演算パイプ１５（使用されていないもの）を見付け出し（ステップＳ１２）、ベクトル演算パイプ１５が空いていれば、空いているベクトル演算パイプ１５に演算指示の発行を行う（ステップＳ１３）。
【００６８】
演算指示の発行を行った後、ホストＰＣ２０は、１つインクリメントしたｎを対象とし（ステップＳ１４）、ｎが４０００よりも小さい場合（ステップＳ１５）、ステップＳ１２に進み、ｎが４０００以上の場合（ステップＳ１５）、演算指示を発行したベクトル演算パイプ１５の処理が全て終了したか否か確認し（ステップＳ１６）、全て終了した場合には処理が終了する。その後、距離データは、ホストＰＣ２０側へ渡され、ホストＰＣ２０で文字認識候補の選定処理が行われ、文字認識がなされる。
【００６９】
なお、図１２（Ａ）のフローチャートでは、ベクトル演算パイプ１５は、式１に示した差分データのベクトル演算を行い、図１２（Ｂ）のフローチャートでは、式２に示した距離データのベクトル演算を行うとしたが、図８に示したデータが使用される場合、図１２（Ａ）のフローチャートでは、式３に示した差分データのベクトル演算を行い、図１２（Ｂ）のフローチャートでは、式４に示した距離データのベクトル演算を行う。
【００７０】
図１２（Ｃ）は、式５に示した距離データのベクトル演算を行うベクトル演算パイプ１５に命令を発行する処理の流れを表したフローチャートである。ここで、使用するデータは、図９に示したデータを用いる。
【００７１】
ホストＰＣ２０は、辞書データに登録されている文字に対応した要素数のｐを０に初期化する（ステップＳ２１）。ホストＰＣ２０は、複数のベクトル演算パイプ１５のうち、式５に示した距離データのベクトル演算が可能で空いているベクトル演算パイプ１５（使用されていないもの）を見付け出し（ステップＳ２２）、ベクトル演算パイプ１５が空いていれば、空いているベクトル演算パイプ１５に演算指示の発行を行う（ステップＳ２３）。
【００７２】
演算指示の発行を行った後、ホストＰＣ２０は、１つインクリメントしたｐを対象とし（ステップＳ２４）、ｐが４０００よりも小さい場合（ステップＳ２５）、ステップＳ２２に進み、ｐが４０００以上の場合（ステップＳ２５）、演算指示を発行したベクトル演算パイプ１５の処理が全て終了したか否か確認し（ステップＳ２６）、全て終了した場合には処理が終了する。その後、距離データは、ホストＰＣ２０側へ渡され、ホストＰＣ２０で文字認識候補の選定処理が行われ、文字認識がなされる。
【００７３】
なお、図１２（Ｃ）のフローチャートでは、ベクトル演算パイプ１５は、式５に示した距離データのベクトル演算を行うとしたが、図１１に示したデータが使用される場合、図１２（Ｃ）のフローチャートでは、式６に示した距離データのベクトル演算を行う。
【００７４】
以上のように、空いているベクトル演算パイプ１５がある限り、次々とベクトル演算指示が発行されるため、ベクトル演算パイプ１５のそれぞれは同時に実行される。従って、ハードウェアの性能が効率良く引き出され、マッチング処理のパフォーマンスが向上することが期待できる。
【００７５】
図１３は、複数の認識対象文字がある原稿のページがスキャンされた場合であって、外部メモリに全文字分の半分の辞書データしか格納できない場合のフローチャートである。
【００７６】
ホストＰＣ２０は、インタフェース１１経由で１ページ分の認識対象文字の特徴量データを外部メモリ１２に書き込む（ステップＳ３１）。次に、ホストＰＣ２０は、辞書データの前半を外部メモリ１２の辞書データのエリアに書込み（ステップＳ３２）、図１２のフローチャートのように、辞書データの前半にある文字の特徴量データと１ページ分の認識対象文字の特徴量データとの間の距離データを算出する（ステップＳ３３）。
【００７７】
次に、ホストＰＣ２０は、辞書データの後半を外部メモリ１２の辞書データのエリアに書込文字マッチング処理（ステップＳ３４）、図１２のフローチャートのように、辞書データの後半にある文字の特徴量データと１ページ分の認識対象文字の特徴量データとの間の距離データを算出する（ステップＳ３５）。
【００７８】
次に、ホストＰＣ２０は、ステップＳ３３およびステップＳ３５で算出された距離データを取得し、認識対象文字を特定する（ステップＳ３６）。スキャンされた次の原稿のページがあれば（ステップＳ３７）、再度ステップＳ３１〜ステップＳ３６が処理される。
【００７９】
従来では、外部メモリ１２に全文字分の辞書データが載りきらない場合には、同時に処理可能な認識対象文字に対して距離を計算する毎に辞書データの入れ替えを行っていたため、辞書データの入れ替えに要する時間がシステムのオーバーヘッドとして積み重なり、結果的に文字認識システムとして使い勝手の悪いものとなっていた。図１３のフローチャートでは、原稿１ページ分の文字毎に、外部メモリ１２の辞書データのエリアに対して辞書データを前半と後半に分けて入れ替えてマッチング処理を行うため、１文字毎に辞書データの入れ替えを行う場合と比較すると、辞書データの入れ替え実施回数が低減して辞書データの入れ替えに必要な処理時間を省略することができるので、マッチング処理のパフォーマンスが向上することが期待できる。
【００８０】
また、辞書データを入れ替えるためにはホストＰＣ２０側からインタフェース１１経由で辞書データを転送する必要があるが、インタフェース１１として一般的に利用されているＰＣＩはピーク性能でも１３３ＭＢ／ｓ程度のメモリバンド幅しか無く、ＣＰＵがＦＳＢ経由でメインメモリにリードライトする場合のメモリバンド幅と比較すると１桁以上も劣っている。従ってメインメモリ上のデータを書き換えるのに比べると、インタフェース１１経由でのメモリデータの書き換えには飛躍的に長い時間を要してしまう。図１３のフローチャートのように、ＧＰＵの外部メモリ１２にできるだけ多くの辞書データを置くことが好ましく、さらに一度辞書データを書き換えたら、極力辞書データを書き換えないで認識対象文字のマッチング処理を継続すれば、マッチング処理に要する時間が短くなり、結果的に非常に使い勝手の良い文字認識システムを提供することができる。
【図面の簡単な説明】
【００８１】
【図１】本発明の実施の形態に係る文字認識装置のブロック図
【図２】文字認識に係るマッチング処理の概念図
【図３】辞書にある任意の１文字の特徴量データと認識対象文字の特徴量データとの間の距離の計算を示す図
【図４】ベクトル演算パイプに入力される入力ベクトルデータと、ベクトル演算パイプが出力する出力ベクトルデータの例を示す図
【図５】ベクトル演算パイプの簡単な動作例を示す図
【図６】辞書データ、認識対象文字の特徴量データ、差分データ、および距離データの構造を示す図
【図７】図６に示した辞書データ、認識対象文字の特徴量データ、差分データ、および距離データの構造の変形例を示す図
【図８】図６に示した辞書データ、認識対象文字の特徴量データ、差分データ、および距離データの構造の変形例を示す図
【図９】図６に示した辞書データ、認識対象文字の特徴量データ、および距離データの構造の変形例を示す図
【図１０】図９に示した辞書データ、認識対象文字の特徴量データ、および距離データの構造の変形例を示す図
【図１１】図９に示した辞書データ、認識対象文字の特徴量データ、および距離データの構造の変形例を示す図
【図１２】ホストＰＣがマッチング処理を行う際ベクトル演算パイプに命令を発行する処理の流れを表したフローチャート
【図１３】複数の認識対象文字がある原稿のページがスキャンされた場合であって、外部メモリに全文字分の半分の辞書データしか格納できない場合のフローチャート
【図１４】４種類の浮動小数点のデータ型の構成を示す図
【符号の説明】
【００８２】
１１  インタフェース
１２  外部メモリ
１３  ＬＳＩ
１４  メモリ読出回路
１５  ベクトル演算パイプ（ベクトル演算器）
１６  メモリ書込回路
２０  ホストＰＣ（情報処理手段）
【図１】
0005256799.tif 000002
【図２】
0005256799.tif 000003
【図３】
0005256799.tif 000004
【図４】
0005256799.tif 000005
【図５】
0005256799.tif 000006
【図６】
0005256799.tif 000007
【図７】
0005256799.tif 000008
【図８】
0005256799.tif 000009
【図９】
0005256799.tif 000010
【図１０】
0005256799.tif 000011
【図１１】
0005256799.tif 000012
【図１２】
0005256799.tif 000013
【図１３】
0005256799.tif 000014
【図１４】
0005256799.tif 000015