0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C#でTesseractOCRを使って発行したらハマったこと

0
Last updated at Posted at 2025-09-03

経緯

C#で作っているWindowsアプリケーションにOCR機能を内蔵することになり、Tesseractを組込んでみたのですが、デバッグ実行する時は動作するのに、発行すると実行時例外で動作せずとても困ったが、遂に解決できたので記事にしたよ。この大AI時代に今更Tesseractかよ!と思うことなかれ。
ちなみに、Windows10のOCR機能の使ってるのですが、日本語が読み取れる分、ちょっと精度が落ちる気がします。日本語を読み取るにはそっちがいいかもしれません。また、AIのOCRは残念ながら .NET Framework4.8 では使えませんでした。

参考にした記事

この辺を参考に、VisualStudio上でTesseractを使ってOCRできるようになるところまでは、割とすんなりいきました。

発行

今回のアプリケーションは、プロジェクトを右クリックして出てくる「発行」メニューで、公開パッケージを作ってインストールしています。何も考えずにこれでアプリケーションをインストールと、new Engine()の時に例外が発生してしまいます。

ネットを調べたり、Copilot先生に聞いたりしても、tessdataのディレクトリの指定が誤ってるのでは、という情報しか出てこないので、自分もそこを、あれやこれや弄っていました。でも最初はそれも発生していたようなんですよね。

原因1

自分は最初、ソリューションエクスプローラーで、プロジェクトの下に、こんな風にtessdataを配置していました。

image.png

で、Engineの生成では以下のように指定していました。

image.png

これで、デバッグ実行時はうまく動作するようになります。しかし、発行を行ってインストールしたものでは実行時に例外が発生しました。その原因はこれ。

eng.traineddataをクリックすると、下のようにプロパティが表示されますが、ビルドアクションを「コンテンツ」に、出力ディレクトリにコピーを「常にコピーする」に設定します。

image.png

原因2

しかし、これだけでは、発行したアプリケーションでは全然動いてくれませんでした。
エライ悩んだんですが、ビルドした時のディレクトリを眺めていたら、Releaseディレクトリの中にもx64とかx86というディレクトリがあることに気づきます。中をみると、tesseract55.dllとleptonica-1.85.0.dllのDLLがありました!絶対これや!

image.png

正しいやり方がわからんのですが、このx64ディレクトリをそのままソリューションエクスプローラーにドラック&ドロップして、こんな感じにしました。もちろん、この二つのDLLもビルドアクションを「コンテンツ」に、出力ディレクトリにコピーを「常にコピーする」に設定しました。これで発行すれば、アプリケーションにもコピーされ、インストールしても実行されるようになりました。

image.png

最後に

自分はWIndows10のOCR機能も、Tesseractも使っていますが、動画フレーム上の半角英数をOCRしたいだけなので、爆速で良いんですよねー。特にTesseractは英数専用にできるので重宝します。GPTだとネット接続は必要だし10秒、20秒は軽くかかりますもんね。

救われた方がいらっしゃいましたら、ぜひ いいね! で教えてください。
また、そんな配布の仕方はいかんよ、という場合はどうすればよいか教えてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?