🦊

Cloud Vision APIを使ってOCRツールを作ってみる

2024/07/03に公開

株式会社Mambacomの太田です。
取引先から請求書の明細の突合を手動でやっているという話があり、システムで効率化できないかと考えていました。そこでGoogle CloudのCloud Vision APIを使って請求書を読み取るシステムを簡単に作ってみました。

OCRとは

光学文字認識(こうがくもじにんしき、英: Optical character recognition)は、活字、手書きテキストの画像を文字コードの列に変換するソフトウェアである。

https://ja.wikipedia.org/wiki/光学文字認識

OCRという単語を聞いたことはありましたが、どんなものかは触ったことがありませんでした。このようにAPIで簡単に誰でも使えるようになるのはかなり便利です。

実装

今回はRuby on RailsのActive Strageを使ってCloud Strageに画像をアップロードし、その画像をCloud Vision APIに読み取ってもらうようにしました。

Rails New

rails new new-ocr

作成されたフォルダに移動します

Invoice Model、Active Strageの作成

請求書データを持たせるInvoice Modelを作成し、画像を持たせるActive Strageを導入します。

rails g model Invoice title:string text:string
rails active_storage:install
rails db:migrate

Active Strageの設定を行います。

Gemfile
class Invoice < ApplicationRecord
  has_one_attached :image
end
config/environments/development.rb
config.active_storage.service = :google
config/storage.yml
google:
  service: GCS
  project: ocr-development
  credentials: <%= Rails.root.join("xxxxx") %>
  bucket: ocr-development

credentialsにサービスアカウントキーへのパスを入れます。
これで基本的な設定は完了です。
あとはInvoice.createする際に imageを入れておけばよしなにやってくれます。

Cloud Vision APIを使う

Gemfile
gem 'google-cloud-vision'
GOOGLE_APPLICATION_CREDENTIALS=

キーへのパスと入れておきます。

app/controllers/invoices_controller.rb
@invoice = Invoice.find(params[:id])
file_path = params[:image_url]
image_annotator = Google::Cloud::Vision.image_annotator
response = Google::Cloud::Vision.image_annotator.document_text_detection(image: file_path,  max_results: 1, image_context: { language_hints: %i[ja] })
response.responses.each do |res|
  res.text_annotations.each_with_index do |text, index|
    next if index.zero? || text.description.blank?
    @invoice.text << text.description
  end
end
@invoice.save

アップロードした画像をGoogle Cloud Visionで読み取ってもらい、そのテキストデータを保存します。

結果

↓のような請求書画像から

下のようなテキストデータで保存することができました。

感想

文字がほとんど読み取れていて、かなり便利だなと思いました。ただ請求書の突合という部分では、テキストデータを整形する作業が必要で、これが請求書ごとに変わってきて大変そうだなと思いました。
次は同じくGoogleのDocument AIを使ってみようと思います。こちらの方が請求書や書類に特化していそうです。

おわりに

株式会社Mambacomでは開発案件を随時募集しております。気になりましたら私のXにご連絡ください。

参考

https://qiita.com/da-yoshi-k/items/546904a222acf57d6806

Discussion