DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#でOCRを使用するには

環境/言語:[VisualStudio2010ExpressC#]
分類:[.NET]

2013/08/28(Wed) 21:58:51 編集(投稿者)

C#でOCR処理を行いたいのですが、エラーが出てしまいうまくいきません。
OCRは、Microsoft OfficeのDocument Imaging 12.0 Type Library (MDIVWCTL.DLL)を使っています。
★の行で”Object hasn't been initialized and can't be used yet”と例外が発生してしまいます。
参照設定では、”MODI”と表示されており、問題ないように思うのですが。
何かアドバイス等いただければと思い、投稿させていただきました。
よろしくお願いいたします。

// filename:画像ファイル
        private void loadOcr(String filename)
        {
            try
            {
                MODI.Document doc = new MODI.Document();
                doc.Create(filename);
                doc.OCR(MODI.MiLANGUAGES.miLANG_JAPANESE, false, false);//★

                foreach (MODI.Image img in doc.Images)
                {
                    MODI.Layout layout = img.Layout;
                    textBoxResult.Text = layout.Text;
                }
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine(ex.Message);
            }
        }
// ドキュメント類からの推測です。2003のドキュメントしかないようですが。

http://msdn.microsoft.com/en-us/library/aa192253.aspx
Createメソッドの解説にはtiff(とmdi)ファイルしか受け付けないとありますが、大丈夫でしょうか。
// bmpファイルも受け入れるという記述も余所で見かけましたが。
Createした後で、.Images.Countはどうなっていますか?
2013/08/28(Wed) 22:42:21 編集(投稿者)

Hongliangさん
アドバイスありがとうございます。

> http://msdn.microsoft.com/en-us/library/aa192253.aspx
> Createメソッドの解説にはtiff(とmdi)ファイルしか受け付けないとありますが、大丈夫でしょうか。

bmpファイルで読み込んでいました。tiffファイルでも読み込んでみましたが
Createのところで例外”File sharing violation”が発生していました。


> // bmpファイルも受け入れるという記述も余所で見かけましたが。
> Createした後で、.Images.Countはどうなっていますか?

bmpを読み込んだときは、.Images.Countは1となっており、読み込まれているようです。
> OCRは、Microsoft OfficeのDocument Imaging 12.0 Type Library (MDIVWCTL.DLL)を使っています。

  因みに、OSは何をお使いですか?
  32/64bit も影響します。

  64bit OSで、32bit版のMDIVWCTL.DLLを参照して
  しまっているとか・・・

  その場合は、C#の方をx86にしないと動作しないかと。

以上。参考まで
オショウさん
アドバイスありがとうございます。
動作しているPCは64bitです。
参照先は64bit版のdllを参照していました。

ためしに、Office2007を削除して再インストールしてみたところ
正常に動作することができました。
何が原因かはいまいち不明ですが、とりあえず動きましたので、解決とさせていただきます。
解決済み!
  • 題名: Re[3]: C#でOCRを使用するには
  • 著者: 魔界の仮面弁士
  • 日時: 2013/09/02 23:53:22
  • ID: 31791
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
2013/09/02(Mon) 23:57:47 編集(投稿者)

■No31790に返信(kintonさんの記事)
> 動作しているPCは64bitです。
> 参照先は64bit版のdllを参照していました。

Visual Studio 2010 C# Express は、既定で 32bit ビルド(x86)に設定
されていたはずですが…意図的に 64bit ビルドに変更されたのでしょうか?
http://pieceofnostalgy.blogspot.jp/2011/08/visual-cany-cpu.html
http://sheepdogjam.cocolog-nifty.com/blog/2012/05/visualstudio-c-.html


そもそも、MODI に 64bit 版があったことが初耳です。
32bit 版しかないと思っていました。
http://support.microsoft.com/kb/982760
http://support.microsoft.com/kb/927383


> ためしに、Office2007を削除して再インストールしてみたところ
> 正常に動作することができました。

Office 2007 は 32bit 専用のアプリケーションです。

Office 2010/2013 の場合は、既定では 32bit 版がインストールされます。
64bit 版を導入する場合には、\x64\Setup.exe を直接実行してください。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板