- ※適用バージョン:Windows 10 version 1507(build 10240)以降
はじめに
OCR機能を組み込めたら、どんなアプリが作れるでしょう?
- 名刺や葉書からデータを取り込む住所録アプリ
- レシートや領収書などからデータを取り込む家計簿アプリ
- 印刷された書類などをテキストデータ化するアプリ
- 商品名を読み取って通販サイトを検索するアプリ
- 電柱などの住所表示を読み取って現在地を検索するアプリ
いろんなアプリのアイデアが浮かんでくることでしょう。でも、市販されている日本語OCRライブラリは、けっこうなお値段がするので、個人開発者のレベルではちょっと使いにくいのです。そのようなライブラリは、辞書を使って読み取り精度を高めていたり、帳票の罫線を認識して誤認識を減らす工夫がしてあったりと、魅力的ではあるのですが。あるいは、最近になってメジャーどころも参入してきたOCRのWebサービスを利用するという手もあります。MicrosoftのComputer Vision APIやGoogleのCloud Vision APIなどです。例に挙げたこれら2つは、月間の利用回数が少なければ無料なので、とっつきやすいです。
OCRのWebサービスは、安くなってきたとはいうものの完全無料ではありません。インターネットに接続していなければ使えないという弱点もあります。デバイス単独で使える無料の日本語OCRライブラリはないものでしょうか? じつは、いくつかあります。そして、あまり知られていないようなのですが、Windows 10には標準で「OCRエンジン」が搭載されているのです。OCRエンジンはUWP(Universal Windows Platform)のAPIですが、WPFなどの.NET Frameworkアプリからも利用できます。
今回は、UWPアプリが登場したときからあったので「最前線」というわけではありませんが、Windows 10のOCRエンジンを使う方法を解説します。
Windows 8.1から使えた"OCR Library for Windows Runtime"
WindowsのOCRライブラリは、じつは2014年の9月に導入されました。Windows 8.1の時代です。当時はOS標準ではなく、NuGetから開発環境にライブラリをインストールする必要がありました。
それから3年半。久しぶりに使ってみましたが、Windows 10になってそれほど読み取り精度が上がったという感じは残念ながらあまりしませんでした(日本語/英語とも)。辞書による補正もいまだにやっていない感じで、市販の日本語OCRソフトに比べるとずいぶん見劣りしてしまいます。日本語文書の読み上げに使うのはまだちょっと苦しい感じで、今のところは入力補助(読み取った後の手修正が必須)として利用できる程度のレベルです(本文で例に挙げた2つのWebサービスも同程度という感じがしました)。これはおそらくですが、これまでは利用者が少なくて、ということは苦言を呈する顧客はもっと少なくて、あまり熱心には改良されてこなかったのじゃないかと想像したくなります。Computer Vision APIや本稿のOCRエンジンの利用が増え、それに伴うフィードバックも多くなれば、改良も加速されていくと思います。
対象読者
- .NET FrameworkでWindows用のアプリを作っている開発者
- UWPアプリの開発者
必要な環境
サンプルコード(GitHub)を試してみるには以下の環境が必要です。
- Windows 10
- Visual Studio 2017(無償のCommunity Editionで可)
- UWP用Windows 10 SDK:C#/VB用のもの
どんな機能なのか?
サンプルコード中のWPFアプリを実行している画面を次に示します。
取り込んだ画像の中の文字を読み取って右下のテキストボックスに表示しています。日本語の文字をそこそこの精度で読み取りできています。なお、画像の取り込みは、Windows 10標準のMediaCapture APIを使ってWebカメラから、あるいは、画像ファイルやクリップボードに入れた画像データからできるようにしてあります。
日本語以外の言語も、Windows 10にその言語のランゲージパックをインストールしておけば、読み取れます(英語は既定で利用できます)。例えば、日本語を指定したまま英語の文章を読み取らせると、次の画像のようにちょっと芳しくありませんが……、
英語を指定して読み込ませれば、次の画像のように格段に精度が上がります。
読み取り結果には、文字として認識した領域の情報も入っています。サンプルコード中のUWPアプリの方には、その実装も入れてあります(次の画像)。
WPFからOCRエンジンを使うには、画像データのフォーマットを変換する必要があってちょっと面倒です。UWPアプリでは、そんな必要もなく、簡単に使えます。また、Windows 10の最初からあるAPIなので、Windows 10 Mobile(スマートフォン)でも動作します(次の画像)。
.NET FramworkアプリからWebカメラを利用する
今回のWPFのサンプルコードではWindows 10標準のMediaCapture APIを使いましたが、Windows 7などでは使えません。Windows 10以前のWindowsでもWebカメラを利用するには、オープンソースのWPF: Webcam ControlやOpenCV+OpenCvSharpなどを使うと良いでしょう。