画像文字認識

3158 ワード

OCRエンジン
OCR(Optical Charcter Recognition)とは、スキャナやデジタルカメラを使ってテキストデータをスキャンして画像ファイルにし、画像ファイルを分析処理して文字情報やレイアウト情報を自動的に識別するソフトウェアのことです.
OCRエンジンコア技術モジュールは主に以下のいくつかの部分から構成されています.
画像入力:異なる画像フォーマットファイルを読み込むアルゴリズム.
画像前処理:主に画像のバイナリ化、ノイズ除去、傾き比較などのアルゴリズムを含む.
レイアウト分析:ドキュメントの画像を段落に分けて、支店のアルゴリズムをレイアウト分析アルゴリズムといいます.
文字カット:文字カットアルゴリズムは主に文字の接着、切断による文字の簡単なカットが難しい問題を処理します.
文字特徴抽出:文字画像に対して多次元の特徴を抽出し、後の特徴マッチングモード識別アルゴリズムに用いる.
文字認識:現在の文字から抽出された特徴ベクトルを特徴テンプレートライブラリとテンプレート粗分類とテンプレート細マッチングし、文字を識別するアルゴリズム.
紙面回復:元の文書のレイアウトを識別し、元のレイアウト形式で識別結果をwordやpdfなどのフォーマットの文書に出力することをレイアウト回復アルゴリズムといいます.
後処理補正:特定の言語コンテキストの関係に基づいて、識別結果を正しいアルゴリズムで行う.
ここで、3つの比較的主流と成熟した識別方式は、Netについて:
方式一、Aprisse OCRが実現する.その中で使うべき3つのdllはAprseOCR.dll、DevIL.dll、ILU.dllです.その数字の認識率が高いです.
サンプルコード:
[DllImport("AspriseOCR.dll")]
  static extern string craboOCR(string file, int type);
private void GetVeryfyCode()
  {
if(File.Exists(_imgPath))//ok
   {
    try
    {
    this.picbVeryfyCode.Image=System.Drawing.Bitmap.FromFile(_imgPath);
     _veryfyCode=craboOCR(_imgPath,-1);   //   string,  "\r
" !!
_veryfyCode=_veryfyCode.Substring(0,4); this.txtVeryfyCode.Text=_veryfyCode; } catch(Exception e) { this.lblResult.Text+=e.Message; } } }
 
方式二、Microsoft Office Dockment Imaging(Office 2007)コンポーネントが実現します.
方式三、Tesseractエンジン、NETバージョンのアドレスは:http://www.pixel-technology.com/freeware/tessnet2/.この中で、使用前にエンジンをインストールし、インストールが成功したら、そのDosコマンドラインをカプセル化することができます.
コールコマンド形式は以下の通りです.
 private void UseOCR(string v_strTesseractPath, string v_strSourceImgPath, string v_strOutputPath, string v_strLangPath)
        {
            using (Process process = new System.Diagnostics.Process())
            {
                process.StartInfo.FileName = v_strTesseractPath;
                process.StartInfo.Arguments = v_strSourceImgPath + " " + v_strOutputPath + " -l " + v_strLangPath;
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.CreateNoWindow = true;
                process.StartInfo.RedirectStandardOutput = true;
                process.Start();
                process.WaitForExit();
            }
        }