VisionAPIとTesseractでナンバープレート認識
VisionAPIとTesseractを使用して同じ画像でナンバープレート認識した結果を比較してみます。
Table of contents
author: Mami
はじめに
GIクラウドのMamiです。
主にOpenCVを使って画像認識を勉強していたのですが、GoogleCloudのVisionAPIは使ったことがなかったので、今回検証してみます。せっかくなので、VisionAPIとTesseractというメジャーなOCRエンジンで、ナンバープレート認識がどこまで出来るかを見ていきます。今回はGoogleColab(Python)を使って検証したので、環境構築などの手間がなく比較的簡単に確認できるようにしました。
VisionAPIとTesseract
VisionAPIとTesseractについて違いを簡潔に表にまとめました。
Google Cloud VisionAPI | Tesseract | |
---|---|---|
概要 | Google Cloudが提供する独自のOCR技術 | Googleによって開発および保守されているオープンソース OCRエンジン |
特徴 | 複数言語のテキスト検出、手書き認識、自動ドキュメント レイアウト分析など、多数の高度な機能を提供する。 | 基本的なOCRに重点を置いており、高度な機能はない。 |
ソフトウェア | プロプライエタリ | オープンソース |
価格 | 従量課金(最初の〜1,000 ユニット/月まで無料でそれ以降は1,000ユニットごとに$1.5) 料金表 | 無料 |
サポートOS | ブラウザのみ | Linux、Windows、Mac OS X |
OCRサポート言語 | 日本語を含む60以上の言語 | 日本語を含む110以上の言語 |
文字検出(読み取りたい項目の場所や範囲を特定する)においては、VisionAPIよりTesseractが優れていると言われており、逆に文字認識(文字の判別をする)は、TesseractはVisionAPIと比較すると複雑な文字の認識が弱いと言われています。また認識速度においては、ローカルマシン上に実行する場合はTesseractの方が高速ですが、リモートアクセスの場合はGoogleVisionAPIの方がクラウドベースのインフラストラクチャのため、高速です。
ナンバープレート認識について
ナンバープレートは国によって形状やサイズが異なり、ナンバープレートを認識するには天気や照明にも影響されます。通過する自動車とナンバープレートを検出し、OCRにてナンバープレートを読み取る必要があるため高度な技術が必要です。また国によって異なるナンバープレートのデータセットを用意するのも大変です。しかし、ナンバープレート認識は道路や駐車場に非常に多く使われています。例えば、駐車場でよくもらう駐車券カードは1枚10円ほどするので、ナンバープレート認識を使って駐車券の代わりに出来れば、運用コストを大きく減らせる可能性があります。
VisionAPIとTesseractのナンバープレート認識方法
VisionAPIとTesseractそれぞれでどのようにナンバープレート認識をすれば良いでしょうか。ナンバープレート認識をするには大きく2つの段階を経る必要があります。
- 物体検出(ナンバープレートを検出)
- ナンバープレートのOCR
VisionAPIは上記2つの機能を持っているので、VisionAPIだけでナンバープレート認識が出来そうです。ただしVisionAPIは無料枠があるとはいえ有料ですので、APIキーを発行する必要があります。Tesseractは、OCRに特化しておりナンバープレートを検出することは出来ません。そのため、OpenCVを使ってナンバープレートを検出します。もしデータセットがあればYOLOを使うと精度の高いナンバープレート検出が出来るでしょう。(今回はYOLOは使用しません)
ナンバープレート検出&OCR検出結果
上記方法で、VisionAPIとTesseractそれぞれで同じ画像でナンバープレート認識した結果は以下です。
オリジナル画像
VisionAPIのナンバープレート検出&OCR検出結果
※認識結果は画像の一番下に表示しています。
平仮名部分は読み取ってくれませんでしたが、大体読み取れてます。またナンバープレートの下にある小さい文字も(少し間違っているものの)読み取ってくれています。
Tesseractのナンバープレート検出&OCR検出結果
※認識結果は画像の一番下に表示しています。
VisionAPI同様、平仮名部分は読み取ってくれませんでした。地域名も怪しいのと、ナンバープレートの枠を文字として認識してしまっています。(ただし、そこは認識範囲に枠を除外すれば調整できそうです。)また、Tesseractはホワイトリストやブラックリストを設定できるので、例えばホワイトリストを数字だけに限定するなどして読み取り精度をあげることが出来ます。
VisionAPIのナンバープレート認識方法
手順としては以下の通りです。
- VisionAPIキーの取得
- VisionAPIでナンバープレート検出&認識
まずは以下手順に沿って、VisioAPIキー(JSONファイル)を取得してください。
VisionAPIキーの取得
1.GoogleCloudコンソールより、該当プロジェクトを作成or選択し、VisionAPIを有効化します。
2.認証情報より「+認証情報を作成」を選択します。
3.「サービスアカウント」を選択します。
4.サービスアカウント名、ID、説明を入力します。
5.ロールはオーナー(もしくは編集者)にします。
6.以下は入力せず「完了」します。
7.サービスアカウントができましたので、選択します。
8.キータブより、「新しい鍵を作成」します。
9.キータイプはJSONで秘密鍵を作成します。
VisionAPIキーの作成はこれで完了です。次の章で使用します。
VisionAPIでナンバープレート検出&認識
GoogleColab等を使用して以下を実行します。
Tesseractのナンバープレート認識
TesseractはAPIキーなど不要ですので、GoogleColab等を使用して以下を実行します。
終わりに
今回、VisionAPIとTesseractの両方で試してみましたが、VisionAPIの手軽さはさすがと思いました。特にナンバープレート検出(物体検出)は見事でした。Tesseractの方は、OCRよりもその前段階のナンバープレート検出の調整に時間がかかりました。そのため、今回検証に使った画像のように、正面からはっきりとわかるような画像を用意しないと難しいです。ただし、Tesseractは色々調整したり、日本語を学習させたりできるので、細かく調整が必要な場合に使用してみると良いでしょう。最後までお読みいただきありがとうございました。
※本記事は、ジーアイクラウド株式会社の見解を述べたものであり、必要な調査・検討は行っているものの必ずしもその正確性や真実性を保証するものではありません。
※リンクを利用する際には、必ず出典がGIC dryaki-blogであることを明記してください。
リンクの利用によりトラブルが発生した場合、リンクを設置した方ご自身の責任で対応してください。
ジーアイクラウド株式会社はユーザーによるリンクの利用につき、如何なる責任を負うものではありません。