Loading

会社のロゴをCloud Vision API を使ってテキストに変換してみた

こんにちは。開発部CTOの三上です。
最近は、機械学習の最新情報をウォッチするのが趣味になってます。

巷では、DeepLearningで画像認識の精度が格段に上がったということで、いろんな画像認識タスクをやってみた系の記事が多いですね。そこで、自分でも会社のロゴやバナー画像をテキストに変換できるか試してみました。

利用したAPIは、Googleから提供されているGoogle Cloud PlatformのCloud Vision APIです。

今回は、3つの画像について調査しました。

1. 弊社入り口にあるメッセージ

innova_wall_test1.jpg
2. Cloud CMOバナー

ad_cmo.jpg
3. 会社ロゴ

innova_logo.png

試したライブラリ


公式では、4つの言語(Go, Java, Node.js, Python)のライブラリが用意されています。
https://cloud.google.com/vision/reference/rest/

わたしは普段Rubyを使っており非公式ですが、Githubで公開されている「google-cloud-vision」ライブラリを利用して試しました。

Feature Type(detection)について


Cloud Visonでは、Feature Typeは、7種類です。

  • LABEL_DETECTION
  • TEXT_DETECTION
  • FACE_DETECTION
  • LANDMARK_DETECTION
  • LOGO_DETECTION
  • SAFE_SEARCH_DETECTION
  • IMAGE_PROPERTIES

今回は、TEXT_DETECTION と LOGO_DETECTION のFeatureTypeを利用しました。

画像のサイズについて


「弊社入り口にあるメッセージ」は、iPhoneで撮影したものをリサイズしています。4MB以下までしか対応していないので、サイズを減らす必要があります。

こちらの記事に、画像についてのベストプラクティスが掲載されていますので、image-best-practicesの一読をオススメします。

利用方法の流れ

Set up your project」を読み、APIキーを作成します。

  1. プロジェクトを作成
  2. BILLINGを有効にする
  3. Cloud Vison APIを有効にする

「Create a Cloud Storage bucket」は、作成しなくても大丈夫です。
今回は、ローカルにある画像ファイルを利用します。

プログラムを書かずに試す場合は、
「Create a Cloud Storage bucket」と「Make a request to the Cloud Vision API service」を手順に従うことで、このページで画像を解析した結果をJSON形式で見ることができます。

以下は、サンプルコードです。

ライブラリをインストールする

$ gem install google_cloud_vision

ライブラリを読み込む

require 'google_cloud_vision'

Googleの管理画面から取得したAPI_KEYを指定します。

api_key = [API_KEY]

【ロゴっぽい画像の場合】

detection = 'LOGO_DETECTION'
res =  GoogleCloudVision::Classifier.new(api_key,
  [
    { image: image_file_path, detection: detection, max_results: 10 },
  ]
)
puts res.response['responses'].first['logoAnnotations'].first['description']

【テキストっぽい画像の場合】

detection = 'TEXT_DETECTION'
res =  GoogleCloudVision::Classifier.new(api_key,
  [
    { image: image_file_path, detection: detection, max_results: 10 },
  ]
)
puts res.response['responses'].first['textAnnotations'].first['description']

実行結果

まずは、失敗事例から

「弊社入り口にあるメッセージ」を「TEXT_DETECTION」で、リクエストしてみました。

a;
ure.
a;
ure.

謎な文字列が返却されました。
やはり、照明の加減によって文字だと認識できなかったのでしょう。

はっきりと文字列がわかるように、少しフィルターを適応して試した結果はこちらです。

innova_wall_test2.jpg

GIVE
V TE
WORLD
GIVE
V TE
WORLD

少し、ましになりました。白黒にすれば70%くらい読めているようです。
やはり、文字の間隔が狭いのか読み取りにくいようです。この辺りは、image-best-practicesを読むともっと改善できそうです。

次は、成功事例です。

「Cloud CMOバナー」を「TEXT_DETECTION」でリクエストしました。

Cloud CMO
marketing on demand
すべてをシンプルにする
マーケティングオートメーションツール

しっかりと、全ての文字を認識していますし、改行されて返却されました。
期待どおりの結果に満足です。

では、次に「会社ロゴ」を、「LOGO_DETECTION」でリクエストしました。

イノーバ

こちらも、期待どおりにテキストを抜き出せました。

まとめ

照明などのノイズが多いテキスト画像だと認識が難しいが、少ない色数であれば、高精度でテキストに変換できることがわかりました。日本語にもしっかり対応しており、さすがGoogleといったところです。

FeatureTypeを、TEXT_DETECTION、LOGO_DETECTIONにするかで、結果が変わってしまうため、機械学習でロゴっぽい画像かテキストっぽい画像をあらかじめ分類する必要があることもわかりました。

一度、画像からテキストに変換できると、今度は自然言語処理を使って、画像を分類できるようになり、さらに発展した使い方が面白そうです。

ぜひ、皆様も試してみましょう!

著者アイコン

著者三上 悟

CTO at Innova, Inc/ WebEngineer / よろず相談屋

関連記事