AI(機械学習)を利用したOCRの認識精度 (2020/07/15 New)
概要
このTipsでは、昨今主流となっている機械学習を利用したOCRの認識精度について紹介します。
クラウドサービスとAIの利用で、どこまで認識できるか興味がある方は参考にして下さい。
検証には、OCR de PawSのOCR機能を利用しています。
OCR機能として、現バージョンでは次の3種類のOCRサービスが利用できます。
- Microsoft Azure
- Google Cloud Platform (GCP)
- Windows10標準のOCR(AIやクラウドを利用しない従来のOCR)
それぞれの特徴の違いなどを知ることができます。
なお、検証パターンは、2回の記事に分けて紹介する予定です。
AzureのOCRサービス
AzureのOCRサービスでは、次の2種類が使用できます。
- Read APIを使用したOCR
- OCR APIを利用したOCR
1.Read APIを使用したOCR
AIを利用したOCRサービスです。手書き文字の認識にも対応しています。ただし、現在サポートされている言語は欧米系のみです。
2.OCR APIを使用したOCR従来のアルゴリズム(AI未使用)を使用したOCRサービスです。27言語に対応しており言語の自動検出も可能です。 日本語のOCRを使用したい場合は、こちらを指定する必要があります。
認識精度は、機械学習を利用したRead APIのほうが圧倒的に高精度です。
サポート言語に関しては、Azureの制限事項を参照して下さい。
GCPのOCRサービス
GCPのOCRサービスでは、次の2種類のモードが使用できます。どちらもAIが使用されています。
- 一般的な画像に適したOCR
- 文書に適したOCR
1.画像に適したOCR
一般的な画像からテキストを検出する場合に適しています。
2.文書に適したOCR高密度のテキスト画像やドキュメントなどに最適化されます。
検出する言語や、画像内のテキスト位置によっては、精度に大きな違いが発生する場合があります。
Windows 10標準のOCRサービス
Windows 10のSDKを使用したOCRサービスです。AIを使用しない従来からのアルゴリズムで実装されています。
しかし、オフラインで動作するため高速で処理され、クラウド側にデータを渡す必要がないのでプライバシーを保護できます。
日本語の縦書き検証
最初の検証は、日本語の縦書きです。縦書きの精度を検証すれば横書きの精度に関しては推測できると思うので、ここではあえて縦書きのみ行います。
1.ルビを含まない文章
最初は、ルビを含まない次の画像からテキストを検出します。(電子書籍から切り取った画像)
GCP
ほぼ完璧に検出できました。
Azure (OCR API)
文字としては検出できているのですが、各文章の順番がバラバラで縦書きは苦手なようです。
Windows 10標準
一部文章の順番がおかしくなっている箇所は有りますが、縦書きでも予想以上の健闘をしました。
次は、ルビを含む画像からテキストを検出します。(電子書籍から切り取った画像)
GCP
ルビも取得していますが、ほぼ完璧に検出できました。
Azure (OCR API)
文字としては検出できていますが、やはり各文章の順番がバラバラで縦書きは苦手なようです。
Windows 10標準
一部の文字検出に誤りが有りますが、ほぼGCPと同等の結果で予想以上の健闘をしました。
AIを利用したGCPが優秀であることは当然として、Widows 10標準のOCRが大健闘しました。 同じMicrosoft製品なのですが、AzureのOCR APIはアルゴリズムが異なっているのでしょうか・・・。
マンガの吹き出し検証
ここでは、マンガの吹き出しの検証を行います。日本語と英語の吹き出しで検証しています。
複数の吹き出しを使用した、少し意地悪な検証です。
1.縦書き日本語と複数の吹き出し
最初は、縦書きの日本語と2つの吹き出しを含む次の画像からテキストを検出します。(電子書籍から切り取った画像)
GCP(一般的な画像モード)
うまく検出できないようです。AI搭載のGoogleでも無理なのか・・・・?
GCP(文書モード)
モードを変更すると、今度はほぼ完璧に検出できました。
Azure (OCR API)
右側の吹き出しが全く検出できなく、しかも文章の順番がバラバラでやはり縦書きは苦手なようです。
Windows 10標準
健闘したのですが、右側の吹き出しが全く検出出来ませんでした。
次は、英語で2つの吹き出しを含む次の画像からテキストを検出します。(電子書籍から切り取った画像)
GCP(一般的な画像モード)
画像内の絵を間違って文字として検出している箇所も有りますが、ほぼ完璧に検出できました。
GCP(文書モード)
一般的な画像モードとほぼ同様です。しかしこのモードでは、「DON'T TV」等の記号が上手く検出できていません。
Azure (Read API)
GCPと同様に文字としてはほぼ完璧に検出できています。ただし、単純に水平方向で検出した順番で出力しているため吹き出し毎のテキストが分離されていません。
Windows 10標準
AIを利用したGCP及びAzureとも、文字の検出精度は非常に優秀であることがわかるのではないでしょうか。 Azureの場合は、検出後の順番などはプログラマー任せという仕様でしょうか・・・。
動画フレームの検証
ここでは、動画再生中にフレーム内の一部を切り出した検証を行います。
ピンぼけしている映像を使用した、少し意地悪な検証です。
1.ピンぼけした文字(日本語)
最初は、日本映画の背景で映像として流れていた、少し文字フォーカスがあいまいな画像からテキストを検出します。(動画フレームから切り取った画像)
GCP(一般的な画像モード)
誤検出も有りますが、大健闘しています。
GCP(文書モード)
このモードの方が、誤検出は少ない結果になりました。大健闘です。
Azure (OCR API)
やはり厳しい結果になりましたが、横書きではWindows 10標準OCRより検出できた文字数が多くなっています。
Windows 10標準
最も検出できた文字数が少ない結果となりました。
次は、海外ドラマの背景でニュース映像として流れていた、少し文字のフォーカスがあいまいな画像からテキストを検出します。(動画フレームから切り取った画像)
GCP(文書モード)
AeonがAconやAeonと混在していたり、記号と文字以外の誤検出は有りますが精度はかなり高いです。
モードを変更しても結果は同じでした。
Azure (Read API)
AeonをAconと検出していますが、その他は記号を含めてほぼ完璧です。
Windows 10標準
・・・。
AIを利用したGCP及びAzureとも、文字の検出精度は非常に優秀であることがわかります。 Azureの場合、英語の検出精度ではGoogleに勝るケースもみられます。
デジカメ画像の検証
ここでは、デジカメで撮影した画像の一部を切り取った検証を行います。
少し斜めになっている、意地悪な検証です。
1.縦書きの看板(日本語)
最初は、観光地でよく見かける観光名所の説明を表示した看板からテキストを検出します。(デジカメ画像から切り取った画像)
GCP(文書モード)
ルビの検出が変ですが、ほぼ完璧に検出出来ました。
なお、モードを変更してもルビの検出は同様でした。
Azure (OCR API)
文字の検出自体は良いのですが、やはり縦書きの場合、順番がおかしくなります。
Windows 10標準
GCPで検出できなかった記号やルビも検出しています。予想外の大健闘です。
濁点のあるひらがなが上手く検出できていない以外は、GCP以上の検出結果です。
次は、縦書きと横書き、さらに日本語と英語が混在している看板からテキストを検出します。(デジカメ画像から切り取った画像)
GCP(一般的な画像モード)
文書モードより誤検出が多いようですが、大健闘しました。
GCP(文書モード)
ほぼ完璧に検出していますが、文字以外の誤検出と一般的な画像モードで検出できた茅野市が検出できていません。
Azure (OCR API)
予想通りですが、残念な結果になりました。
Windows 10標準
Azureとほぼ同じ結果になりました。
AIを利用したGCPでは、縦書きと横書き、日本語と英語が混在する画像でも文字の検出精度は非常に優秀であることがわかります。 また、背景が無地で高解像度画像の場合、非AIのOCRでもかなり良い検出結果になることも分かりました。
まとめ
背景が無地でない場合やレイアウトが複雑になるほど、従来のOCRアルゴリズムでは検出が困難になります。
技術の変化を改めて実感された方も少なくないと思いますが、AIに置き換わっていく時代が着々と進行しているということになります。
Googleドライブを利用すると、少し手間と時間がかかりますが無料で機械学習を使用したOCRを試してみる事が可能です。
なお、モードの変更などができないため、画像によっては誤検出するケースも多いです。
やり方は、切り取った画像をファイルにしアップロードを行った後に、Googleドキュメントで開くという手順になります。
クラウドの基本的な知識が有る方は、OCR de PawSを試してみて下さい。切り取った画像を貼り付けるだけで、モードの違いなども試すことができるようになります。
次回は、もう少し複雑なパターンと翻訳の検証を行った結果を紹介する予定です。