🧐

GASでOCRを簡単に使えるんですか!?

2 min read

この記事のひとことまとめ

GASでgoogle Driveのフォルダーにアップロードされた画像(PDFもいけます)からgoogle drive APIとDocumentApp ClassをつかってOCRし情報をテキストとしてとりだす方法を紹介します。
これを使うことで、以下のようなことができると思います。

  1. 紙のシフト表をスマホでとってDriveにあげてグーグルカレンダーやタイムツリーにシフトを自動登録する
  2. レシートを読み込んで品名や金額をスプレッドシートに自動登録する

はじめに

OCR(光学文字認識)をgoogleのAPIであるGoogle Cloud Vision APIでできることは知っていたんですが、このAPIはGAS(google app script)ではサービスとして提供されていないのでさっとは使えませんでした。
ですが、サービスとして提供されているDrive APIをつかうことでOCRができたんです!

OCRをやってみる

画像アップロードファイルの作成と画像のアップロード

google driveを開き新しくフォルダを作成してOCRしたい画像をアップロードしておきます。
今回は以下の写真をOCRしてみたいと思います。

アップロードしたら下の画像の赤い部分をひかえておきましょう!これが後々使うFolderIdとなります。

プロジェクトの作成

google driveを開き下記の場所からgasの新しいプロジェクトを作成します。

使用するサービスの有効化

作成したプロジェクトを開き左のメニューからサービスの追加を行います。サービス横のプラスマークを押すと追加するサービスを選べるので、「Drive API」を追加してください。

コードを書く&実行

準備は整ったので画像を読み込みCORしていきます!

const folderId = "さっき控えたID"
function myFunction() {
  // フォルダーに入っているファイル一覧を取得
  let a = Drive.Children.list(folderId)
  
  // 設定事項を書いていく
  let resource = {
    title: "test" // ここは途中で生成されるファイル名の指定です(ファイルを消すのでなんでもいいです)
  };
  let option = {
    "ocr": true,// OCRを行うかの設定です
    "ocrLanguage": "ja",// OCRを行う言語の設定です
  }
  
  // 取得したファイル一覧の最初のもののfileIdを変数に格納します
  let fileId = a.items[0].id
  // 指定したfileIdのファイルをコピーします
  let image = Drive.Files.copy(resource, fileId, option)
  // コピー先ファイルにはOCRのデータが含まれているのでテキストを取得します
  let text = DocumentApp.openById(image.id).getBody().getText();
  // コピー先ファイルはもう不要なので削除
  Drive.Files.remove(image.id)
  // OCRした内容を表示
  console.log(text)
}

これで実行すると以下のような結果が表示されます。

ウマ娘詳細
[うららん一等賞♪]
ハルウララ
RANK 二つ名
GIウマ娘」
変更
スピードスタミナ ミニパワーの根性
一賢さ
B 688 E 281 C495A 867 E273
バ場適性芝Dダート A
距離適性 短距離 A | マイル B| 中距離 F | 長距離 G
脚質適性 | 逃げF|| 先行 G
差し A
追込 B
スキル
継承
育成情報
エフワクワクよーいドン
Lv1
「直線巧者
「え、差し切り体勢
ス スプリントギア
に先行駆け引き
差しコーナー◎
十万バリキ
閉じる
じる

しっかり取得できていないところもありますがおおよそ取れてますね!
ここから必要な情報だけ取り出し、スプレッドシートに書き出していく処理をかいたりいろいろできそうですね〜!

おわりに

今回GASでOCRを行いました。
きっかけは、同居人がシフト制でその予定を毎月カレンダーアプリに登録するのが大変そうだったので作成しました。
シフト表は取得すべき情報が規則的に書かれていたので必要な情報は意図しない文章が入ることなく取得することができました。
例であつかったスクショではところどころしっかり取得できていなかったので前処理などがひつようになってきそうですね〜
簡単に情報を取得・整理・登録ができるので使い方次第ではいろいろなことができそうですね!
なにかいい使い方があったらぜひコメントでもツイッターでも教えてください!!

Discussion

ログインするとコメントできます