(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022103676
(43)【公開日】2022-07-08
(54)【発明の名称】情報処理装置、情報処理方法、プログラム
(51)【国際特許分類】
G06V 30/194 20220101AFI20220701BHJP
G06V 30/242 20220101ALI20220701BHJP
【FI】
G06K9/66
G06K9/62 610C
【審査請求】未請求
【請求項の数】5
【出願形態】OL
(21)【出願番号】P 2020218450
(22)【出願日】2020-12-28
(71)【出願人】
【識別番号】390002761
【氏名又は名称】キヤノンマーケティングジャパン株式会社
(71)【出願人】
【識別番号】592135203
【氏名又は名称】キヤノンITソリューションズ株式会社
(74)【代理人】
【識別番号】100189751
【弁理士】
【氏名又は名称】木村 友輔
(72)【発明者】
【氏名】大田 健翔
【テーマコード(参考)】
5B064
【Fターム(参考)】
5B064AA01
5B064AB03
5B064BA01
5B064DA27
5B064EA26
(57)【要約】 (修正有)
【課題】Convolutional Recurrent Neural Network型のOCRにおいて、より適切なOCR結果を提示する情報処理装置、情報処理方法及びプログラムを提供する。
【解決手段】メイン処理サーバ、帳票をスキャンして画像ファイル化するスキャナ、クライアント端末及びデータベースサーバがLANを介して接続される情報処理システムにおいて、メイン処理サーバは、入力画像に対するOCR結果として得られたベクトル列をグラフに変換し、変換することで得られたグラフにおける始点から終点までの最短経路を含む複数の経路を短い順に算出する。算出されたそれぞれの経路候補に基づき得られる文字列候補が、予め定められた形式であるかを判定する。予め定められた形式を満たす最も順番が先である文字列を選択する。
【選択図】
図4
【特許請求の範囲】
【請求項1】
入力画像に対するOCR結果として得られたベクトル列をグラフに変換する変換手段と、
前記変換手段により得られたグラフにおける始点から終点までの最短経路を含む複数の経路を短い順に算出する算出手段と、
前記算出手段により算出されたそれぞれの経路候補に基づき得られる文字列候補が、予め定められた形式であるかを判定する判定手段と、
を備えることを特徴とする情報処理装置。
【請求項2】
前記判定手段は、前記判定手段により前記最短経路が予め定められた形式ではないと判定される場合に、前記算出手段により算出された2番目に短い経路に基づき得られる文字列について判定することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記判定手段により前記予め定められた形式の文字列であると判定された文字列を、正解結果として出力する出力手段を備えることを特徴とする請求項1または2に記載の情報処理装置。
【請求項4】
情報処理装置の変換手段が、入力画像に対するOCR結果として得られたベクトル列をグラフに変換する変換工程と、
前記情報処理装置の算出手段が、前記変換工程により得られたグラフにおける始点から終点までの最短経路を含む複数の経路を短い順に算出する算出工程と、
前記情報処理装置の判定手段が、前記算出工程により算出されたそれぞれの経路候補に基づき得られる文字列候補が、予め定められた形式であるかを判定する判定工程と、
を備えることを特徴とする情報処理方法。
【請求項5】
コンピュータを、
入力画像に対するOCR結果として得られたベクトル列をグラフに変換する変換手段と、
前記変換手段により得られたグラフにおける始点から終点までの最短経路を含む複数の経路を短い順に算出する算出手段と、
前記算出手段により算出されたそれぞれの経路候補に基づき得られる文字列候補が、予め定められた形式であるかを判定する判定手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、情報処理方法、プログラムに関する。
【背景技術】
【0002】
近年のOCR(Optical Character Recognition)の技術は、ディープニューラルネットワークを使用して文字の認識をするものが流行している。
【0003】
そして、OCR用のディープニューラルネットワークのモデルにはConvolutional Recurrent Neural Network(以下CRNN)が採用されることが多い。CRNNでOCRを実現する方法は下記の手順で行う。
【0004】
まず、文字列の書かれた画像をConvolutional Neural Network(以下CNN)で計算し、画像特徴量を得る。その後、画像特徴量を細分化したデータを後段のReccurent Neural Network(RNN)に入力する。RNNは、細分化したデータ単位がそれぞれ何の文字か(あるいは空白か)を推論する。文字の系列が出来ているのでそれを整形する。整形内容としては、連続する文字は一つにまとめ、空白を除去する。整形後の結果をOCRの最終結果とする。
【0005】
非特許文献1には、CRNNを用いたOCR技術について開示されている。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition Baoguang Shi, Xiang Bai, Cong Yao(https://arxiv.org/abs/1507.05717)
【発明の開示】
【発明が解決しようとする課題】
【0007】
このCRNN型のOCRの課題としては、外部知識による結果の検証や修正が難しいという問題が存在する。ここで外部知識とは例えば、正規表現のような形やアプリケーションソフトウェア特有のルールのことである。検証や修正が難しい原因はアルゴリズム上、OCRが最良と判断した結果しか算出できないためである。言い換えると次点以降の結果の文字列も出力できれば、それらの文字列を外部知識で検証し、適合する文字列を入手できる可能性が高まる。
【0008】
そこで、本発明は、CRNN型のOCRにおいて、より適切なOCR結果を提示する仕組みを提供することを目的とする。
【課題を解決するための手段】
【0009】
本発明の情報処理装置は、入力画像に対するOCR結果として得られたベクトル列をグラフに変換する変換手段と、前記変換手段により得られたグラフにおける始点から終点までの最短経路を含む複数の経路を短い順に算出する算出手段と、前記算出手段により算出されたそれぞれの経路候補に基づき得られる文字列候補が、予め定められた形式であるかを判定する判定手段とを備えることを特徴とする。
【発明の効果】
【0010】
本発明によれば、CRNN型のOCRにおいて、より適切なOCR結果を提示することが可能となる。
【図面の簡単な説明】
【0011】
【
図1】本発明の処理システムの構成の一例を示すシステム構成図である。
【
図2】情報処理装置のハードウェア構成を示すブロック図である。
【
図3】本発明の実施形態における、機能構成の一例を示す図である。
【
図4】本発明の実施形態における、処理の一例を示すフローチャートである。
【
図5】本発明の実施形態における、前向きDP*探索のサブモジュールを示すフローチャートである。
【
図6】本発明の実施形態における、後ろ向きA*探索のサブモジュールを示すフローチャートである。
【
図7】本発明の実施形態における、CRNN型OCRの概略図である。
【
図8】本発明の実施形態における、OCR結果ベクトルの説明図である。
【
図9】本発明の実施形態における、INPUT MASKの説明図である。
【
図10】本発明の実施形態における、OCR結果グラフの概念図である。
【
図11】本発明の実施形態における、グラフ内のノードとエッジの概略図である。
【
図12】本発明の実施形態における、逆向きA*探索で使用する経路オブジェクトの概略図である。
【
図13】本発明の実施形態における、経路から文字列に変換する処理の例を示した図である。
【
図14】本発明の実施形態における、N-bestリストから正規表現に適合する文字列を選択する例を示した図である。
【発明を実施するための形態】
【0012】
以下、図面を参照して、本発明の実施形態を詳細に説明する。
【0013】
図1は、本発明の情報処理システムの構成の一例を示すシステム構成図である。本発明の情報処理システムは、メイン処理サーバ100(情報処理装置)および、帳票をスキャンして画像ファイル化(画像スキャン)するスキャナ200、クライアント端末101、データベースサーバ300がLAN400を介して接続される構成となっている。
【0014】
LAN400はメイン処理サーバ100の有する物理インターフェースに応じて、有線LAN,無線LAN,USBなどの形態をとることができる。
【0015】
スキャナ200でスキャンした画像をメイン処理サーバ100に取り込む方法として、スキャナ200からメイン処理サーバ100に直接画像を送信する方法、スキャナ200で取り込んだ画像ファイルをいったんデータベースサーバ300に保管し、メイン処理サーバ100がデータベースサーバ300から画像ファイルを取り出す方法などがある。
【0016】
図2は、メイン処理サーバ100、クライアント端末101として適用可能な情報処理装置のハードウェア構成の一例を示すブロック図である。
【0017】
図2に示すように、情報処理装置は、システムバス200を介してCPU(Central Processing Unit)201、ROM(Read Only Memory)202、RAM(Random Access Memory)203、記憶装置204、入力コントローラ205、音声コントローラ206、ビデオコントローラ207、メモリコントローラ208、よび通信I/Fコントローラ209が接続される。
【0018】
CPU201は、システムバス200に接続される各デバイスやコントローラを統括的に制御する。
【0019】
ROM202あるいは外部メモリ213は、CPU201が実行する制御プログラムであるBIOS(Basic Input/Output System)やOS(Operating System)や、本情報処理方法を実現するためのコンピュータ読み取り実行可能なプログラムおよび必要な各種データ(データテーブルを含む)を保持している。
【0020】
RAM203は、CPU201の主メモリ、ワークエリア等として機能する。CPU201は、処理の実行に際して必要なプログラム等をROM202あるいは外部メモリ213からRAM203にロードし、ロードしたプログラムを実行することで各種動作を実現する。
【0021】
入力コントローラ205は、キーボード210や不図示のマウス等のポインティングデバイス等の入力装置からの入力を制御する。入力装置がタッチパネルの場合、ユーザがタッチパネルに表示されたアイコンやカーソルやボタンに合わせて押下(指等でタッチ)することにより、各種の指示を行うことができることとする。
【0022】
また、タッチパネルは、マルチタッチスクリーンなどの、複数の指でタッチされた位置を検出することが可能なタッチパネルであってもよい。
【0023】
ビデオコントローラ207は、ディスプレイ212などの外部出力装置への表示を制御する。ディスプレイは本体と一体になったノート型パソコンのディスプレイも含まれるものとする。なお、外部出力装置はディスプレイに限ったものははく、例えばプロジェクタであってもよい。また、前述のタッチ操作を受け付け可能な装置については、入力装置も提供する。
【0024】
なおビデオコントローラ207は、表示制御を行うためのビデオメモリ(VRAM)を制御することが可能で、ビデオメモリ領域としてRAM203の一部を利用することもできるし、別途専用のビデオメモリを設けることも可能である。
【0025】
メモリコントローラ208は、外部メモリ213へのアクセスを制御する。外部メモリとしては、ブートプログラム、各種アプリケーション、フォントデータ、ユーザファイル、編集ファイル、および各種データ等を記憶する外部記憶装置(ハードディスク)、フレキシブルディスク(FD)、或いはPCMCIAカードスロットにアダプタを介して接続されるコンパクトフラッシュ(登録商標)メモリ等を利用可能である。
【0026】
通信I/Fコントローラ209は、ネットワークを介して外部機器と接続・通信するものであり、ネットワークでの通信制御処理を実行する。例えば、TCP/IPを用いた通信やISDNなどの電話回線、および携帯電話の4G回線、5G回線等を用いた通信が可能である。
【0027】
尚、CPU201は、例えばRAM203内の表示情報用領域へアウトラインフォントの展開(ラスタライズ)処理を実行することにより、ディスプレイ212上での表示を可能としている。また、CPU201は、ディスプレイ212上の不図示のマウスカーソル等でのユーザ指示を可能とする。
【0028】
図3は、メイン処理サーバ100が備える機能の一例を示す機能ブロック図である。
【0029】
入力受付部300は、OCR結果選定の要求や、INPUT MASKなどの各種情報の入力を受け付ける機能を備える。
【0030】
グラフ変換部301は、CRNNにより出力されたベクトル列をグラフに変換する処理を実行する。
【0031】
N-best算出部302は、
図6のフローチャートの処理を実行することでN個の経路を算出する処理を実行する。
【0032】
文字列変換部303は、ステップS407の処理を実行することで、算出された経路を文字列に変換する処理を行う。
【0033】
結果検証部304は、文字列変換部303により出力された文字列がINPUT MASKである正規表現を満たすかを検証する処理を実行する。
【0034】
以下、
図4のフローチャートを参照して、本実施形態のシステムにおけるCRNN型OCRの外部知識に基づく後編集処理について説明する。
【0035】
ステップS400では、メイン処理サーバ100の入力受付部300が、OCR結果選定の要求を受け付ける。
【0036】
ステップS401では、メイン処理サーバ100の入力受付部300が、OCRの結果を表すRNNの出力結果であるベクトル系列600を受け付ける。
【0037】
ベクトル系列600に関してCRNN型OCRの
図7を踏まえて説明する。CRNN型OCRはCNN602とRNN604から構成される。CNNは画像601から画像特徴量603を抽出する。これを最小単位605に切り出し、切り出した単位で個別にRNN604に入れる。RNNは最小単位605ごとに認識結果606を出力する。これを全ての最小単位605で処理した結果を結合したものがベクトル系列600である。
【0038】
図8を用いてRNNの処理結果のベクトル系列600のうちの1つのベクトル606を説明する。
【0039】
ベクトル606は文字ごとの認識結果の確からしさの確率を表している。すなわち、画像特徴量の一部605をRNN604に通したとき、その特徴量がどの文字に近いのかを表している。
【0040】
図8の例では、ベクトル606は空白である確率が0.98、「0」である確率が0.0001、「z」である確率が0.01であることを意味している。
【0041】
ステップS402では、メイン処理サーバ100の入力受付部300が、INPUT MASK700を受け付ける。
【0042】
INPUT MASK700に関して、
図9の例を踏まえて説明する。
【0043】
OCRでは、文字の認識をするための事前情報がない場合、文字が判読不能なケースがある。たとえば数字のゼロ(0)、大文字アルファベットのオー(O)、小文字アルファベットのオー(o)について、区別がつかないケースがある。
【0044】
そこで、認識結果において、何番目の文字がどの文字種なのかを制御する事前知識としてINPUT MASKを導入する。ここでの文字種とは、大文字アルファベット、小文字アルファベット、数字の3つのいずれかを指す。このような事前知識を与えることで、数字のゼロ(0)なのか、大文字アルファベットのオー(O)なのか、小文字アルファベットのオー(o)なのかを判別することが可能となる。
【0045】
INPUT MASKはユーザが文字種パターンの制御情報を記述する際、正規表現を意識せずに書くための文字列のフォーマットである。INPUT MASKが扱える文字種は、「A」、「Z」、「a」、「z」、「0」、「9」の6種類である。この文字種を並べることでパターンを表現する。
「A」、「Z」は大文字アルファベットの集合を表す。「A」が存在する位置には大文字アルファベットが1文字必ず存在することを表す。「Z」が存在する位置には大文字アルファベットが任意に存在することを表す。ここでの「任意に存在」とは文字が1文字ある場合とない場合の両方の状態のことを指す。
【0046】
「a」、「z」は小文字アルファベットの集合を表す。2つの違いは大文字アルファベットの場合と同様である。すなわち、前者は小文字アルファベットが1文字必ず存在することを表し、後者は小文字アルファベットが任意に存在することを表す。
【0047】
「0」、「9」は数字の集合を表す。2つの違いは大文字アルファベットの場合と同様である。すなわち、前者は数字が1文字必ず存在することを表し、後者は数字が任意に存在することを表す。
【0048】
例えば、
図9のINPUT MASK700の例では、1文字目がアルファベットで2文字目から7文字目までが数字のパターンを表している。INPUT MASK700は検証処理の際には該当する正規表現701に変換される。
【0049】
ステップS403では、メイン処理サーバ100の入力受付部300が、N-best算出部302で使用する生成文字列数Nを受け付ける。
【0050】
ステップS404では、メイン処理サーバ100の入力受付部301が、ステップS401で格納したベクトル600をグラフ800に変換する処理を行う。グラフ変換処理に関して
図10、
図11を用いて説明する。
【0051】
ここでのグラフとは、有向非循環グラフである。また、本実施例では始点から終点へ向かう方向を順方向、終点から始点へ向かう方向を逆方向と呼ぶ。
【0052】
図10に示すグラフ800はノード801とエッジ805を持つ。ノード801は、RNNの出力結果600を構成するベクトル606の要素607から作成する。
【0053】
このノードは
図11の5つの情報820を保有している。5つの情報とは下記の通りである。グラフ800内で一意なインデックス802、ノードが持つコスト821、このノードから順方向にエッジでつながるノードのリスト822、始点からこのノードまでのコスト最小となる経路823、経路823のコスト824。
【0054】
ノードのコストは(1.0 - 要素607の値)を保持する。このような数値の加工を行うことで、後段の最短経路探索問題として解けるようになる。
【0055】
次にノードから次のノードの接続を表すエッジ805を作成する。エッジの遷移コストは0とする。
【0056】
一つのノードからエッジを接続する先のノードは、ベクトル606単位に考える。すなわち、あるベクトル606の要素607を表現するノードがあったとき、ベクトル606の次のベクトルの要素を表すノードすべてに向かって接続する。ただし、始点ノード803は出力結果600の最初のベクトル内の要素を表すノード全てに向かって接続し、出力結果600の一番最後のベクトル内の要素を表すノードは全て、終点ノード804に向かって接続する。
【0057】
上述の手順にしたがって、出力結果600を構成する全ての値607および、グラフの始点ノード803と、終点ノード804に対してノードとエッジを作成する。始点ノードと終点ノードのコストは0を格納する。
【0058】
また、グラフの経路810とは、
図13のように、始点から終点、もしくは終点から始点までのノードを順番に入れたリストのことである。
【0059】
以上の通り、CRNNによるOCRの結果は出力されたベクトル列をグラフ化することで、最も正解と考えられるOCR結果の算出処理を、グラフの最短経路を算出する問題に変換することができる。すなわち、ベクトル列を変換したグラフの始点から終点までの最短経路を求めることで、最も正解と考えられるOCR結果の文字列を取得することができる。
【0060】
以下、ステップS405の処理において、最短経路を求める処理を説明する。
【0061】
最短経路を求める手法として、前向きDP後ろ向きA*アルゴリズム(https://ci.nii.ac.jp/naid/110002934845)を下記の通りOCRにも適用できるアルゴリズムに改良したものを用いる。
【0062】
ステップS405では、始点から各ノードまでの最短経路の探索(前向きDP探索)を行う。ステップS405の処理の詳細については、
図5のフローチャートを用いて説明する。
【0063】
前向きDP探索では、順方向において、各ノードにおける最小の経路823及び最小のコスト824をノードごとに求める。そのため、終点ノード804で求める最小の経路が最短経路となる。
【0064】
ステップS501では、すべてのノードの最小のコスト値823を、浮動小数点の最大値を入れて初期化する。
【0065】
ステップS502ではグラフ800をトポロジカルソートする。トポロジカルソートとは、有向非巡回グラフ中のノードを依存関係の無い順にノードインデックスを順序づけるアルゴリズムである。ソートした順番どおりに、リストLに格納する。
【0066】
トポロジカルソートを行うことで、各ノードにおける最短経路コストを求める事ができるようになる。具体的には、あるノードAに依存するノードBがあった場合、あるノードAまでの最短経路コストを使用してノードBの最短経路コストを求めることができるようになる。
【0067】
ステップS503では、変数iに0を格納する。
【0068】
ステップS504では、変数numにグラフ800中のノードの総数を格納する。
【0069】
ステップS505では、変数iが変数numより小さいかを判定する。判定がYesならばS506へ、Noならば本サブプロセスを終了する。
【0070】
ステップS506では、リストLのi番目のノードを取り出し、ノードiとする。
【0071】
ステップS507では、ノードiに接続するノード群822をキューq_tmpに格納する。以下、S508からステップS511において、q_tmpに格納されたノードの中で、ノードiからの接続で最短経路コストを更新できるものがあれば、その値を更新する。
【0072】
ステップS508では、キューq_tmpが空かどうかを判定する。判定がYesならばステップS513へ、NoならばステップS509へ進む。
【0073】
ステップS509では、キューq_tmpからノードを1つ取り出して、ノードjとする。
【0074】
ステップS510では、ノードjまでのコストsとして、ノードjのコストとノードiまでの最短経路のコストの和を格納する。
【0075】
ステップS511では、コストsが、ノードjの暫定で格納されている最短経路コスト824よりも小さいかを判定する。YesならばステップS512へ、NoならばステップS508へ進む。
【0076】
ステップS512では、ノードjの最短経路コスト824にsを代入する。その後ステップS508へ進む。
【0077】
ステップS513では、変数iにi+1を格納する。そして、処理をステップS505に移行する。
【0078】
以上をすべてのノードで行うことにより、始点から各ノードまでの最短経路コストを求めることができる。
【0079】
次に、ステップS406において、経路が短い順にN個の経路を探索する処理(後ろ向きA*探索)を実行する。ステップS406の処理の詳細は、
図6のフローチャートを用いて説明する。
【0080】
後ろ向きA*探索では、前向きDP探索で求めた始点からノードまでの最短経路情報を用いて、経路コストの小さい順にN個の経路を求める。具体的には、前向きDP探索で求めた最短経路の終点側の経路を変えることで、2番目、3番目・・・に短い経路を算出する処理である。
【0081】
ここで、後ろ向きA*探索で始点から終点までの経路を短い順に求めることができる理由の説明を行う。
【0082】
理想的には、すべての経路のコストを調べれば経路をコストの小さい順に求められるが、現実的な計算量ではない。そこで、グラフ探索を逆向きに、下記に示すコストが小さい順に経路を探索していくことで、最短経路の次候補以降を算出する。
【0083】
このアルゴリズムの要点は、始点まで到達していない経路でも有望さの比較ができるように、全体経路の見積もりであるコスト852を導入していることである。
【0084】
この見積もりコストは終点から現時点のノードまでの経路のコストと前向きDP探索で求めた始点から現時点のノードまでの最短経路のコストの和である。
【0085】
この見積もりコストの小さい経路から順に探索すれば、コストの小さい順に経路を求めることができる。なぜならば、前向きDP探索で最短の経路を確定させているためである。
【0086】
ステップS601では、変数iに0を格納する。これは、ステップS602で作成するリストresに格納されている要素の数を表す。
【0087】
ステップS602では、探索結果の成果物である複数の経路を格納するためのリストresを作成する。
【0088】
ステップS603では、経路オブジェクト850を生成し終点ノード804の情報を格納し、経路オブジェクトを優先順位付きキューqに格納する。
【0089】
ここで、
図12を用いて経路オブジェクトおよび優先順位付きキューqの説明を行う。
【0090】
経路オブジェクトは終点から始点へ逆向きに進んだ時の経路を表している。経路オブジェクトは下記の4つの情報を持つ。すなわち、先頭ノードkのインデックス802、終点からノードkまで進んだ履歴となる経路851、終点から経路851を経てノードkまで通った時のコスト852、総合コスト853を持つ。ここで、総合コスト853とは、前向きDP探索で求めた始点からノードkまでの最小コスト824と、終点からある経路851を通ってたどり着いたノードkまでのコスト852の和である。
【0091】
優先順位付きキューqは経路オブジェクトを格納するキューである。経路オブジェクトがキューqに追加されるとソートされる。そのため、総合コスト853の小さい順に先に取り出せるようになっている。
【0092】
ステップS604では、iが、ステップS403で取得した生成文字列数Nより小さいかを判定する。判定がYesならばステップS605へ処理を進め、Noならばサブプロセスを終了する。
【0093】
ステップS605では、優先順位付きキューqが空かどうかを判定する。すなわちグラフ内の全部の経路を求めたかを判定している。判定がYesならばサブプロセスを終了し、NoならばステップS605へ処理を進める。
【0094】
ステップS606では、qから経路オブジェクトを1つ取り出し、経路オブジェクトxとする。
【0095】
ステップS607では、経路オブジェクトxのノードインデックスが始点ノードかどうかを判定する。すなわち、経路が始点まで達したかを判断している。判定がYesならばステップS608へ、NoならばステップS610へ処理を進める。
【0096】
ステップS608では、経路オブジェクトx内の経路851をリストresに格納する。
【0097】
ステップS609では、iにi+1を格納する。そして、ステップS604へ処理を進める。
【0098】
ステップS610では、経路オブジェクトxの先頭ノード802と接続する逆方向のノードのリスト825を全てキューq_tmpに格納する。
【0099】
ステップS611では、q_tmpが空かどうかを判定する。判定がYesならばステップS605へ、NoならばステップS612へ処理を進める。
【0100】
ステップS612では、q_tmpからノードを1つ取り出しノードjとする。
【0101】
ステップS613では、終点からノードjまでのコストを求める。コストは、ノードjのコスト821と経路オブジェクトxのコスト852の和とする。
【0102】
ステップS614では、経路オブジェクトを優先順位付きキューqに格納する。この時の経路オブジェクトのノードのインデックス802はノードjのインデックスであり、終点からそのノードまでの経路851は経路オブジェクトxの経路にノードjを足したものであり、終点からそのノードまでのコスト852はステップS613で求めたものであり、総合コストは、始点からそのノードまでの最短距離とコスト852の和とする。その後、処理をステップS611へ進める。
【0103】
以上のように総合コストの低い順に終点から始点へノードを展開することで、経路の短い順に複数の(N個の)経路を求めることができる。以上の手順で経路をN個求める。
【0104】
ステップS407では、メイン処理サーバ100は、ステップS406で求めた経路リストresに格納された経路810を総合コスト853の低い経路から順に文字列に変換する。
【0105】
図13を用いて説明する。経路810はノードのインデックスのリストである。ノードのインデックスは文字ラベルと対応づいているため、ノードを文字へ変換する。すると、文字のリストが出力される。
【0106】
その後、この文字リストを文字列へ整形する。整形処理では、空白の除去と連続する文字を一つにまとめる処理を行う。以上のようにすることで、経路を文字列860へ変換する。これを、リストresに格納されている経路分だけ繰り返して文字列を生成する。
【0107】
これらを総合コストの低い順に順位をつけてリストに格納したものをN-bestリスト870と呼ぶ。
【0108】
ステップS408では、メイン処理サーバ100は、N-bestリストの中で、INPUT MASKを満たす最も順番が先である文字列を選択する。
【0109】
図14を用いて説明する。ステップS405でN-bestのうち順番の小さい文字列から順に、ステップS402で生成した正規表現を満たすかを確認する。もしも満たすならばその時点で、メイン処理サーバ100はその文字列を返す。もしも満たさなければ、次の順位の文字列に対して同様の処理を行う。
【0110】
最後の順位の文字列まで正規表現を満たさないならば、メイン処理サーバ100は1位の順位の文字列を返す。
【0111】
以上説明した通り、本発明は、CRNNによるOCR結果として出力されるベクトル列をグラフ化することで、グラフの最短経路の問題として最適なOCR結果を求めることが可能となる。また、グラフ化して経路の問題とすることで、複数の解候補を得ることが可能となる。
【0112】
複数の解候補を得ることができるため、最短経路として求められた文字列がユーザが望むの形式の文字列ではない場合でも、他の候補について検証することが可能となり、ユーザが望むの形式の文字列を得ることが可能となる。
【0113】
本発明は、例えば、システム、装置、方法、プログラムもしくは記録媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【0114】
また、本発明におけるプログラムは、
図4~
図6に示すフローチャートの処理方法をコンピュータが実行可能なプログラムであり、本発明の記憶媒体は
図4~
図6の処理方法をコンピュータが実行可能なプログラムが記憶されている。なお、本発明におけるプログラムは
図4~
図6の各装置の処理方法ごとのプログラムであってもよい。
【0115】
以上のように、前述した実施形態の機能を実現するプログラムを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムを読み出し、実行することによっても本発明の目的が達成されることは言うまでもない。
【0116】
この場合、記録媒体から読み出されたプログラム自体が本発明の新規な機能を実現することになり、そのプログラムを記録した記録媒体は本発明を構成することになる。
【0117】
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD-ROM、CD-R、DVD-ROM、磁気テープ、不揮発性のメモリカード、ROM、EEPROM、シリコンディスク等を用いることが出来る。
【0118】
また、コンピュータが読み出したプログラムを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0119】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0120】
また、本発明は、複数の機器から構成されるシステムに適用しても、ひとつの機器から成る装置に適用しても良い。また、本発明は、システムあるいは装置にプログラムを供給することによって達成される場合にも適応できることは言うまでもない。この場合、本発明を達成するためのプログラムを格納した記録媒体を該システムあるいは装置に読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
【0121】
さらに、本発明を達成するためのプログラムをネットワーク上のサーバ、データベース等から通信プログラムによりダウンロードして読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。なお、上述した各実施形態およびその変形例を組み合わせた構成も全て本発明に含まれるものである。
【符号の説明】
【0122】
100 メイン処理サーバ
101 クライアント端末
200 スキャナ
300 データベースサーバ