RubyとGoogle Cloud Vision APIで光学式文字認識(OCR)を試してみました


こんにちは。
最近全然Rubyのコードを書いてないので意地でもRuby使ってやる!
そこそこ訓練されているRubyistの吉岡です。

さて、今回はGoogle CloudのCloud Vision APIというサービスを利用して光学式文字認識(OCR)を試してみたのでご紹介します。 (クライアントはもちろんRubyです!)

やりたいこと

ローカルにある画像をRubyとVision API(GCP)を使ってテキスト情報を取得する。

準備

  1. Rubyの実行環境(この記事は2.7で実行しています。)
  2. GCPのアカウント
  3. Cloud Vision APIとクライアントの設定

以下のドキュメントを参考に、テスト用のプロジェクトの作成、Vision APIの有効化、認証設定を行い、最後にRubyでGCPのAPIにアクセスするためのクライアントライブラリー(gem)をインストールします。
クイックスタート: クライアント ライブラリの使用

gem install google-cloud-vision

実行方法

以下、ページを参考にして、画像とサンプルコードを準備し、実行します。
画像内のテキストを検出する

サンプル画像

sample.png

サンプルコード1

sample.rb

require "google/cloud/vision" 

image_path = 'sample.png'

image_annotator = Google::Cloud::Vision.image_annotator

response = image_annotator.text_detection(
  image:       image_path,
  max_results: 1 # optional, defaults to 10
)

response.responses.each do |res|
  res.text_annotations.each do |text|
    puts text.description
  end
end

構成

├── xxxxxx-xxxxxxxxxx.json # 認証用のサービスアカウントキー
├── sample.png
└── sample.rb

実行

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/xxxxxxxx-xxxxxxxx.json" 
ruby sample.rb

出力結果1

テスト項目1
テスト1
テスト1 テスト1
テスト1
テスト項目2
テスト2 テスト2 テスト2 テスト2
テスト3 テスト3 テスト3 テスト3
テスト4 テスト4 テスト4 テスト4
テスト項目3
テスト項目4

サンプル画像

とりあえず、簡単に文字が取得できることが確認できます。

もう少し詳しい情報を取得するためにコードを少し変更してみます。

サンプルコード2

require "google/cloud/vision" 
require "pry" 

image_path = 'sample.png'

image_annotator = Google::Cloud::Vision.image_annotator

response = image_annotator.text_detection(
  image:       image_path,
  max_results: 1 # optional, defaults to 10
)

response.responses.each do |res|
  res.text_annotations.each do |text|
    puts text.description
    text.bounding_poly.vertices.each do | vertex |
      puts "  x: #{vertex.x}, y: #{vertex.y}" 
    end
  end
end

以下の三行を追加した形になります。
先ほどのサンプルコード1は、text.descriptionで文字情報のみの取得でした。今度は文字情報と一緒に、単語の位置情報も取得できるように修正しました。(便利ですねー)

text.bounding_poly.vertices.each do | vertex |
  puts "  x: #{vertex.x}, y: #{vertex.y}" 
end

出力結果2

テスト項目1
テスト1
テスト1 テスト1
テスト1
テスト項目2
テスト2 テスト2 テスト2 テスト2
テスト3 テスト3 テスト3 テスト3
テスト4 テスト4 テスト4 テスト4
テスト項目3
テスト項目4
  x: 8, y: 12
  x: 437, y: 12
  x: 437, y: 113
  x: 8, y: 113
テスト
  x: 10, y: 12
  x: 55, y: 12
  x: 55, y: 30
  x: 10, y: 30
項目
  x: 57, y: 12
  x: 86, y: 12
  x: 86, y: 30
  x: 57, y: 30
1
  x: 90, y: 15
  x: 94, y: 15
  x: 94, y: 26
  x: 90, y: 26

・・・

テスト
  x: 10, y: 68
  x: 56, y: 69
  x: 56, y: 86
  x: 10, y: 85
項目
  x: 58, y: 69
  x: 89, y: 69
  x: 89, y: 86
  x: 58, y: 86
3
  x: 89, y: 71
  x: 97, y: 71
  x: 97, y: 83
  x: 89, y: 83
テスト
  x: 8, y: 95
  x: 54, y: 95
  x: 54, y: 113
  x: 8, y: 113
項目
  x: 56, y: 95
  x: 88, y: 95
  x: 88, y: 113
  x: 56, y: 113
4
  x: 88, y: 98
  x: 97, y: 98
  x: 97, y: 109
  x: 88, y: 109

期待通り、それぞれの単語の位置情報(座標情報)の取得もできました。
この情報を利用すれば、その文字が画像のどの部分か、印をつけて表示することもできますので、期待通り読み込みができているかチェックも楽にできそうです。

まとめ

久しぶりにGoogle Cloudを使ってみましたが、以前よりもドキュメントが整理されていて、使いやすくなった印象です。
(本当はAWSのAmazon Amazon Textract を使いたかったけど、日本語対応してなかったので、GoogleのVision APIを使ったのは内緒です)

今回は使用しませんでしたが、画像を解析した際にランドマークを元に位置情報を取得(locations)したり、表示されている画像と文字が説明として正しいか(score)なども取得できるようです。色々と使い道が広がりそうです。
今後も機会を作って積極的に触りたい気持ちになりました。

詳細は以下のドキュメントを確認してみてください。
https://www.rubydoc.info/gems/google-cloud-vision/0.24.0/Google/Cloud/Vision/V1


My Redmine

こちらの記事もオススメです!
Rubyで動くCMS、「RefineryCMS」を動かしてみた話
Rubyで動くCMS「RefineryCMS」を使ってサイトを作成し、Herokuに公開。
非エンジニアがAWSクラウドプラクティショナーの試験を受けてみた
AWSクラウドプラクティショナー試験向けの学習に使った教材などを紹介。
Redmine改善活動では、実装済のコードを読んで学べることもあります
多くの人が試行錯誤して創り出したコードを参考にすることで機能を知ることができます。
学ばず使えるAdobe Premiere Rushはみんなにやさしい
「Adobe Premiere Rush」は初心者にはおすすめの画編集ソフト。
クラウドサービス「My Redmine」 2020年の改善まとめ
2020年中にファーエンドテクノロジーのサービス「My Redmine」で行われた改善をいくつかピックアップして紹介します。
ファーエンドテクノロジーからのお知らせ(2021/03/03更新)
プロジェクト管理ツール Redmine互換のオープンソースソフトウェア「RedMica」のすべての管理機能のリファレンスを掲載した『RedMica ユーザーズガイド』を公開しました。
Redmineのクラウドサービス『My Redmine』の提供ソフトウェアをRedMica 1.2にアップデート。二要素認証機能などが追加
『My Redmine』で提供するソフトウェア「RedMica」のバージョンを1.1からを最新バージョンの1.2へアップデートしました。
「FAREND NEWS」2021年第1号 発行
広報紙「FAREND NEWS」2021年第1号を発行しました。弊社サービスの運用・サポートに携わっているスタッフや弊社の取り組みをご紹介します。
オープンソースソフトウェア Redmineで始めるプロジェクト管理(シェルスクリプトマガジン Vol.69 掲載)
誰でも自由に使うことのできるオープンソースのプロジェクト管理ツールRedmineの始め方、使い方をご紹介する記事がシェルスクリプトマガジンに掲載されました。
Redmineの最新情報をメールでお知らせする「Redmine News」配信中
新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け