Cloud Vision APIを使ってOCRツールを作ってみる
株式会社Mambacomの太田です。
取引先から請求書の明細の突合を手動でやっているという話があり、システムで効率化できないかと考えていました。そこでGoogle CloudのCloud Vision APIを使って請求書を読み取るシステムを簡単に作ってみました。
OCRとは
光学文字認識(こうがくもじにんしき、英: Optical character recognition)は、活字、手書きテキストの画像を文字コードの列に変換するソフトウェアである。
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の設定を行います。
class Invoice < ApplicationRecord
has_one_attached :image
end
config.active_storage.service = :google
google:
service: GCS
project: ocr-development
credentials: <%= Rails.root.join("xxxxx") %>
bucket: ocr-development
credentials
にサービスアカウントキーへのパスを入れます。
これで基本的な設定は完了です。
あとはInvoice.create
する際に image
を入れておけばよしなにやってくれます。
Cloud Vision APIを使う
gem 'google-cloud-vision'
GOOGLE_APPLICATION_CREDENTIALS=
キーへのパスと入れておきます。
@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にご連絡ください。
参考
Discussion