こんにちは。
最近全然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」を動かしてみた話 Rubyで動くCMS「RefineryCMS」を使ってサイトを作成し、Herokuに公開。 |
|
非エンジニアがAWSクラウドプラクティショナーの試験を受けてみた AWSクラウドプラクティショナー試験向けの学習に使った教材などを紹介。 |
|
Redmine改善活動では、実装済のコードを読んで学べることもあります 多くの人が試行錯誤して創り出したコードを参考にすることで機能を知ることができます。 |
|
学ばず使えるAdobe Premiere Rushはみんなにやさしい 「Adobe Premiere Rush」は初心者にはおすすめの画編集ソフト。 |
|
クラウドサービス「My Redmine」 2020年の改善まとめ 2020年中にファーエンドテクノロジーのサービス「My Redmine」で行われた改善をいくつかピックアップして紹介します。 |
2024年4月14日 オライリー本の全冊公開日のお知らせ(もくもく勉強会も同時開催) ファーエンドテクノロジーが所蔵するオライリー本(全冊)公開日のご案内です。公開日には「もくもく勉強会」も同時開催します。 |
|
My Redmine スタンダードプランおよびAdminサポートデスクプランの料金改定のお知らせ【2024年4月ご利用分より】 2024年4月ご利用分より、My Redmine スタンダードプラン(民間企業・個人向け及び官公庁向け)とAdminサポートデスクプランの料金を改定いたします。 |
|
My Subversion 一部のプラン・料金改定のお知らせ【2024年4月ご利用分より】 2024年4月ご利用分より、My Redmine スタンダードプラン(民間企業・個人向け及び官公庁向け)とAdminサポートデスクプランの料金を改定いたします。 |
|
My Subversion ストレージ容量増量のお知らせ(一部プランを除く) My Subversionではミディアムプラン以上の各プランのストレージ容量を増量します。 |
|
Redmineの最新情報をメールでお知らせする「Redmine News」配信中 新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け |