C#でOCR(文字認識)アプリを作るには?
- システム
エンジニア - C#でOCRアプリは作れますか?
- プロジェクト
マネージャー - はい、作れます。開発方法を紹介しますね。
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/分 | 5,000 無料トランザクション / 月 選択したリージョンでは該当なし |
|
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にしてから渡す必要があります。
1
2
3
4
5
6
|
public async Task Recognize( SoftwareBitmap bitmap)
{
var ocrEngine = OcrEngine.TryCreateFromUserProfileLanguages();
var ocrResult = await ocrEngine.RecognizeAsync(bitmap);
return ocrResult;
}
|
- システム
エンジニア - C#でOCRアプリの開発方法がわかりました。
- プロジェクト
マネージャー - C#の理解を深めて、実際にアプリを開発してみましょう。
C#でOCRアプリを開発してみよう!
Windowsの標準OCRを使用した開発は素早くできますが、GoogleなどのクラウドサービスのOCRよりは精度が劣ります。
まずは無料で開発でき利用できるWindows標準OCRやTesseractなどで試しに開発をして、本格的なサービスやツールなどを開発する場合に、クラウドサービスのOCRを使うのが良いでしょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
C#新着案件New Job
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)