Introduction
Windows 10 に OCR 機能が組み込まれているので、それを試してみたが、言語パックだ Windows Runtime (WinRT) だと色々あったのでまとめた。
サンプルソースは、GitHub に下記を用意しました
サンプルは .NET Framework 4.8 のコンソールアプリケーションです。
How to use?
コーディング前に準備が必要だったりします。
Windows メタデータ の参照
OCR は WinRT として実装、提供されているため、Windows メタデータの参照が必要。
nuget パッケージのインストール
WinRT の各種機能を呼び出すには nuget パッケージ Microsoft.Windows.SDK.Contracts を利用するのが最速。
参照した Windows メタデータと同じバージョンを利用するが安全だと思われる。
コード
シンプルなコードで、ログ出力、処理速度出力をしています。
また、認識に使用する OCR の言語を引数で変更できます。
1 | using System; |
認識結果
後述しますが、言語パックの有無で認識精度が変化します。
正しくは、認識させたいテキストの言語に応じた OCR エンジンを生成する必要があるということです。
例えば、下記の画像を日本語の OCR エンジンで認識させます。
1 | $ sources\Demo\bin\Release\Demo.exe ja testdata\ja.png |
多少誤字はあるものの良好な結果です。
英語のテキストを認識出来るか?
下記の画像のような英文です。
日本語の OCR エンジンにかけますが、あまり良くない結果です。
1 | $ sources\Demo\bin\Release\Demo.exe ja testdata\en.png |
英語のテキストを認識させよう
ということで、言語指定を en
にしますが
1 | $ sources\Demo\bin\Release\Demo.exe en testdata\en.png |
OCR エンジンが生成できません。
これは、指定した言語の OCR エンジンが OS にインストールされていないため、OcrEngine.TryCreateFromLanguage
が null を返すためです。
任意の言語に対応した OCR エンジンを追加するには OS の言語設定から言語パックを追加する必要があります。
光学式文字認識 という文字が見えます。
これをインストールすれば OK。
再起動も不要。
再度挑戦。
1 | $ sources\Demo\bin\Release\Demo.exe en testdata\en.png |
劇的に改善しました。
おまけに認識速度も改善です。