C#で文字認識を行う
Microsoft Office をインストールすると、実は OCR ソフトがついてきます。C# からの利用も簡単です。下記のコードを、Visual C# Express 2005 または 2008 で作成し、参照設定に、 Microsoft Office Document Imaging 11.0 Type Library (MDIVWCTL.DLL) を追加してビルドしてください。
ソースコードのダウンロード (Visual C# Express 2008 用)
v1.0 (2008/07/21)
たとえば、下の画像をこのコードで読み込むと、
のように認識結果が出力されます。今回のサンプルでは文字そのもののみを対象としましたが、文字の画像上の位置やフォント名なども取得可能です。詳細については、
OCR with MicrosoftR Office By Martin Welker (CodeProject)
を参照してください。
ソースコードのダウンロード (Visual C# Express 2008 用)
v1.0 (2008/07/21)
using System;
using System.Text;
/// <summary>
/// OCR with MicrosoftR Office By Martin Welker (CodeProject)
/// に基づく Office 2003 に依存したOCR処理。
/// Microsoft Office Document Imaging 11.0 Type Library
/// (MDIVWCTL.DLL) が別途必要
/// Office 2007 ではこのライブラリはデフォルトではインストールされない
/// ので、インストール時に、
/// Microsoft Office Document Imaging
/// + Microsoft Office Document Imaging Writer
/// を追加選択しておく必要がある。
/// <seealso cref="http://www.codeproject.com/KB/office/modi.aspx"/>
/// </summary>
namespace OfficeOCRTest
{
class Program
{
static void Main(string[] args)
{
if (args.Length != 1)
{
Console.WriteLine("OfficeOCRTest [画像ファイル名]");
return;
}
string filename = args[0];
try
{
MODI.Document doc = new MODI.Document();
doc.Create(filename);
// 読み取り言語を指定してOCR処理。
// 英数字のみとわかっている場合には、
// miLANG_ENGLISH を指定したほうが精度が高い
doc.OCR(MODI.MiLANGUAGES.miLANG_JAPANESE, false, false);
// 複数ページを持つ画像フォーマットに対応
for (int i = 0; i < doc.Images.Count; i++)
{
MODI.Image img = (MODI.Image)doc.Images[i];
MODI.Layout layout = img.Layout;
Console.WriteLine("* 1ページ分のデータ *");
Console.WriteLine(layout.Text);
Console.WriteLine();
// 同じデータを単語ごとに分割して出力
StringBuilder str = new StringBuilder();
for (int j = 0; j < layout.Words.Count; j++)
{
MODI.Word word = (MODI.Word)layout.Words[j];
str.Append("[" + word.Text + "]");
}
Console.WriteLine("* 単語に分割して出力 *");
Console.WriteLine(str.ToString());
Console.WriteLine();
}
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
using System.Text;
/// <summary>
/// OCR with MicrosoftR Office By Martin Welker (CodeProject)
/// に基づく Office 2003 に依存したOCR処理。
/// Microsoft Office Document Imaging 11.0 Type Library
/// (MDIVWCTL.DLL) が別途必要
/// Office 2007 ではこのライブラリはデフォルトではインストールされない
/// ので、インストール時に、
/// Microsoft Office Document Imaging
/// + Microsoft Office Document Imaging Writer
/// を追加選択しておく必要がある。
/// <seealso cref="http://www.codeproject.com/KB/office/modi.aspx"/>
/// </summary>
namespace OfficeOCRTest
{
class Program
{
static void Main(string[] args)
{
if (args.Length != 1)
{
Console.WriteLine("OfficeOCRTest [画像ファイル名]");
return;
}
string filename = args[0];
try
{
MODI.Document doc = new MODI.Document();
doc.Create(filename);
// 読み取り言語を指定してOCR処理。
// 英数字のみとわかっている場合には、
// miLANG_ENGLISH を指定したほうが精度が高い
doc.OCR(MODI.MiLANGUAGES.miLANG_JAPANESE, false, false);
// 複数ページを持つ画像フォーマットに対応
for (int i = 0; i < doc.Images.Count; i++)
{
MODI.Image img = (MODI.Image)doc.Images[i];
MODI.Layout layout = img.Layout;
Console.WriteLine("* 1ページ分のデータ *");
Console.WriteLine(layout.Text);
Console.WriteLine();
// 同じデータを単語ごとに分割して出力
StringBuilder str = new StringBuilder();
for (int j = 0; j < layout.Words.Count; j++)
{
MODI.Word word = (MODI.Word)layout.Words[j];
str.Append("[" + word.Text + "]");
}
Console.WriteLine("* 単語に分割して出力 *");
Console.WriteLine(str.ToString());
Console.WriteLine();
}
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
たとえば、下の画像をこのコードで読み込むと、
F:\> OfficeOCRTest.exe modi.jpg
* 1ページ分のデータ *
これは、 Microsoft Office Document Imaging 11 , 0 TyPe Library ( MDIVWCTL . DLL ) の利用サンプルです。
* 単語に分割して出力 *
[こ][れ][は][、][Microsoft][Office][Document][Imaging][11][,][0][TyPe][Library][(][MDIVWCTL][.][DLL][)][の][利][用][サ][ン][プ][ル][で][す][。]
* 1ページ分のデータ *
これは、 Microsoft Office Document Imaging 11 , 0 TyPe Library ( MDIVWCTL . DLL ) の利用サンプルです。
* 単語に分割して出力 *
[こ][れ][は][、][Microsoft][Office][Document][Imaging][11][,][0][TyPe][Library][(][MDIVWCTL][.][DLL][)][の][利][用][サ][ン][プ][ル][で][す][。]
のように認識結果が出力されます。今回のサンプルでは文字そのもののみを対象としましたが、文字の画像上の位置やフォント名なども取得可能です。詳細については、
OCR with MicrosoftR Office By Martin Welker (CodeProject)
を参照してください。
この記事のトラックバックURL
http://tmp.junkbox.info/tb.php/48
新着トラックバック
ここ最近フリーのOCRライブラリを探してて、smartOCRのDLLはライセンス的にまずいよなぁとかうんうん唸っていたら発見 http://tmp.junkbox.info/tb.php/48 これでC#でOCRが使える!まだそんなに試...
| だらだらやるよ。 | 08/07/22 21:08 |
TOP PAGE △