Google Cloud Vision APIの日本語OCR機能を使ってみる
先日、Azure Computer Vision APIの日本語OCR機能を使ってみるというエントリーを書きました。その末尾にGoogle CloudのVision APIでも日本語OCR機能が使えることを言及しています。私は2年半ほど前に一度その機能を試したことがあるのですが、その頃から機能・精度が進化している可能性もあると思い、Google Cloud Vision APIの日本語OCR機能を改めて試し、Azure Computer Vision APIのエントリーと同じ条件で認識精度測定を実施してみました。
Google Cloud Vision API OCR機能の利用
Google Cloud Vision APIのセットアップ方法は、クイックスタート: Vision API を設定するを参照してください。
プロジェクトが作成され、課金が有効になっていることを確認した後、Vision APIを作成します。ロールが「プロジェクト > オーナー」のサービスアカウントを作成し、そのサービスアカウントのキーファイル(JSON形式)をローカルにダウンロードしておきます。
コードは、@google-cloud/vision
のサンプルコードをベースに作成します。
最初に下記のnpmパッケージをnpm install
します。
$ npm install @google-cloud/vision
続いて、上記で取得したサービスアカウントのキーファイルを環境変数に定義します。ダウンロードしたファイル名、ファイル保存場所によって値は各自カスタマイズしてください。こちらはMacとLinuxでの設定方法ですが、Windowsの場合は上記クイックスタートにコマンド例が掲載されていますので、そちらを参照ください。
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/yourserviceaccountkey.json"
index.js
を作成し、以下のコードを記述しました。detectText
関数を呼び出しする際の引数部分に画像ファイルのURLを記述します。今回はいくつかの画像ファイルで検証しましたが、その度に引数の画像ファイルURLを修正しました。
async function detectText(fileName) {
// [START vision_text_detection]
const vision = require('@google-cloud/vision');
// Creates a client
const client = new vision.ImageAnnotatorClient();
// Performs text detection on the local file
const [result] = await client.textDetection(fileName);
console.log(result.textAnnotations[0].description);
}
detectText('https://sample.com/images/01.jpg');
準備が出来たら、node index.jsでスクリプトを実行します。最初はテストとして、こちらの画像を文字認識させてみます。
$ node index.js
一行目おはようございます
二行目こんにちは
三行目こんばんは
文字認識結果が正しく返ってくることが確認できました。
文字認識テストと文字認識率の測定
前回のエントリーと同様に、オスカー・ワイルド原作、結城浩翻訳の『わがままな大男』の冒頭部分の文章を使い、游ゴシック、メイリオ、MS P明朝、あんずもじ2020の4種類のフォントを使った画像(前回エントリーと全く同じ画像)を使用します。文字認識率も同じ計算式((正答の文字数 - 正答と文字認識結果のレーベンシュタイン距離 ) / 正答の文字数
)で計算しました。
結果は下記表のとおりです。
フォント | 画像 | 文字認識率 |
---|---|---|
游ゴシック | 画像 | 98.9% (378/382) |
メイリオ | 画像 | 99.2% (379/382) |
MS P明朝 | 画像 | 99.2% (379/382) |
あんずもじ2020 | 画像 | 98.6% (377/382) |
どれもわずかに文字認識率が100%に至っていないのは、数字やエクスクラメーションマークについて、原文では全角のところ、文字認識結果では半角で結果が返ってくる箇所が3文字分あるためです。意味的にはどちらでも構わない部分のため、メイリオとMS P明朝の画像については認識率100%と言っても良いかと思います。
游ゴシックの画像では「鳥たちは」の箇所が「鳥島たちは」と余計な一文字が挿入されていました。あんずもじ2020の画像では、「十二本」の箇所の漢数字の「十」が半角記号プラスマーク「+」になっていました。意味としてプラスマークが来る確率は低いと人間であれば判断できると思いますが、確かに文字だけ見て「+」と認識してしまうことは画像ファイルを見る限り理解できます。
以上、Google Cloud Vision APIの日本語OCR機能を使ってみた結果です。
2年半前に私がGoogle Cloud Vision APIの日本語OCR機能を試した際は、特殊なフォントや手書きの日本語文字が含まれる画像の文字認識結果は失敗箇所も多く、使う場合も利用シーンを選ばないといけないかなという印象を受けたのですが、少なくとも今回の手書き風フォントに対する文字認識率はAPIの進化を感じさせてくれるものでした。私も最初に結果を見て驚き、認識させる画像ファイルを間違えたかと思いました。
AIというのは継続的に学習を繰り返すことが重要になります。クラウドのAI APIというのは、クラウドベンダー側で継続的にモデルの更新を繰り返してくれることで、利用者側は常に最新のモデルを活用できるという部分が一つの強みだと思います。今回の検証結果は、その強みの一つである成長力の一端を実際に見せてくれたものだと考えています。
なお、あんずもじ2020は手書き風フォントであり、実際の手書き文字は書き手の癖や、一直線に整列していなかったりなどさらに特性が異なるので、この結果からGoogle Cloud Vision APIが手書き文字にも使えるという評価には直接はつながらないと思います。また、AI APIは各社が継続的に改善を繰り返しているため、一時的な時間断面の比較評価がAI API間の性能の優劣を決定的に決めるものでもないとは思います。
Discussion