C#でOCR(文字認識)アプリを作るには?

公開日時:   更新日時:
C#でOCR(文字認識)アプリを作るには?
基本情報技術者試験の試験対策はこちら>>

SE
C#でOCRアプリは作れますか?

PM
はい、作れます。開発方法を紹介しますね。

C#でOCR(文字認識)アプリを作るには?


今回は、C#でOCRアプリ開発をする際の記事を書いていきます。OCRアプリ開発をするときに迷うのが、いくつもあるOCRエンジンの中からどれを選ぶかです。そこで、まずはどのようなOCRエンジン(機能)があるのかを調べてみました。

C#で開発できるOCR機能を調べてみたところ、次のようなOCRが使えることがわかりました。
・Windows 10標準「OCRエンジン」
・Tesseract
・クラウドサービス系
「Google Cloud Vision API」、「Microsoft Azure Computer Vision API」

Windows10標準「OCRエンジン」について

Windows.Media.Ocr名前空間にWindowsランタイムAPIとしてOcrの機能が提供されています。このWindows10標準のOCRはUWPアプリで使用できます。

UWPでの開発以外(WPFやFormsなど)の場合は、NuGetでMicrosoft.Windows.SDK.Contractsプラグインを導入する必要があります。

Tesseractについて

Apache Licenseのフリーのソフトウェアで、さまざまなオペレーティングシステム上で動作する光学式文字認識エンジンです。

Tesseractで対応できる言語数は100を超えています。認識する画像のテキストのx-heightが20ピクセル以上になっていないとテキストの認識精度が低くなるとのことで、認識させたい画像の文字が小さい場合は拡大させる必要があります。

対応している開発言語は、Python/Java/C#/JavaScriptなどで様々なプログラミング言語で開発が可能です。Pythonでの開発が人気らしく、「Tesseract」のキーワードで調べるとPythonでの開発事例が多く出てきます。

人気の理由の一つに、上で述べた認識精度向上のために画像を拡大しなければいけないなど、画像前処理に優れている開発言語だからです。

クラウドサービス系のOCRについて

クラウドサービスとして提供されているOCRはいくつもあります。様々な企業がクラウドサービスとしてOCRの機能を提供していますが、ここではGoogleとMicroSoftが提供しているサービスをピックアップしたいと思います。

Google Cloud Vision API

Googleのクラウドサービス「Google Cloud」のCloud Vision APIでOCR機能が提供されています。Vision APIは画像からテキストを検出、抽出しJSON形式でレスポンスを返します。非同期通信です。

GoogleのOCR機能の利用は、Google CloudのVision APIというサービスなので利用料がかかります。Vision APIの利用料の料金形態は、各機能のユニットごとに対して請求が発生するようになっています。

ユニットとは、画像ファイルやPDFファイルなど画像認識を行う対象のファイルのことです。料金表は以下のようになっています。

機能 1,000 ユニットあたりの料金
最初の 1,000 ユニット/月 1,001~5,000,000 ユニット/月 5,000,001 以上のユニット/月
ラベル検出 無料 $1.50 $1.00
テキスト検出 無料 $1.50 $0.60
ドキュメント テキスト検出 無料 $1.50 $0.60
セーフサーチ(不適切なコンテンツ)検出 無料 $1.50(ラベル検出を利用している場合は無料) $0.60(ラベル検出を利用している場合は無料)
顔検出 無料 $1.50 $0.60
顔検出 – Celebrity Recognition 無料 $1.50 $0.60
ランドマーク検出 無料 $1.50 $0.60
ロゴ検出 無料 $1.50 $0.60
画像プロパティ検出 無料 $1.50 $0.60
クロップヒント検出 無料 $1.50(画像プロパティ検出を利用している場合は無料) $0.60(画像プロパティ検出を利用している場合は無料)
ウェブ検出 無料 $3.50 Google にお問い合わせください
オブジェクトのローカライズ 無料 $2.25 $1.50

Vision APIではいくつかの機能が提供されていますが、文字認識に使えるものは次の二つです。REST APIで利用できるため、対応している開発言語も数多くあります。もちろんC#での開発も可能です。

・DOCUMENT_TEXT_DETECTION

PDFファイルなど、テキストが密集している画像や手書き文字を含む画像のOCR(文字認
識)に適しています。

・TEXT_DETECTION

画像内のテキストに対してOCR(文字認識)を行います。

Microsoft Azure Computer Vision API

マイクロソフトのクラウドサービス「Computer Vision」で「テキスト抽出 (OCR)」という機能名でOCR機能が提供されています。「テキスト抽出(OCR)」では、画像・ドキュメント(PDFファイル)からテキストを抽出し、言語・書き方(手書きや印刷されたテキスト)が混在していても認識することができます。

「Computer Vision」では、OCR機能のほかにも、以下の機能が提供されています。
・画像解釈
・空間分析
・柔軟性の高いデプロイ

「Computer Vision」もGoogleのVision API同様、利用には値段がかかります。「Computer Vision」では、1秒当たりのトランザクション数で料金が決まります。料金表(一部)は以下のようになっています。

インスタンス 1 秒あたりのトランザクション数 (TPS)** 機能 料金
無料 – Web/コンテナー 20/分
S1 – Web/コンテナー 10 TPS タグ
Face
GetThumbnail

画像の種類
GetAreaOfInterest
0 – 1,000,000 トランザクション —
¥112/1,000 トランザクション
1,000,000 – 10,000,000 トランザクション —
¥72.80/1,000 トランザクション
10,000,000 – 100,000,000 トランザクション —
¥67.20/1,000 トランザクション
100,000,000 トランザクション以上 —
¥44.800/1,000 トランザクション

Microsoft「Computer Vision」の文字認識機能を使用した開発に対応している言語は、C#/Python/Java/JavaScriptなどがあります。機能の使用には、Azureのアカウントの作成、サブスクリプション契約をする必要があります。これは、どの言語で開発するにも必要な手順です。

Windows10標準OCRアプリの開発

C#でOCRアプリを開発するのに一番手っ取り早い方法は、Windows10に標準で入っているOCRを使った開発です。C#でのOCRアプリ開発ではUWPアプリとそれ以外のWindowsForm、WPFなどの開発で違いがあります。後者はそこまで手間でもないですがプラグインの導入が必要となります。UWPアプリではC#のプロジェクトを作成すればそのまま開発することができます。

UWPアプリの開発はVisualStudioを使用します。VisualStudioで「空のアプリ(ユニバーサル Windows)」のC#テンプレートを指定してプロジェクトを作成することで開発ができます。

本題のC#で文字認識を実装する方法ですが、Windows.Media.Ocrを使って以下のようなコードで実装が可能です。画像データはSoftwareBitmapにしてから渡す必要があります。

SE
C#でOCRアプリの開発方法がわかりました。

PM
C#の理解を深めて、実際にアプリを開発してみましょう。

C#でOCRアプリを開発してみよう!

Windowsの標準OCRを使用した開発は素早くできますが、GoogleなどのクラウドサービスのOCRよりは精度が劣ります。

まずは無料で開発でき利用できるWindows標準OCRやTesseractなどで試しに開発をして、本格的なサービスやツールなどを開発する場合に、クラウドサービスのOCRを使うのが良いでしょう。


FEnetへの登録は左下のチャットが便利です 経験者優遇! 最短10秒!

.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags