ALOCR Ver 1.0 ユーザーズマニュアル

目次
  1. 概要
  2. 各クラスの概要

マニュアルホームページ

リファレンスマニュアル


概要

ALOCRは1999年4月にリリースされた、最新の日本語活字文字認識ライブラリです。Ver.1.0で提供されるのは、1段落認識機能と、1行テキスト認識機能と、1文字認識機能です。ALPRIMライブラリを用いることによって、文書画像からテキスト段落、テキスト行を抽出することができます。

認識対象文字種はJIS第1水準の全漢字、記号の一部、アルファベット、数字、カタカナ、ひらがな+JIS第2水準の人名漢字(58文字)+JIS第2水準の高頻度漢字(468文字)です。ただし、パターン辞書を追加、入れ替えることによって、認識対象文字種は自由に拡張することができます。
2005年8月31日にJIS第2水準の54文字が追加されました。

認識対象フォントは、明朝体、ゴシック体、丸ゴシック体、教科書体の任意の種類、太さのマルチフォント対応となっています。パターン辞書を追加することで認識対象フォントを自由に拡張することができます。拡張用として、低品質画像向け辞書、楷書体のパターン辞書が標準で提供されます。

認識対象の文字サイズは、400dpiで6ポイント〜を推奨します。4〜6ポイントの小さい文字は低品質画像向け辞書を組み込むことで実用的な認識率を得ることができます。
※72ポイントが1インチ角(24.5mm角)に相当するので、400dpiの6ポイントは33ピクセル×33ピクセルに相当します。


特長

  1. 最新のアルゴリズムを採用
    • 非線形正規化
      計算量の大きい非線形の正規化アルゴリズムを文字パターンの正規化に採用。文字パターンの文字線ができるだけ一様に分布するように正規化してから認識ます。文字パターンの変形に強い認識システムを作ることができます。

    • 細線化
      さらに細線化アルゴリズムを利用して、文字線の骨格特徴を、活字文字認識に取り入れました。文字パターンの線幅の偏りに強い認識システムを作ることができます。

    • 複数の特徴合成
      複数の特徴を組み合わせることで、お互いの特徴の欠点を補完しあい、より高い認識率を実現しました。

  2. 低品質文字の認識に対応
    つぶれた文字、かすれた文字に対応するパターン辞書を提供。FAX等の低解像度の文字の認識率が高くなります。認識エンジン側で、文字の品質を自動的に判断して利用する辞書を切り替えます。

  3. 通常サポートされていないフォントの認識に対応
    オプションのパターン辞書コンパイラを利用することで、任意のWindows TrueTypeフォント専用のパターン辞書を構築することができます。

  4. 強力な認識後言語処理
    20メガバイトの日本語知識辞書を用いて、誤認識率を50%以上改善することができます。
  5. 2022年深層学習対応文字認識
    誤認識率をさらに50%〜75%改善することができます。
  6. 2023年第1四半期 深層学習対応言語処理
    認識後言語処理に追加することでさらに認識率を改善することができます。

目次


OS対応

Windows 95、Windows 98、Windows NT対応。ライブラリは全てANSI標準のC、C++で記述されているため、Macintosh、UNIXへの移植も可能。


目次


ライブラリのファイル構成

  1. 4つのDLL
    DLL概要
    ngkocr1.dll文字認識エンジンコア(C++)
    ngkocr2.dll文字認識エンジンコア(C)
    ngkocr3.dll文字認識エンジンAPI(C++)
    ngkocr4.dll文字認識エンジンコア(C++)

  2. インポートライブラリ
    ngkocr3.dllに対応するngkocr3.libが必要です。

  3. ヘッダファイル
    ヘッダファイル概要
    ocrdef.h文字種等の定数の定義
    ocrco.h認識結果構造体等の定義
    errcode.hエラーコードの定義
    cjocrpat98.hパターンクラス
    cjocrstock.h特になし
    cjocrdict98.h辞書クラス
    cjocrrec98.h1文字認識クラス
    cjocrline98.h1行認識クラス
    cjocrlang.h言語処理付き1行認識クラス
    cjocrblock.h言語処理付き1段落認識クラス

  4. 各クラスをインポートするために"USEALOCROCRDLL3"をプリプロセッサの定義等で定義する必要があります。

目次


クラスライブラリの構成

パターン認識は、認識ターゲットとなるパターン(文字)の特徴のパターン辞書と、入力画像の特徴をマッチングして、入力特徴と最もよくマッチするパターン辞書のキー(文字)を出力することによって、実行されます。

パターン辞書を作るときの特徴の計算と、入力画像の特徴計算は、全く同じアルゴリズムが用いられます。パターン認識のためのクラスライブラリは、以下の6つとなります。

  1. パターン辞書クラス(CJocrDict)
    認識対象となるパターン(文字)の特徴のデータベースを管理するためのクラス

  2. パターンクラス(CJocrPattern)
    入力画像の特徴を計算するクラス。パターン辞書を作るときに、各パターンの特徴を計算しますが、その時もこのパターンクラスを用います。

  3. 1文字認識クラス(CJocrRecognize)
    パターンクラスとパターン辞書クラスのインスタンスをメンバー変数として持っています。パターンクラスの特徴と、パターン辞書クラスの各レコードの特徴をマッチングして、もっとも似ているパターン辞書のキー(文字)を認識結果として出力します。

  4. 1行認識クラス(CJocrLine)
    1行認識クラスは、1文字認識クラスを使って、1行の文字列を認識するためのクラスです。内部では、1行の文字列画像から、個々の文字の画像を切り出して、1文字認識クラスに渡して文字を認識し、結果をまとめて返すという処理を行っています。

  5. 言語処理つき1行認識クラス(CJocrLang)
    言語処理つき1行認識クラスは、1行認識クラスのサブクラスで、言語処理辞書の設定が追加されています。言語処理辞書を設定しない場合の動作は、1行認識クラスと全く同じことになります。

  6. 言語処理つき1段落認識クラス(CJocrBlock)
    言語処理つき1段落認識クラスは、1段落のテキストを1行単位に切り分けて、言語処理つき1行認識クラス(CJocrLang)を呼び出します。


目次


オプションツール

  1. パターン辞書コンパイラ
     WindowsのTrueTypeフォント名と文字コードを指定することによって、標準でサポートされているフォント以外のパターン辞書を作ることができます。

  2. 言語辞書コンパイラ
     言語処理に用いる標準の言語辞書以外に、特定領域用の言語辞書を作ることができます。標準の言語辞書は新聞、雑誌等から収集した辞書です。標準の辞書を使った場合の、後処理による誤認識のリカバリは、新聞や雑誌では最大50%(実験値)です。
     新聞や雑誌の言語辞書で住所録等を処理すると、却って逆効果となる場合があります。住所録に対しては、住所や氏名を元にした言語辞書を適用することをお勧めします。
     特定領域用の言語辞書を使って、特定領域のテキストを認識した場合の誤認識のリカバリは最大75%(名刺認識による実験値)となります。

目次


各クラスの概要


  1. パターン辞書クラス

    パターン辞書クラスは、通常の文字の画像パターンから約300次元の特徴を計算したデータベースを操作するクラスです。

    辞書登録、辞書削除、辞書参照といった機能があります。

    日本語文字認識では、認識対象のパターン(文字)の種類が3000〜4000におよびます。1パターンの特徴が300次元あるとすれば、百万以上の特徴を比較しないと、パターン認識ができない計算になります。

    この計算量をいかに小さくするかがパターン認識の速度を決めます。最も多く使われるのが、数次元の特徴を使った大分類、数十次元の特徴を使った中分類を使って、候補を絞り込む方法です。
    そうした段階的なパターン認識を実行するための最適なデータ構造を管理するのも、パターン辞書クラスの役目です。

    ユーザー辞書を使った場合、ユーザー辞書のレコードの追加、削除、変更は動作中に自由に行うことができます。

    パターン辞書クラスの細かい利用方法はリファレンスマニュアルで説明しますが、概念的には

    1. パターン辞書クラスのインスタンスをnewする。
    2. 辞書名を設定する(最大12個の辞書を設定可能)
    3. 辞書をロードする
    4. 認識やパターン登録、パターン削除、パターン参照等を実行する。
    5. パターン辞書クラスのインスタンスをdeleteする。

    という5段階の操作となっています。認識を行うためには、
    パターンクラス1文字認識クラス1行認識クラス言語処理付き1行認識クラス1段落認識クラスのいずれかと同時に利用する必要があります。パターンの登録、削除、参照では、パターンクラスを同時に利用する必要があります。

    目次


  2. パターンクラス

    パターン(文字)の画像と、パターン(文字)コード、パターンの画像からの特徴計算を行うためのクラスです。ALALOCRでは、取り込んだパターンの画像は、48×48の正方形に正規化されます。この場合、単に大きさを拡大縮小するだけでなく、非線形正規化アルゴリズムを用いていパターンの前景部分(文字のストローク部分)が、正方形内になるべく一様に分布するように正規化されます。

    パターンクラスは、20種2000次元以上の特徴量の計算を行うことができますが、ALOCRでは、このうち6種300次元の特徴だけを用いて文字認識を行っています。

    パターンクラスの細かい利用方法はリファレンスマニュアルで説明しますが概念的には
    1. パターンクラスのインスタンスをnewする。
    2. 初期化する(特徴を保持する領域の確保)
    3. パターンの画像をセットして特徴を計算する
    4. パターンクラスのインスタンスをdeleteする
    という4段階の操作となっています。認識を行うためには、
    パターン辞書クラス1文字認識クラス1行認識クラス言語処理付き1行認識クラス1段落認識クラスのいずれかと同時に利用する必要があります。パターンの登録では、パターン辞書クラスを同時に利用する必要があります。

    目次


  3. 1文字認識クラス

    パターンクラスとパターン辞書クラスをメンバー変数として、パターンとパターン辞書を照合して、もっとも合致度が高いパターン辞書のキー(文字コード)を認識結果として出力します。

    1文字認識クラスの細かい利用方法はリファレンスマニュアルで説明しますが、概念的には
    1. 1文字認識クラスのインスタンスをnewする
    2. パターンクラスと、パターン辞書クラスのインスタンスをセットする
    3. 初期化する(認識用のワークエリアの確保)
    4. パターンクラスのインスタンスにパターンの画像をセットして特徴を計算する
    5. 認識関数をコールする
    6. 認識結果取得関数をコールする
    7. 1文字認識クラスのインスタンスをdeleteする。

    という7段階で行います。このうち、4〜6の部分をくり返すことで、同じパターン辞書を使った1文字認識をくり返し利用することができます。

    認識結果には、最大10の認識結果候補が確信度順にソートして格納されています。通常最初の候補が、認識結果として採用されます。さらに、パターンの外接矩形の座標、パターンの文字種等が結果の情報に含まれています。

    目次


  4. 1行認識クラス

    1文字認識クラスのインスタンスをメンバー変数として、1行の文字列を認識します。日本語には縦書きと横書きの2種類の行方向があり、ALOCRは両方に対応しています。内部では、日本語の1行の文字列画像から1文字の画像を切りだして、1行認識をくり返すという処理を行っています。
    1行認識クラスは、Y軸正が下方向の座標系のみサポートしています。Y軸正が上方向の座標系は1段落認識クラスのみでサポートされています。

    1行の文字ピッチが可変である、1つの文字が2〜5つに空白で分けられているという日本語独自の特徴によって、内部では非常に複雑な処理が行われています。ALOCRでは、1行の画像を周辺分布を元に分割して、実際上あり得る全ての分割画像の組み合わせに関して文字認識を行い、組み合わせ最適化手法によって最も確からしい組み合わせの認識結果を出力するという手法を取っています。

    1行認識クラスの細かい利用方法はリファレンスマニュアルで説明しますが、概念的には

    1. 1行認識クラスのインスタンスをnewする。
    2. パターンクラス1文字認識クラスのインスタンスをセットする
    3. 文書画像(先頭アドレスと幅と高さ)をセットする
    4. 行の領域と傾きを指定する
    5. 1行認識関数をコールする
    6. 認識結果取得関数をコールする
    7. 1行認識クラスのインスタンスをdeleteする。

    という7段階で行います。このうち、4〜6の部分をくり返すことで、1つの文書画像内の各行を認識することができます。文書画像を切りかえるときは3をコールしなおします。

    認識結果には、1文字認識と同じく最大10の認識結果候補が確信度順にソートして格納されています。1行認識の場合は、認識結果の構造体が1行の文字数分の配列となっています。各配列の最初の候補が、認識結果として採用されます。さらに、パターンの外接矩形の座標、パターンの文字種、パターンの後の空白のサイズ等が結果の情報に含まれています。

    目次


  5. 言語処理付き1行認識クラス

    1行認識クラスのサブクラスで、言語処理辞書を設定する以外は、1行認識クラスと同じ動作をします。使い方も1行認識クラスと同じですが、認識の後処理として言語処理の行われる点だけが異なります。
    言語辞書を指定しない場合、言語処理付き1行認識クラスの動作は、1行認識クラスの動作と全く同じです。通常は、こちらのクラスを利用して、言語処理辞書を指定したり、外したりしながら1行認識を行います。


    目次


  6. 1段落認識クラス

    1段落のテキストを行単位に切り分けて、各行に対して言語処理付き1行認識クラスを呼び出します。1段落のテキストは、縦書きあるいは横書きのどちらかで統一されている必要があります。

    文書画像から段落を抽出するには、文書画像解析ライブラリALPRIMを利用する必要があります。ALPRIMライブラリを使うことによって、縦書き、横書き、斜め書きのテキストブロック(段落)を自動、半自動、手動で抽出することができます。


    1段落認識クラスの細かい利用方法はリファレンスマニュアルで説明しますが、概念的には

    1. 1段落認識クラスのインスタンスをnewする。
    2. 言語処理付き1行認識クラスのインスタンスをセットする
    3. 文書画像(先頭アドレスと幅と高さ、解像度)をセットする
    4. 文書画像での段落位置を指定する
    5. 1段落認識関数をコールする
    6. 認識結果取得関数をコールする
    7. 1段落認識クラスのインスタンスをdeleteする。

    という7段階で行います。このうち、4〜6の部分をくり返すことで、1つの文書画像内の各段落を認識することができます。文書画像を切りかえるときは3をコールしなおします。

    認識結果には、1文字認識、1行認識と同じく最大10の認識結果候補が確信度順にソートして格納されています。1段落認識の場合は、認識結果の構造体が1段落の文字数分+行数分の配列となっています。各配列の最初の候補が、認識結果として採用されます。さらに、パターンの外接矩形の座標、パターンの文字種、パターンの後の空白のサイズ等が結果の情報に含まれています。各行の終わりには、改行コードが認識結果としてセットされます。

目次


マニュアルホームページ

リファレンスマニュアル