C#で文字認識を行う

Microsoft Office をインストールすると、実は OCR ソフトがついてきます。C# からの利用も簡単です。下記のコードを、Visual C# Express 2005 または 2008 で作成し、参照設定に、 Microsoft Office Document Imaging 11.0 Type Library (MDIVWCTL.DLL) を追加してビルドしてください。

ボックス1 ソースコードのダウンロード (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);
            }
        }
    }
}


たとえば、下の画像をこのコードで読み込むと、
サンプル画像

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][)][の][利][用][サ][ン][プ][ル][で][す][。]

のように認識結果が出力されます。今回のサンプルでは文字そのもののみを対象としましたが、文字の画像上の位置やフォント名なども取得可能です。詳細については、
OCR with MicrosoftR Office By Martin Welker (CodeProject)
を参照してください。
 初出: 2008/07/21 01:04 ささお * 内容は随時追記・更新しています。
| 技術メモ::ソフトウェア | comments (4) | trackback (1) |このエントリーを含むはてなブックマーク このエントリーをはてなブックマークする
コメント
>サーバーによって例外が返されました。(HRESULTからの例外: 0x80010105(RPC_E_SERVERFAULT))

当方、同様の問題に遭遇して困っていましたが、以下の更新を入れたところ現象が発生しなくなりました。

・Update for Microsoft office2007suites ( KB2757915 )
・Updatefor2007MicrosoftOfflcesystem ( KB957542 )
・MlcrosoftOfficeShtreP01ntDeSlgner2007ServlcePtck3(SP3)

ちなみに更新前と後でのMDIVWCTL.DLL のバージョンは以下の通りです。
更新前(不具合有) ;12.0.4518.1014
更新後(不具解消) ;12.0.6600.1000
| とみんね | EMAIL | URL | 14/10/01 19:45 | ZyQqrFGU |
すごいですねぇ。標準でついてたなんて・・・。

ありがとう^^
| ふくちゃん | EMAIL | URL | 09/01/21 13:03 | xdHBrvTA |
はじめまして。OCRに興味があり、公開されているサンプルコードでいろいろ試してみました。しかし、画像のサイズが少し大きくなる(40KB程度)と、

サーバーによって例外が返されました。(HRESULTからの例外: 0x80010105(RPC_E_SERVERFAULT))

というエラーが出てOCR処理が行えません。今のところ画像のファイルサイズが関係するということ以外原因がわかりません。何かヒントをご存じないでしょうか。
| wakakumo | EMAIL | URL | 08/10/09 17:57 | k3A.qQLw |
いつも見ています。
過去の記事の
http://tmp.junkbox.info/index.php?e=9
こちらのと同じUSBトングルとAKC121を入手して実験を行っているのですが、
AT+ZV EnableBond (PC側のID12桁) (任意のパスワード)
の、PC側のID12桁が何なのかわかりません。
トングルの裏面の記号は11桁なので違うものだとは思うのですが、BT-01UDEの何処にPC側のID12桁の記載があるか教えていただけませんでしょうか?
お願い致します。
| tester | EMAIL | URL | 08/08/07 00:55 | y9ywrTyo |
コメントする








この記事のトラックバックURL
http://tmp.junkbox.info/tb.php/48
トラックバック
[C#]Microsoft OfficeにOCRが付属していたらしい
ここ最近フリーのOCRライブラリを探してて、smartOCRのDLLはライセンス的にまずいよなぁとかうんうん唸っていたら発見 http://tmp.junkbox.info/tb.php/48 これでC#でOCRが使える!まだそんなに試...
| だらだらやるよ。 | 08/07/22 21:08 |

  
AMAZON
CALENDAR
S M T W T F S
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31       
<<   12 - 2017   >>
COMMENTS
TRACBACK
PROFILE
LOGIN
現在のモード: ゲストモード
USER ID:
PASS:
OTHERS
LINK
POWERED BY
POWERED BY
ぶろぐん
SKIN BY
ゲットネット...¥