こんにちは。
最近全然Rubyのコードを書いてないので意地でもRuby使ってやる!
そこそこ訓練されているRubyistの吉岡です。
さて、今回はGoogle CloudのCloud Vision APIというサービスを利用して光学式文字認識(OCR)を試してみたのでご紹介します。 (クライアントはもちろんRubyです!)
ローカルにある画像をRubyとVision API(GCP)を使ってテキスト情報を取得する。
以下のドキュメントを参考に、テスト用のプロジェクトの作成、Vision APIの有効化、認証設定を行い、最後にRubyでGCPのAPIにアクセスするためのクライアントライブラリー(gem)をインストールします。
クイックスタート: クライアント ライブラリの使用
gem install google-cloud-vision
以下、ページを参考にして、画像とサンプルコードを準備し、実行します。
画像内のテキストを検出する
sample.png
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 テスト項目2 テスト2 テスト2 テスト2 テスト2 テスト3 テスト3 テスト3 テスト3 テスト4 テスト4 テスト4 テスト4 テスト項目3 テスト項目4
とりあえず、簡単に文字が取得できることが確認できます。
もう少し詳しい情報を取得するためにコードを少し変更してみます。
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
テスト項目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
![]() |
Rubyで動くCMS「RefineryCMS」を使ってサイトを作成し、Herokuに公開。 |
![]() |
AWSクラウドプラクティショナー試験向けの学習に使った教材などを紹介。 |
![]() |
多くの人が試行錯誤して創り出したコードを参考にすることで機能を知ることができます。 |
![]() |
「Adobe Premiere Rush」は初心者にはおすすめの画編集ソフト。 |
![]() |
2020年中にファーエンドテクノロジーのサービス「My Redmine」で行われた改善をいくつかピックアップして紹介します。 |
![]() |
社員研修に伴うサポート体制変更・休業のお知らせ(5/20〜23) 社員研修に伴い、5月20日〜23日はサポート体制の変更および休業とさせていただきます。 |
![]() |
オープンソースカンファレンス2025 Nagoyaに弊社代表の前田が登壇(ブース出展あり) オープンソースカンファレンス(OSC)2025 Nagoyaに弊社代表の前田が登壇。『Redmineの意外と知らない便利な機能(Redmine 6.0 対応版)』をテーマに発表します。 |
![]() |
エンタープライズプラン向け「優先サポート」を開始 My Redmineでは、エンタープライズプランをご契約のお客様向けにサポート対応を優先的に行う「優先サポート(プライオリティサポート)」を開始いたしました。 |
![]() |
プロジェクト管理ツール「RedMica」バージョン 3.1.0をリリース Redmine互換のオープンソースソフトウェア ファーエンドテクノロジー株式会社は、2024年11月19日(日本時間)、Redmine互換のプロジェクト管理ソフトウェア「RedMica 3.1.0」をリリースしました。 |
![]() |
Redmineの最新情報をメールでお知らせする「Redmine News」配信中 新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け |